我希望能够动态调用参数。以下 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}
。当然,有办法做到这一点,但在分心之前,更好的用例可能是第一步。