传递变量作为参数

传递变量作为参数

我需要将变量传递给命令,但无法使其工作。下面是一个简短的示例,显示可以将 #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{....},以防止不必要的空白渗入到键的值中。

相关内容