
Есть несколько способов изменить то, как \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
.