储存箱子时,为什么要这么多人使用\@tempboxa
?为什么不使用\@foobar
或\@MyGreatTemporaryBox
或简单地\@temporaryBox0
使用?这有什么特别之处吗\@tempboxa
?Knuth 说得很简单\setbox0=\hbox{…junk…}
(The TexBook,Ch. 11,1996)。为什么不像 Knuth 那样使用 box0 或任何其他 box<number>?毕竟,这样更短。
答案1
请记住,在没有 etex 扩展的经典 TeX 中,只有 256 个盒子寄存器\@foobar
,因此简单地使用\@MyGreatTemporaryBox
会用掉 256 个中的两个,如果多个包这样做,您很快就会用完。预定义\@tempboxa
会提供一个可以重复使用的临时盒子寄存器,并且是此类寄存器的通用命名方案的一部分:
\newdimen\@tempdima
\newdimen\@tempdimb
\newdimen\@tempdimc
\newbox\@tempboxa
\newskip\@tempskipa
\newskip\@tempskipb
\newtoks\@temptokena
你也可以(并且 latex 确实如此)使用小于 10 的编号框寄存器,\box0
但访问速度\box0
比访问慢\box\@tempboxa
(因为你必须扫描整数),请参阅类似的注意事项\z@
对于其他寄存器类型,更重要的是速度,\toks0
如果在宏定义中使用,则占用两个令牌内存,但\@temptokena
只有一个令牌。 1985 年,令牌内存是一种稀缺资源。 (对于盒子寄存器来说情况较少,因为它们在任何情况下都需要使用\box
或\copy
前缀,\box0
并且\box\@tempboxa
)