如何跳过 \newsavebox?

如何跳过 \newsavebox?

我经常尝试一些东西,然后进行一些自我反省,以找出为什么事情(不)按原样运作。使用盒子并获取其宽度、高度和深度是其中不可或缺的一部分。

由于这是临时的黑客手段,我想知道我是否必须走很长的路\newsavebox{\blah}\setbox{\blah}{content}。如果我没记错的话,盒子就像寄存器一样,它们是有编号的。所以我想我可以跳过它,\newsavebox直接\savebox{16}{content}

以上猜测正确吗?

如果确实如此,那么使用一个相对安全的数字是多少?

latex 如何给出箱子编号?

0-255 或 255-0。前几天我注意到,框 0 和 255 具有一些特殊含义,最好不要管它们。

是否存在用于此类目的的预定义框,其中永远不会保存您想要稍后重复使用的内容?

答案1

LaTeX 的盒子分配系统继承自普通 TeX,因此两种情况下都适用相同的规则。与其他寄存器一样,盒子也有编号,正如您所观察到的,可以用这种方式寻址。实际上,这是原始语法,而不是 LaTeX 语法,因此

\setbox0=\hbox{content}

在低水平上是可用的,但是

\savebox{0}{content}

实在不值得鼓励!

Knuth 制定了一个方案,将一定数量的寄存器用作可通过编号访问的暂存空间。按照惯例,从 0 到 9 的偶数寄存器可用作暂存空间并在本地设置,而同一范围内的奇数寄存器则是全局暂存空间。但是,除了在非常低的级别,更常见的是使用命名暂存空间:\@tempboxa例如,在 LaTeX 中可用。

您可以直接按编号使用任何寄存器,但您可能会遇到麻烦,因为其他代码可能为同一寄存器分配了名称,并且不知道您要做什么。如果您想在不创建新框名称的情况下灵活地保存材料,我强烈建议您定义自己的“池”框。

请注意,这里高级 LaTeX 语法的全部意义在于为文档作者提供工具,通常为材料提供专门的命名空间是迄今为止最好的方法。

相关内容