编写一个命令,动态调用另一个命令的参数

编写一个命令,动态调用另一个命令的参数

我希望能够动态调用参数。以下 MWE 仅用于说明我想要的内容,仅此而已:

\documentclass{article}

\def\aecommandA#1#2#3{%%
  \typeout{==> command A ==> arg (1) is ==> #1}%%
  \typeout{==> command A ==> arg (2) is ==> #2}%%
  \typeout{==> command A ==> arg (3) is ==> #3}%%
}

\def\aecommandB#1#2#3{%%
  \aetypeoutarg{==> command B}{1}%%
  \aetypeoutarg{==> command B}{2}%%
  \aetypeoutarg{==> command B}{3}%%
  }
\def\aetypeoutarg#1#2{%%
  \typeout{#1 ==> arg (#2) is ==> \expandafter##2}}

\pagestyle{empty}
\begin{document}

Hello:
\aecommandA{A}{B}{C}
\aecommandB{A}{B}{C}

\end{document}

我希望\aecommandA\aecommandB产生相同的输出。我尝试了各种各样的方法,包括

\expandafter##2

就像在 MWE 中定义新命令一样

\def\grabarg#1{%%
    \ifcase#1\relax\or
      ##1\or
      ##2\or
      ##3\or
      ##4\or
      ##5\or
      ##6\or
      ##7\or
      ##8\or
      ##9\fi}

都不起作用。我想我可能尝试过其他一些方法,但我记不清了。

答案1

我不清楚你真正想要实现什么;在这个例子中,你需要

\def\aecommandB#1#2#3{%%
  \aetypeoutarg{==> command B}{1}{#1}%%
  \aetypeoutarg{==> command B}{2}{#2}%%
  \aetypeoutarg{==> command B}{3}{#3}%%
  }
\def\aetypeoutarg#1#2#3{%%
  \typeout{#1 ==> arg (#2) is ==> #3}}

这似乎违背了问题的目的。

不要忘记 TeX 是一种宏扩展语言;当你写 时\aecommandB{A}{B}{C},它会扩展为

\aetypeoutarg{==> command B}{1}%%
\aetypeoutarg{==> command B}{2}%%
\aetypeoutarg{==> command B}{3}%%

因此吞噬的参数\aecommandB将永远消失。如果\aecommandB不接受参数,它将扩展为

\aetypeoutarg{==> command B}{1}%%
\aetypeoutarg{==> command B}{2}%%
\aetypeoutarg{==> command B}{3}%%
{A}{B}{C}

而第一个\aetypeoutarg方法无法轻易知道要跳转多少个参数才能获取{A}。当然,有办法做到这一点,但在分心之前,更好的用例可能是第一步。

相关内容