\includegraphics 的搜索顺序是什么?

\includegraphics 的搜索顺序是什么?

有多种方法可以修改如何\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.pngfoo.jpg然后foo.pdf,一旦找到文件就停止。

\IfFileExists{foo.png}

按顺序进行测试

foo.pngaaa/foo.pngbbb/foo.png

一旦 TeX 的原始\openin基元找到文件,就会报告成功。

在每种情况下,将首先搜索当前目录,然后搜索您或等效 miktex 设置\openin中设置的完整 TEXINPUT 路径。texmf.cnf

根据设置,这可能涉及搜索文件系统,或者使用与完全相同的逻辑在预存储的 ls-r 文件中查找文件\input

相关内容