Каков порядок поиска \includegraphics?

Каков порядок поиска \includegraphics?

Есть несколько способов изменить то, как \includegraphicsищется файл изображения для включения. Меня интересуют \DeclareGraphicsExtensionsи \graphicspath.

Что такое \includegraphicsалгоритм поиска? Будет ли он искать?

foreach extension in {<ext-list>}
    foreach directory in {<dir-list>}

, или foreach directory ... foreach extension?

... или он вообще ищет параллельно?

Я спрашиваю, потому что мне часто приходится конвертировать изображения как часть Makefile до фактического запуска LaTeX. Я также никогда не предоставляю расширения файлов в своих \includegraphicsутверждениях. Я не доволен текущей процедурой моего Makefile и хотел бы оптимизировать ее. Для этого мне нужно знать, как \includegraphicsон выполняет поиск.

В конечном счете я хотел бы иметь каталог со всеми моими исходными файлами изображений и другой каталог со всеми преобразованными/обработанными изображениями. Я хочу быть уверенным, что он \includegraphicsвсегда будет сначала искать в каталоге со всеми конвертируемыми файлами соответствующее имя файла, а затем искать в каталоге исходных файлов, если он не найдет совпадения в convertee-dir.

Поэтому для любого ответа возникает дополнительный вопрос: является ли это поведение стабильным или подвержено изменениям?

решение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.

В каждом случае \openinсначала будет выполнен поиск в текущем каталоге, а затем будет выполнен поиск по полному пути TEXINPUT, указанному в ваших texmf.cnfили эквивалентных настройках miktex.

В зависимости от настроек это может включать поиск в файловой системе или поиск файла в предварительно сохраненном файле ls-r с использованием точно такой же логики, как и \input.

Связанный контент