有多种方法可以修改如何\includegraphics
查找要包含的图像文件。我对\DeclareGraphicsExtensions
和感兴趣\graphicspath
。
什么是\includegraphics
搜索算法?它会搜索
foreach extension in {<ext-list>}
foreach directory in {<dir-list>}
, 或者foreach directory ... foreach extension
?
...或者它甚至是并行搜索的?
我之所以问这个问题,是因为我经常在实际运行 LaTeX 之前将图像转换为 Makefile 的一部分。我也从不在语句中提供文件扩展名\includegraphics
。我对 Makefile 的当前过程不满意,想对其进行优化。为此,我需要知道\includegraphics
它的搜索方式。
最终,我希望有一个目录包含我的所有图像源文件,另一个目录包含所有转换/处理后的图像。我想确保\includegraphics
始终首先在包含所有转换对象的目录中查找匹配的文件名,然后如果在转换对象目录中找不到匹配的文件名,则在源文件目录中查找。
因此,对于任何答案,都有一个额外的问题:这种行为是否稳定或会发生变化?
答案1
如果没有提供扩展名,那么它会依次尝试每个扩展名来查看该文件是否存在(使用 LaTeX 的标准\IfFileExists
测试)。
\Gin@extensions
因此,如果文件扩展名(在通过命令设置的 列表中\DeclareGraphicExtensions
)是.png
,,.jpg
并且.pdf
如果列表\input@path
设置为\graphispath
,{aaa/}{bbb/}
并且您执行
\includegraphics{foo}
它将按顺序进行测试\IfFileExists
foo.png
,foo.jpg
然后foo.pdf
,一旦找到文件就停止。
\IfFileExists{foo.png}
按顺序进行测试
foo.png
,aaa/foo.png
和bbb/foo.png
一旦 TeX 的原始\openin
基元找到文件,就会报告成功。
在每种情况下,将首先搜索当前目录,然后搜索您或等效 miktex 设置\openin
中设置的完整 TEXINPUT 路径。texmf.cnf
根据设置,这可能涉及搜索文件系统,或者使用与完全相同的逻辑在预存储的 ls-r 文件中查找文件\input
。