15 LaTeX3中对 \cs_generate_from_arg_count:NNnn函数的疑惑

发布于 2022-12-19 14:58:19

在latex3中遇到这样一个函数(具体在 interface3.pdf文档第19页4.3.3节看见):

\cs_generate_from_arg_count:NNnn <需要定义的函数名><具有Npn标记形式的定义性函数>{<参数个数>}{<函数具体定义>}

表示用定义类函数(如:cs_new:Npn)定义一个具有指定参数个数的新函数。

原文截取图如下:
1.png

请问这个命令存在的意义是什么,相对于直接用cs_new(set/gset):Npn这类函数去定义一个新函数是不是显得多此一举?(毕竟存在即合理,我想应当有它存在的理由)

查看更多

关注者
0
被浏览
1.1k
雾月
雾月 2022-12-19
这家伙很懒,什么也没写!

在 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 } {...} 定义即可(当然,实际上更加复杂)。

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览