使用 LaTeX 3 expl3 语法的示例函数:

使用 LaTeX 3 expl3 语法的示例函数:

我正在尝试了解 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。实际上TF本质上与 相同n,并且只应用于执行条件业务的函数。

如果你说

\cs_new:Nn \my_function:nn { <replacement text> }

您可以在替换文本中使用#1and ,#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)。

相关内容