我正在写我的论文/论文,由于它是一项正在进行的工作,我并不总是为我放入文档中的数字准备好实际图像,但出于各种原因,我希望它自动替换一个虚拟数字当包含的图形文件不存在时。例如,我可以做类似的事情\includegraphics[width=8cm]{\chapdir/figures/fluxcapacitor}
(\chapdir
我的“当前”章节目录的宏在哪里,例如\def\chapdir{./ch_timetravel}
,如果没有./ch_timetravel/figures/fluxcapacitor.jpg
,它将插入./commands/dummy.jpg
。
我已经构建了我的宏(也许是天真的?),所以我有一个宏 ( \figFileOrDummy
),它通过检查提供给它的参数是否存在来确定要包含的适当文件,以便我可以调用\includegraphics[properties]{\figFileOrDummy{\chapdir/figures/fluxcapacitor}}
. 除了我遇到各种错误,具体取决于我如何尝试调用它,这似乎表明就“良好的 LaTeX 编程”而言,我正在以一种根本有缺陷的方式解决问题。
这是检查文件是否存在的宏(并“返回”文件名或虚拟文件名):
\newcommand{\figFileOrDummy}[1]{%
% Figure base name (no extension) to be used if the file exists
\def\fodname{#1}%
\def\dummyfig{commands/dummy}%
% Check if output is PS (.EPS) or PDF (.JPG/.PDF/.PNG/...) figures
\ifx\pdfoutput\undefined%
% EPS figures only
\IfFileExists{\fodname.eps}{}{\def\fodname{\dummyfig}}%
\else%
% Check existence of various extensions: PDF, TIF, TIFF, JPG, JPEG, PNG, MPS
\def\figtest{0}% flag below compared to this value
\IfFileExists{\fodname.pdf}{\def\figfilenamefound{1}}{\def\figfilenamefound{0}}%
\IfFileExists{\fodname.jpg}{\def\figfilenamefound{1}}{}%
\IfFileExists{\fodname.png}{\def\figfilenamefound{1}}{}%
% and so on...
% If no files found matching the filename (flag is 0) then use the dummy figure
\ifx\figfilenamefound\figtest%
\def\fodname{\dummyfig}%
\fi%
\fi%
% 'return' the filename
\fodname%
}%
或者,这是一个更简单的版本,似乎有类似的问题:
\newcommand{\figFileOrDummy}[1]{%
\def\dummyfig{commands/dummy}%
\dummyfig%
}
这些\def
命令似乎是在他们试图定义的宏的扩展之后\def {commands/dummy}...
处理的,所以它最终是(注意后面的空格\def
)并且显然会抱怨。
此外,它似乎将宏的文字内容视为文件名\includegraphics
,而不是先解析/扩展它,因此抱怨该文件'\def {commands/dummy}... .png'
不存在。
我也尝试过
\edef\figfilename{\figFileOrDummy{\chapdir/figures/fluxcapacitor}}
尝试强制它只\figfilename
保留值而不是完整的宏,但是我收到一个Undefined control sequence
错误,抱怨我\def
在\figFileOrDummy
宏中尝试的变量未定义。
所以我的问题是
- 如何使此宏正确扩展?或者
- 如果这是构建宏的错误方式,我应该如何实际构建这样的宏,以便能够自动插入虚拟/真实数字?或者
- 是否有一个包已经很好地处理了我忽略的这种类型的事情?
我觉得我在这里错过了一些非常基本的东西......