如何在 IfFIleExists 中使用 graphicspath?

如何在 IfFIleExists 中使用 graphicspath?

代码哪里IfFileExists读不出来graphicspath

\documentclass{article}
\usepackage{pgffor}
\extrafloats{1000}
\usepackage{graphicx} % for importing .pdf images
\graphicspath{{/home/masi/Documents/Images/}}
\begin{document}
\foreach \ii in {1,...,62} {
  \IfFileExists{\ii.jpg}{1}{0}
}
\end{doument}

答案1

\graphicspath只需在图形加载期间在本地设置路径,如果您想为输入等设置相同的路径,也可以替换

\graphicspath{{/home/masi/Documents/Images/}}

经过

\makeatletter
\def\input@path{{/home/masi/Documents/Images/}}
\makeatother

或者(更好)不要使用\graphicspath,而是使用

TEXINPUTS=/home/masi/Documents/Images/: pdflatex document

因此可以在那里搜索而不需要文档中的任何路径。

答案2

大卫·卡莱尔的回答如果您作为文档作者需要“graphicx意识” ,那么这很有用。\IfFileExists

但是,如果您以软件包编写者的身份阅读此问题,那么您可能正在寻找一种方法来处理在加载软件包之前使用过的用户\graphicspath{...}和刚刚加载软件包的用户。

latexdef -p graphicx graphicspath显示:

\graphicspath:
macro:#1->\def \Ginput@path {#1}

\graphicspath所做的就是将其参数存储在宏中\Ginput@path,否则该宏很可能未定义。

因此如果\Ginput@path定义了,我们可以将其内容添加到\input@path仅用于测试\IfFileExists(即,\input@path测试后将恢复的原始定义)。

\makeatletter
% \input@path is not necessarily defined, but if it is,
% we don't want to erase its contents
\providecommand*{\input@path}{}
\newcommand{\IfImageExists}[3]{%
  % enclosing the possible redefinition of \input@path
  % and the \IfFileExists test in this group will
  % make \input@path revert to its previous definition after the test
  \begingroup
  % \ifdefined comes from eTeX, but
  % if you're using graphicx I suppose you're using eTeX
  \ifdefined\Ginput@path
    \edef\input@path{\input@path\Ginput@path}%
  \fi
  \IfFileExists{#1}{\endgroup #2}{\endgroup #3}%
  \endgroup
}
\makeatother

相关内容