如何才能知道“调用”一个宏时使用了多少个参数(即 {} 对)?(我最喜欢的错误是,我扩展了一个宏,即它需要一个参数,然后我用它来编译为一个参数较少的宏准备的文本。我收到各种错误,具体取决于文本中宏调用的环境。)
换句话说:我能否在宏中找出它是否使用正确数量的 {} 参数进行调用?
答案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
在几乎所有情况下都像\fooa
and 一样运行,就好像它接受两个参数,但是
\show\fooc
节目
> \fooc=\long macro:
->\fooa .
确认它作为原始控制序列定义根本没有任何参数。