找出所需的宏参数的数量

找出所需的宏参数的数量

如何才能知道“调用”一个宏时使用了多少个参数(即 {} 对)?(我最喜欢的错误是,我扩展了一个宏,即它需要一个参数,然后我用它来编译为一个参数较少的宏准备的文本。我收到各种错误,具体取决于文本中宏调用的环境。)

换句话说:我能否在宏中找出它是否使用正确数量的 {} 参数进行调用?

答案1

根据您如何定义“宏参数的数量”,答案可能会或可能不会从 tex 获得,您可能需要依赖包文档。

如果你

\newcommand\fooa[2]{abc}

\show\fooa

你看

> \fooa=\long macro:
#1#2->abc.

因此,你可以将其视为接受两个参数#1#2->的命令的一个定义{}

但如果你这样做

\newcommand\foob[2][]{abc}

\show\foob

然后您可以将其记录为一个可选[]参数和一个{}参数,但\show显示原始定义:

> \foob=macro:
->\@protected@testopt \foob \\foob {}.

\foob从技术上来说根本不需要任何参数。

同样地,之后

\newcommand\fooc{\fooa}

Then\fooc在几乎所有情况下都像\fooaand 一样运行,就好像它接受两个参数,但是

\show\fooc

节目

> \fooc=\long macro:
->\fooa .

确认它作为原始控制序列定义根本没有任何参数。

相关内容