LaTeX3:括号和空格

LaTeX3:括号和空格

我不太明白 LaTeX3 中如何处理括号和空格。

例如:文档对N参数使用以下约定:

\my_func:N \my_tl

对于n参数:

\my_func:n { \my_tl \my_tl }

我想知道这些是否等效:

\my_func:N \my_tl % vs
\my_func:N { \my_tl }
\my_func:n { \my_tl \my_tl } % vs
\my_func:n { {\my_tl} {\my_tl} }

还有一个常见问题:我们什么时候可以在 LaTeX3 中添加/删除括号或空格?

我目前对该文档的理解(可能是错误的或非常错误的):

  1. 空格会被忽略,但不会完全忽略,至少\my_func与 不同\my func。我不知道空格到底在哪里被忽略。

  2. 括号可用于创建平衡文本,也可用于分组。但已经有\group_begin:和了\group_end:,所以我不知道括号是否仍可用于分组。

答案1

空格被忽略之间标记,因为空格字符被分配了类别代码 9(忽略)。但是任何非字母(更准确地说,任何类别代码不同于 11 的字符)都会停止扫描控制字名称。

因此\my func仍然准确地说,

\my•f•u•n•c

(项目符号分隔标记)。此外,_:被分配了类别代码 11,因此它们可以成为控制字名称的一部分。空格和下划线是不是相等的。

参数N不应加括号。对于用 定义的函数\cs_new:Npn(或类似函数,但如果用 定义则不一定\cs_new_eq:NN

\my_func:N \my_tl
\my_func:N { \my_tl }

本质上是等价的,但为了保持一致性,应该避免使用后者。

为什么?例如,\token_to_str:N { \foo }这将是灾难性的。(感谢 Joseph Wright 提出这一观点。)

与此相反的,

\my_func:n { \my_tl \my_tl }
\my_func:n { {\my_tl} {\my_tl} }

绝对不等价。前者没有群,后者有两个群。

括号的作用与以往相同:它们界定n参数,但它们会创建一个组(a简单的如果不用于界定参数,则在“TeX,程序”语言中为组。函数\group_begin:和分别\group_end:是原语\begingroup\endgroup,并且也形成一个组(a半单群)。

最好使用它们进行分组,但在某些情况下{}也可以使用。

相关内容