我不太明白 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 中添加/删除括号或空格?
我目前对该文档的理解(可能是错误的或非常错误的):
空格会被忽略,但不会完全忽略,至少
\my_func
与 不同\my func
。我不知道空格到底在哪里被忽略。括号可用于创建平衡文本,也可用于分组。但已经有
\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半单群)。
最好使用它们进行分组,但在某些情况下{}
也可以使用。