当阅读关于TeX 中的低级数组我偶然发现了一条笔记 Bruno Le Floch 的回答:
与作为标记列表相比,将长字符串存储为 csname 更有效。这在 中的某个时候被使用
l3fp
,将 的 10000 个小数存储1/(2pi)
为,以便在需要时\159154943091895...
传递给。\string
我在文件中找不到该定义l3fp
,我很好奇它是如何工作的。问题似乎归结为“如何在不知道全名的情况下引用控制序列名称?”例如,如果您分配一个较短的名称\expandafter\let\expandafter\short\csname very long name\endcsname
,则无法使用\short
later 引用原始名称,因为只将含义分配给了\short
。另一方面,涉及\def
或类似的构造几乎违背了目的,因为您需要再次将字符存储为标记。
这里使用的 (纯 TeX/e-TeX) 模式是什么,使得这种高效的字符串存储工作能够进行?
答案1
后
\edef\zzz{\expandafter\noexpand\csname 1234567890\endcsname}
10 位数字存储为单个 csname,因为其定义等同于(如果您设置了 catcodes)
\def\zzz{\1234567890}
\meaning\zzz
可以通过或\expandafter\string\zzz
并剥离相应的前缀来检索号码。