我已经使用 xkeyval 定义了我自己的图形命令,并且我想将嵌套的 \includegraphics 的参数作为它的一个键值传递(也许我删除了太多代码,但我希望你能明白):
\makeatletter
\define@key[foo]{bar}{options}{\def\FooBarOptions{#1}}
\define@key[foo]{bar}{label}{\def\FooBarLabel{#1}}
\define@key[foo]{bar}{caption}{\def\FooBarCaption{#1}}
\makeatother
%\MySpecialFigure[keyvals]{filename}
\newcommand{\MySpecialFigure}[2][]{%
\begingroup
\setkeys[foo]{bar}{options={}, label={}, caption={}}
\setkeys[foo]{bar}{#1}
\begin{figure}
\includegraphics[\FooBarOptions]{#2}
\caption{\FooBarCaption}
\label{\FooBarLabel}
\end{figure}
\endgroup
}
我想像这样使用它:
\MySpecialFigure[options={width=0.5\textwidth, draft},
label={fig:label},
caption={My Caption}]
{my-pic.png}
由于选项周围有括号,整个块被解析为一个值,\includegraphics
其行为如下:
\includegraphics[{width=0.5\textwidth, draft}]{my-pic.png}
我收到错误:
Package xkeyval Error:'width=0.5\textwidth, draft' undefined in families 'Gin'
我试过
\define@key[foo]{bar}{options}{\edef\FooBarOptions{#1}}
但这也不会剥去牙套。
我该如何解决这个问题?
答案1
您需要先展开,\FooBarOptions
然后再将其输入到\includegraphics
,否则它将被视为一个键。这与额外的一层括号无关。
转向
\includegraphics[\FooBarOptions]{#2}
进入
\expandafter\includegraphics\expandafter[\FooBarOptions]{#2}
应该修复它。