这是代码:
\documentclass{article}
\usepackage{graphics}
\usepackage{xstring}
\begin{document}
\newcommand\abs[1]{\IfBeginWith{#1}{/}{#1}{images/#1}}
\includegraphics{\abs{/tmp/photo.jpg}}
\end{document}
无法编译。直接挂断。
答案1
xstring 命令不可扩展,因此您不能在那里使用它们 –
但是,您可以按如下方式构造它:
\newcommand\abs[1]{\IfBeginWith{#1}{/}{\includegraphics{#1}}{\includegraphics{images/#1}}} \abs{/tmp/photo.jpg}
但是你可以添加{images/}
到图形路径那么你就不需要测试并且可以做
\includegraphics{filename}
\includegraphics{/a/b/c/filename}
第一个是在images
子目录中找到的。
答案2
您必须使用可扩展的命令。
\documentclass{article}
\usepackage{graphicx}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\abs}{m}
{
\str_if_eq:eeF { \str_head:n { #1 } } { / } { images/ } #1
}
\ExplSyntaxOff
\begin{document}
\includegraphics[width=3cm]{\abs{duck}}
\includegraphics[width=3cm]{\abs{/tmp/hello}}
\end{document}
编译结果
日志文件中的相关部分是
<./images/duck.jpg> </tmp/hello.png>
这表明图像是从预期的位置加载的。