“\@tempboxa” 有何特别之处?

“\@tempboxa” 有何特别之处?

储存箱子时,为什么要这么多人使用\@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

相关内容