将内容存储在盒子寄存器中成本有多高?

将内容存储在盒子寄存器中成本有多高?

我想知道,将一些内容存储在一个框中,然后仅使用一次(或两次),在编译速度和其他方面(如内存等)的成本有多高。如果在文档中经常使用,这种差异是否毫无意义或意义重大?

我说的是

{\sbox\mybox{<some content>}% or \setbox\mybox\hbox{..}
 <calculated something depended on the box dimension>
 \box\mybox
 % or:
 % \usebox\mybox
}

\box另外:使用和(需要复制框)之间有多大区别\usebox?在某些情况下,我不能确定不再需要该框,并且\box一般不能使用。

我正在编写几个类似于的宏\raisebox,它们将其内容存储到一个框中,并允许用户使用宏和其他宏访问尺寸\height\width在正常使用过程中,这些宏可能经常级联,并且每个宏只会重新保存内部宏的已保存框(\sbox\mybox{\sbox\mybox{..} .. \usebox\mybox} .. \usebox\mybox)。所以我想知道我是否应该以某种方式编写这些宏,以便它们可以在这种情况下重用内部宏的框寄存器,或者这是否会有点过头?

答案1

也就是说,\copy\x\box\x成本相同,前者对于内存来说效率较低,因为它不会释放寄存器,而当组结束时寄存器无论如何都会被清除。

必须注意盒子寄存器的一个特性:\setbox0=\hbox{x}{\box0}导致盒子寄存器 0 为空,因为\box会清除寄存器最新实例的内容,在这种情况下恰好位于上层。

正如马丁所说,

\begingroup
\setbox0=\copy0
<code>
\endgroup

创建一个本地副本\box0,在组内人们可以做很多事情而\box0不必担心上层的盒子寄存器。

如果我编译一个由 10000 个仅使用 \hbox 构建的盒子副本组成的文件,我会得到

real 0m0.524s
user 0m0.458s
sys 0m0.054s

如果我改说\setbox0=\hbox{...}\box0,我会得到

real 0m0.529s
user 0m0.460s
sys 0m0.054s

没什么大差别。

相关内容