我正在尝试添加一张图片:
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\newcommand{\ext}{.pdf}
\def\incPIC#1{ \expandafter\includegraphics{#1}}
{
\tracingmacros=1
\tracingassigns=1
\incPIC{../graphics/PerformancePlots/figureTree-P-0-10\ext}
}
\end{document}
上面的方法不起作用,因为\ext
首先在命令内部深处展开\includegraphics
,我想在调用之前展开它\includegraphics
?我做错了什么。不应该先\expandafter
展开吗#1
?
答案1
该\expandafter
命令尝试扩展一个级别紧跟下一个标记。
使用您的代码,尝试的令牌是{
,它是不可扩展的。
使用 不可能到达参数中的最后一个标记\expandafter
,因为您不知道有多少个标记。
不过,有些技巧是可行的。最简单的方法是强制完全展开参数:
\documentclass{article}
\usepackage{graphicx}
\newcommand{\ext}{.jpg}
\newcommand\incPIC[1]{%
\begingroup\edef\x{\endgroup
\noexpand\includegraphics{#1}%
}\x
}
\begin{document}
\incPIC{example-image\ext}
\end{document}
另一方面,\ext
最好在定义中这样写:
\documentclass{article}
\usepackage{graphicx}
\newcommand{\ext}{.jpg}
\newcommand\incPIC[1]{%
\begingroup\edef\x{\endgroup
\noexpand\includegraphics{#1\ext}%
}\x
}
\begin{document}
\incPIC{example-image}
\end{document}
xparse
使用 和的不同技巧expl3
,因此也很容易容纳 的可选参数\includegraphics
。
\documentclass{article}
\usepackage{graphicx}
\usepackage{xparse}
\newcommand{\ext}{.jpg}
\ExplSyntaxOn
\cs_new_protected:Nn \gabriel_includegraphics:nnn
{
\includegraphics[#2]{#3#1}
}
\cs_generate_variant:Nn \gabriel_includegraphics:nnn { V }
\NewDocumentCommand\incPIC {O{}m}
{
\gabriel_includegraphics:Vnn \ext { #1 } { #2 }
}
\ExplSyntaxOff
\begin{document}
\incPIC{example-image}
\incPIC[width=3cm]{example-image}
\end{document}
也可以看看选择在 PDFLaTeX 中是否包含 PDF 或 PNG针对不同的策略。