我真的很想做如下的事情:
\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