我需要将变量传递给命令,但无法使其工作。下面是一个简短的示例,显示可以将 #1 发送给命令,但不能将作为 #1 副本的变量发送给命令。这是为什么?
\documentclass{article}
\usepackage{tikz}
\pgfkeys
{ /mypgf/.cd
, options/.store in = \options
, options/.get = \options
}
\newcommand{\img}[2][]{
\pgfkeys{/mypgf/.cd, options=#1}
\def \test {#1}
% This works:
\includegraphics[#1]{#2}
% This does not work:
\includegraphics[\options]{#2}
% This does not work either:
\includegraphics[\test]{#2}
}
\begin{document}
\img[width=0.1\textwidth]{image.png}
\end{document}
答案1
正如@egreg的评论中提到的那样,\includegraphics
不会扩展其第一个参数。明智地使用可以\expandafter
解决这一部分问题。
但是,传递的值中隐藏的内容也\pgfkeys
会让你感到困惑。尝试以下方法:=
\documentclass{article}
\usepackage{tikz}
\pgfkeys
{/mypgf/.cd,
options/.store in = \options,
options/.get = \options,
}
\newcommand{\img}[2][]{
\pgfkeys{/mypgf/.cd, options={#1}}
\def \test {#1}
%%\typeout{===>"\options"|#1}%%
% This works:
\includegraphics[#1]{#2}
% This does not work:
\expandafter\includegraphics\expandafter[\options]{#2}
% This does not work either:
\expandafter\includegraphics\expandafter[\test]{#2}
}
\begin{document}
\img[width=\dimexpr0.1\textwidth]{example-image}
\end{document}
通过取消注释,\typeout
您可以更好地看到传递的内容\options
。通过括#1
在括号中,\options
可以接收正确的字符串。
另外,我会在行尾放置逗号\pgfkeys{....}
,以防止不必要的空白渗入到键的值中。