includegraphics 和 xstring 包

includegraphics 和 xstring 包

我真的很想做如下的事情:

\includegraphics{\StrSubstitute{No Spaces}{ }{}}

但是,这给了我一个未定义的控制序列错误。我看到一些关于includegraphics不评估参数中的宏的帖子。所以我尝试了这个:

\newcommand{\imageFoo}[1]{
  \includegraphics{#1}
}

\begin{document}

\imageFoo{\StrSubstitute{No Spaces}{ }{}}

\end{document}

这也给了我未定义的控制序列错误。

为了进一步测试,我定义:

\newcommand{\identityMacro}[1]{#1}

以下一切都按预期进行:

\includegraphics{NoSpaces}
\imageFoo{NoSpaces}
\imageFoo{\identityMacro{NoSpaces}}
\includegraphics{\identityMacro{NoSpaces}}
\StrSubstitute{No Spaces}{ }{}

有人能帮助我理解为什么includegraphics永远不起作用StrSubstitute吗?

答案1

论点必须扩张到文件名。

所以你可以去

\newcommand\foo{file.png}
\includegraphics{\foo}

\foo扩展为file.png

但你不能去

\includegraphics{\newcommand\foo{file.png}\foo}

因为命令的定义是赋值,不可扩展。您调用的字符串函数属于这种形式,它们进行内部定义,而不是简单地扩展为结果。


\makeatletter
\newcommand\removespace[1]{\zap@space#1 \@empty}
\makeatother

你可以去

\includegraphics{\removespace{ my file}}

输入myfile.png

相关内容