我正在尝试了解 interface3 文档。
这LaTeX 接口 3 文档v. 2014 年 5 月 20 日和 2015 年 3 月 1 日参考第 3.3 节中的使用签名定义新函数。我想知道当它陈述以下内容时它是什么意思:
在代码中,参数的数量是从函数签名中自动检测的。
(可能应该这样写:“在代码中,参数的数量是自动检测的经过功能's签名。)
使用 LaTeX 3 expl3 语法的示例函数:
\cs_new:Nn <function> {<code>}
与之相反的参数在哪里:
\cs_new:Npn <function> <parameters> {<code>}
答案1
函数名称应采用以下形式
\<prefix>_<name>:<signature>
其中<prefix>
是一串字母,可能前面有__
,并且<name>
是一串字母和下划线,用于提醒函数的作用。
是<signature>
中的一串字母NnTFcofxVvwp
,应反映函数具有的参数数量。
但是,使用以下方式定义的函数
\cs_new:Nn
\cs_new_protected:Nn
\cs_new_nopar:Nn
\cs_new_protected_nopar:Nn
或\cs_set
类似物,应该只具有由 中的字符组成的签名NnTF
。实际上T
和F
本质上与 相同n
,并且只应用于执行条件业务的函数。
如果你说
\cs_new:Nn \my_function:nn { <replacement text> }
您可以在替换文本中使用#1
and ,#2
就像您说的那样
\cs_new:Npn \my_function:nn #1 #2 { <replacement text> }
因为\cs_new:Nn
检查它的第一个参数并能够确定在参数文本中提供多少个参数。
的签名\tl_set:Nx
表示Nx
它有两个参数,第一个参数是标记(要设置的变量的名称);第二个参数是普通的括号参数,在执行值赋值之前会进行完全扩展;位protected
是,因为涉及值赋值。但是你不能将它定义为
\cs_new_protected:Nn \tl_set:Nx { <replacement text> }
但是你必须做
\cs_new_protected:Nn \tl_set:Nn { <replacement text> }
\cs_generate_variant:Nn \tl_set:Nn { Nx }
请注意,您可以定义名称中没有签名的函数,但在这种情况下,“长格式”
\cs_new:Npn
\cs_new_protected:Npn
\cs_new_nopar:Npn
\cs_new_protected_nopar:Npn
应使用,并完整拼写参数文本。如果您想w
在签名中定义函数,方法也相同。
答案2
签名是冒号后面的字符:\your_special_function:Nnn
有三个参数(N,n,n)。