在我看来,l3 字符串是特殊的标记列表,其中所有字符的类别代码均为 12(空格除外),并且和中的大多数接口l3tl
都l3str
类似。那么,如果我只想处理“纯”文本,它们到底有什么区别?
例如,我应该使用标记列表还是字符串作为选项名称、交叉引用标签?最佳做法是什么?
答案1
l3 字符串适用于低级 tex 编程构造,而不适用于自然语言文本,特别注意,在 pdftex 中不能在字符串中包含重音字符(或任何非 ascii 字符),因为它们需要活动字符和inputenc
处理。
答案2
这接口文档本身对此并不完全清楚。
第七部分包装l3str
:琴弦,第 49 页
TeX 将每个字符与类别代码关联起来:因此,没有许多其他编程语言中普遍理解的“字符串”概念。但是,有些地方我们希望在某种意义上“忽略”类别代码的同时操纵标记列表:这是通过将标记列表视为 TeX 意义上的字符串来实现的。
TeX 字符串(因此称为
expl3
字符串)是一系列字符,这些字符的类别代码为 12(“其他”),但空格字符除外,空格字符的类别代码为 10(“空格”)。因此,从技术层面上讲,TeX 字符串是具有相应类别代码的标记列表。在本文档中,这些简称为字符串。字符串变量只是专门的标记列表,但按照惯例应以后缀命名
...str
。此类变量应包含类别代码为 12(其他)的字符,但空格除外,其类别代码为 10(空格)。此模块中接受标记列表参数的所有函数首先将其转换为字符串以供\tl_to_str:n
内部处理,并且不会对标记列表或相应的字符串表示形式进行不同的处理。由于字符串是更通用的标记列表的子集,因此有时不清楚何时应该使用一个而不是另一个。对于不主要用于排版且适合进行一定程度的不必要扩展保护的数据,请使用字符串变量。此数据类型简化了变量的比较,因为不必担心其内容的扩展。