在latex3中遇到这样一个函数(具体在 interface3.pdf文档第19页4.3.3节看见):
\cs_generate_from_arg_count:NNnn <需要定义的函数名><具有Npn标记形式的定义性函数>{<参数个数>}{<函数具体定义>}
表示用定义类函数(如:cs_new:Npn)定义一个具有指定参数个数的新函数。
原文截取图如下:
请问这个命令存在的意义是什么,相对于直接用cs_new(set/gset):Npn这类函数去定义一个新函数是不是显得多此一举?(毕竟存在即合理,我想应当有它存在的理由)
在 LaTeX2e 中有 \newcommand{\...}[num]{...}
,这种用法,\cs_generate_from_arg_count:NNnn
是对它的一个扩展。
这个函数是有用的,例如,\cs_set:Nn
可以这样定义:
先得到要定义的函数的 signature(比如:\cs_set:Npn
中的 Npn
),然后计算 signature 中的字符数,再由 \cs_generate_from_arg_count:NNnn
生成。
另一个例子是 \NewDocumentCommand
的定义。例如 \NewDocumentCommand \cs { mm } {...}
,可以看出 \cs
接受 2 个参数,直接使用 \cs_generate_from_arg_count:NNnn \cs \cs_new_protected_nopar:Npn { 2 } {...}
定义即可(当然,实际上更加复杂)。
感谢前辈答疑解惑,幸好有你们!