使用控制序列名称来高效存储大量字符

使用控制序列名称来高效存储大量字符

当阅读关于TeX 中的低级数组我偶然发现了一条笔记 Bruno Le Floch 的回答

与作为标记列表相比,将长字符串存储为 csname 更有效。这在 中的某个时候被使用l3fp,将 的 10000 个小数存储1/(2pi)为,以便在需要时\159154943091895...传递给。\string

我在文件中找不到该定义l3fp,我很好奇它是如何工作的。问题似乎归结为“如何在不知道全名的情况下引用控制序列名称?”例如,如果您分配一个较短的名称\expandafter\let\expandafter\short\csname very long name\endcsname,则无法使用\shortlater 引用原始名称,因为只将含义分配给了\short。另一方面,涉及\def或类似的构造几乎违背了目的,因为您需要再次将字符存储为标记。

这里使用的 (纯 TeX/e-TeX) 模式是什么,使得这种高效的字符串存储工作能够进行?

答案1

\edef\zzz{\expandafter\noexpand\csname 1234567890\endcsname} 

10 位数字存储为单个 csname,因为其定义等同于(如果您设置了 catcodes)

\def\zzz{\1234567890}

\meaning\zzz可以通过或\expandafter\string\zzz并剥离相应的前缀来检索号码。

相关内容