LaTeX3 标记列表的组成部分是什么?

LaTeX3 标记列表的组成部分是什么?

我正在尝试了解什么是 LaTeX3 标记列表。不幸的是,LaTeX3 文档毫无帮助。根据LaTeX3 接口文档可以通过两种方式查看令牌列表 (第 35 页):

标记列表(显式的,或存储在变量中)可以看作是“项目”列表或“标记”列表。项目可以是任何\use:n可以作为其参数的东西:单个非空格标记或括号组,带有可选的前导显式空格字符(因此每个项目本身都是一个标记列表)。标记可以是普通N参数,也可以是{}(假设是普通的 TeX 类别代码)。

什么是 LaTeX3 代币?

根据以上摘录

标记要么是普通N参数,要么是{,或}(假设是普通的 TeX 类别代码)。

  1. 什么是“正常N论点”?
  2. 考虑短语“ {,或}(假设正常的 TeX 类别代码)”。这是否与说“TeX 标记(字符代码 = 32,类别代码 = 10),(字符代码 = 123,类别代码 = 1),或(字符代码 = 125,类别代码 = 2)”相同?或者与说“任何 T​​eX 标记,其类别代码是 1、2 或 10 之一”相同?

什么是 LaTeX3 项目?

根据以上摘录

项目是 \use:n 将作为其参数抓取的任何内容:单个非空格标记或括号组,带有可选的前导显式空格字符(因此每个项目本身就是一个标记列表)。

  1. “单个非空格标记”是什么意思?“标记”一词是指 TeX 标记还是 LaTeX3 标记?“非空格”这个表达式是指不是(字符代码 = 32,类别代码 = 10)的任何 TeX 标记,还是指类别代码不是 10 的任何 TeX 标记,还是指字符代码不是 32 的任何 TeX 标记?其他空白字符(例如换行符)呢?它们算吗?

  2. 什么是“括号组”?它包括分隔括号吗?它包括括号内的空格吗?

  3. 短语“带有可选的前导显式空格字符”是否仅指括号组,还是也指单个非空格标记?这是什么意思明确的空格字符?前导显式空格字符是项目的一部分吗?非显式空格字符呢?

答案1

expl3行话来说,令牌与基本 TeX 相同,请参阅什么是代币?

但是,标记列表(在变量中或显式中)可以以双重方式看到:

  1. 一个装有 token 的容器
  2. 项目清单

例如,如果您执行\tl_use:N \l_tmpa_tl或传递一个标记列表作为V参数(对于变量)或参数n(通常用括号括起来),则操作模式为 1;当您将其传递给\tl_map_inline:Nn\tl_map_function:NN(对于变量)或\tl_map_inline:nn\tl_map_function:nN(对于显式标记列表,通常用括号括起来)时,将使用模式 2。

有什么不同?

显式空格标记是类别 10(任何字符代码)的字符标记。在expl3代码中( 之后\ExplSyntaxOn),空格字符的类别代码为 9(忽略),但~类别代码为 10,因此它算作显式空格标记。

现在假设你

\tl_set:Nn \l_tmpa_tl {~{ab}~c~\foo}

标记列表变量将由九个标记和三个项目组成。因此,调用\tl_map_inline:Nn \l_tmpa_tl {<code>}将执行三个步骤,因为根据 TeX 解析规则,显式空格标记将被忽略,这使得 TeX 在查找未定界的宏参数时忽略显式空格标记。

代币\c_space_token当然,在这种情况下,隐式空间标记\@sptoken(与传统 LaTeX相同),也不\c_space_tl),也不会,因为它是一个标记列表变量包含明确的空间标记

N关于和参数的区别n是 LaTeX3 惯例。当使用N参数类型时,程序员应该总是传递一个 token 给它,当它有一个n参数类型时,程序员应该传递一个 (平衡的) 括号组{<tokens>}。但是,完全执行这个惯例是不可能的,因为毕竟我们正在阅读 TeX 代码。

所以如果我们有这个函数\foo_bar:Nn,正确的调用应该是这样的

\foo_bar:Nn \cs {abc}

其中\cs代表控制序列(但也可以是单个字符标记)。由于 TeX 解析规则,该调用\foo_bar:Nn {\cs}{abc}将是等效的,但它违反了 LaTeX3 的良好做法。

你的问题。

  1. 正常N参数是单个标记,但显式空格标记将被忽略;如果调用\foo_bar:Nn ~ \cs {abc},则第一个参数仍然是\cs

  2. 括号组是你传递的由更多标记组成的无界参数,如 TeXbook 中所述;当参数替换宏的替换文本中的相应参数标记时,括号将被删除

  3. 令牌列表中的项目前面是(显式的)空格标记,在模式 2 中使用标记列表时将被忽略。


上面的一条评论提到

{ Hello } ~ world

\ExplSyntaxOn如果在生效时遇到这种情况,则它由 13 个令牌组成,准确地说

{1 H11 e11 l11 l11 o11 }2 ~10 w11 o11 r11 l11 d11

因为空间特点类别代码为 9,因此在标记化过程中会被忽略。该列表有六项

{Hello} w o r l d

制表符(^^I)同样会被忽略并\endlinechar设置为 -1,因此新行也是无关紧要的。

相关内容