Ordnerstruktur

Öffne in Overleaf
.../Projekt/main.tex
.../Projekt/content/Chap1/chap1.tex
.../Projekt/content/Chap1/bild.jpeg

main.tex

Öffne in Overleaf
\documentclass{article}%
\begin{document}
\input{content/Chap1/chap1.tex}
\end{document}

chap1.tex (keinen weiteren Pfad gesetzt, da .jpeg im gleichen Ordner ist wie chap1.tex)

Öffne in Overleaf
\begin{figure}
\includegraphics{bild}
\end{figure}

Fehlermeldung

Öffne in Overleaf
! LaTeX Error: File `bild' not found.

Was läuft schief?

gefragt 17 Sep '18, 16:14

runix's gravatar image

runix
1.0k247486
Akzeptiert-Rate: 0%

bearbeitet 17 Sep '18, 16:22

Du kannst Dir \input so vorstellen, dass TeX einfach den Inhalt der angegebenen Datei an die Stelle kopiert. Das heißt, dass Dein main.tex einfach an der Stelle von \input{content/Chap1/chap1.tex} den Inhalt der Datei chap1.tex stehen hat. Mehr nicht. TeX weiß dann nicht mehr, dass dieser Inhalt aus einer anderen Datei kam. Wenn Du jetzt main.tex kompilierst, sucht TeX nach dem Bild bild (denn das steht ja so im Code), das wird aber nicht gefunden, da es im Unterordner wohnt. (Ich hätte schwören können, ich hätte genau diese Frage vor einiger Zeit schon gesehen, ich such mal.)

(17 Sep '18, 16:25) moewe
1

Helfen könnte wohl https://ctan.org/pkg/import helfen. Oder \graphicspath: https://tex.stackexchange.com/q/139401/35864

(17 Sep '18, 16:30) moewe

Hi @moewe. Vielen Dank für deinen Hinweis mit \graphicspath. Dieser hat einwandfrei das Problem gelöst. Möchtest du eine Antwort verfassen oder soll ich mit Bezug auf deinen Kommentar und die Lösung bei tex.stackexchange eine Antwort verfassen? Dann könnte man die Kommentare löschen.

(17 Sep '18, 17:33) runix

@chuck Ja, die dortige Lösung hat ja auch moewe bereits erwähnt. Ich finde es aber gut, wenn eine minimale, auf graphicspath basierende Lösung hier aufgenommen wird.

(18 Sep '18, 13:12) runix

Wenn TeX \input in einer Datei liest, dann wird an der Stelle des Befehls einfach der Inhalt der angegebenen Datei eingefügt. Viel mehr passiert nicht (TeX sorgt schon dafür, dass die Zeilennummern in den Fehlermeldungen sich auf die wirkliche Situation beziehen und nicht so sind, als würde das Dokument wirklich mit ersetzten \inputs gelesen).

Praktisch heißt das, dass (to most intents and purposes) in Deiner main.tex

Öffne in Overleaf
\includegraphics{bild}

steht. Wenn TeX also zu dieser Zeile kommt, geht es los und sucht bild, diese Datei ist im aktuell von TeX durchsuchten Ordner (dem durchsuchten Pfad, der normalerweise aus dem aktuellen Ordner und noch ein paar anderen Installations-Orten besteht) aber nicht zu finden.

Das Problem ist, dass TeX die Meta-Information verlorengegangen ist, dass \includegraphics{bild} aus der Datei content/Chap1/chap1.tex kommt, in deren Kontext bild dann eigentlich content/Chap1/bild bedeutet.

Beheben kann man das mit dem Paket import, das stellt den Befehl \subimport{<relativer Pfad>}{<Dateiname>} bereit, mit dem man die Datei <relativer Pfad>/<Dateiname> so einliest, dass der Kontext <relativer Pfad> erhalten bleibt. Die lokalen Pfade in dieser eingelesenen Datei werden dann wie erwartet verstanden.

Öffne in Overleaf
\documentclass{article}
\usepackage{graphicx}
\usepackage{import}
\begin{document}
\subimport{content/Chap1/}{chap1}
\end{document}

funktioniert dann so wie gewünscht. Ich habe hier die ungesternte Version \subimport verwendet, meist sollte das schon genug sein. Aber in ganz verzwickten Fällen, in denen viele Dateien gleich heißen, muss es vielleicht \subimport* sein, da dieser Befehl Dateien im angegebenen Pfad Vorrang vor gleichnamigen Dateien in TEXINPUTS gibt.

Eine andere Möglichkeit ist die Nutzung von \graphicspath, siehe auch How to use graphicspath? bei TeX.SX. Damit kann man einfach zusätzliche Suchpfade für Graphiken anbieten. Mit

Öffne in Overleaf
\documentclass{article}
\usepackage{graphicx}
\graphicspath{{content/Chap1/}}
\begin{document}
\input{content/Chap1/chap1}
\end{document}

würde bei \includegraphics{bild} nicht nur bild gesucht und nicht gefunden, sondern auch content/Chap1/bild, was dann einen Treffer gibt. Der Nachteil von \graphicspath ist, dass es dort nicht wie bei \import eine gesterne Variante gibt, die den Suchpfad nur lokal für ein \input anpasst, das kann dann dazu führen, dass bei gleichen Dateinamen immer dieselbe Datei gefunden wird, obwohl unterschiedliche gemeint sind (stellt Dir vor in content/Chap2 liegt auch eine bild.jpeg und Du willst Die in \input{content/Chap2/chap2} einbinden). Außerdem habe ich eine persönliche Abneigung gegen \graphicspath, da ich diesen Befehl in Foren häufig in schlecht gemachten Vorlagen sehe, aber das soll Dich nicht von der Nutzung abhalten.

Eine ähnliche aber noch radikalere Möglichkeit besteht darin, TEXINPUTS vor dem Aufruf von TeX zu setzen. Zumindest in MikTeX kann man stattdessen auch die Kommandozeilenoption -include-directory=<DIR> verwenden, um den Suchpfad anzupassen. Dann sucht TeX nach allen Dateien auch in den angegebenen Unterordnern.

Permanenter link

beantwortet 18 Sep '18, 11:15

moewe's gravatar image

moewe
3.7k36
Akzeptiert-Rate: 42%

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×16

gestellte Frage: 17 Sep '18, 16:14

Frage wurde gesehen: 5,037 Mal

zuletzt geändert: 18 Sep '18, 13:13