
Es gibt mehrere Möglichkeiten, die \includegraphics
Suche nach der einzubindenden Bilddatei zu ändern. Ich interessiere mich für \DeclareGraphicsExtensions
und \graphicspath
.
Was ist \includegraphics
ein Suchalgorithmus? Wird er
foreach extension in {<ext-list>}
foreach directory in {<dir-list>}
, oder foreach directory ... foreach extension
?
... oder sucht es sogar parallel?
Ich frage, weil ich Bilder oft als Teil eines Makefiles konvertiere, bevor LaTeX tatsächlich ausgeführt wird. Außerdem gebe ich in meinen \includegraphics
Anweisungen nie Dateierweiterungen an. Ich bin mit dem aktuellen Verfahren meines Makefiles nicht zufrieden und möchte es optimieren. Dazu muss ich wissen, wie \includegraphics
die Suche funktioniert.
Letztendlich möchte ich ein Verzeichnis mit allen meinen Bildquelldateien und ein weiteres Verzeichnis mit allen konvertierten/manipulierten Bildern haben. Ich möchte sicherstellen, dass \includegraphics
immer zuerst im Verzeichnis mit allen Konvertern nach einem passenden Dateinamen gesucht wird und dann im Verzeichnis mit den Quelldateien, wenn im Konverterverzeichnis keine Übereinstimmung gefunden wurde.
Zu jeder Antwort stellt sich also die zusätzliche Frage: Ist dieses Verhalten stabil oder Änderungen unterworfen?
Antwort1
Wenn keine Erweiterung angegeben ist, werden nacheinander alle Erweiterungen ausprobiert, um zu prüfen, ob die Datei vorhanden ist (mithilfe des LaTeX-Standardtests \IfFileExists
).
Wenn also die Dateierweiterungen (in der Liste, \Gin@extensions
wie sie über den Befehl festgelegt wurde \DeclareGraphicExtensions
) .png
, , .jpg
sind .pdf
und die Liste, \input@path
wie sie durch festgelegt wurde, \graphispath
ist {aaa/}{bbb/}
und Sie
\includegraphics{foo}
Es wird der Reihe nach getestet mit\IfFileExists
foo.png
, foo.jpg
dann foo.pdf
, und stoppt, sobald eine Datei gefunden wird.
\IfFileExists{foo.png}
Prüfungen in der Reihenfolge
foo.png
, aaa/foo.png
Undbbb/foo.png
und meldet Erfolg, sobald eine Datei vom primitiven \openin
Primitiv von TeX gefunden wird.
In jedem Fall \openin
wird zuerst das aktuelle Verzeichnis und dann der vollständige TEXINPUT-Pfad durchsucht, wie in Ihren texmf.cnf
oder entsprechenden Miktex-Einstellungen festgelegt.
Abhängig von den Einstellungen kann dies eine Suche im Dateisystem oder die Suche nach der Datei in einer vorgespeicherten ls-r-Datei beinhalten, wobei genau die gleiche Logik wie verwendet wird \input
.