想知道标记列表是否可用于管理属性列表集合,并从中创建序列,或者是否seq
需要使用属性列表集合。也就是说,似乎 seq 的功能封装在标记列表中,但目前我还不能确定。
例如,和seq
都有tl
和seq_put_left
,tl_put_left
以及其他类似的方法。
不确定从阅读文档如果您实际上可以将属性列表作为项目存储在标记列表中。查看有关如何从头开始从标记列表构建 seq 或 prop 列表的伪代码将很有帮助,以便更好地处理实现。
答案1
您提到了三种数据类型:
- 代币列表;
- 序列;
- 财产清单。
请注意,“标记列表”也用于更广义的用途,即传递给 TeX 进行后续处理的任何东西。因此,在指代狭义时,最好说“标记列表变量”。
类型 (标记列表) 的变量tl
保存单个对象,但可以以各种方式处理该对象(通过拆分或在任一端扩充它)。
类型 (序列) 的变量seq
是一组线性排序的项目(广义上每个项目都是一个标记列表),可以在任一端进行扩充,但每个项目都构成一个单元并由整数索引。
类型 (属性列表) 的变量prop
是按键索引的无序项目集。
选择哪种变量类型取决于应用程序。 类型的变量tl
比其他两种类型的变量要严格得多。 例如,如果你这样做
\seq_put_right:Nn \l_tmpa_seq {abc}
\seq_put_right:Nn \l_tmpa_seq {def}
这两个项目abc
将def
被分开存储;
\tl_put_right:Nn \l_tmpa_tl {abc}
\tl_put_right:Nn \l_tmpa_tl {def}
您无法再从变量中检索abc
或作为一个单位。def
将 a 转换seq
为 atl
很容易:
\tl_set:Nx \l_tmpa_tl { \seq_use:Nn \l_tmpa_seq { } }