如何在 \includegraphics 中使用 xstring 谓词?

如何在 \includegraphics 中使用 xstring 谓词?

这是代码:

\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>

这表明图像是从预期的位置加载的。

相关内容