自描述样本
% pdfTeX
\newbox\thbx
\newbox\thhbx
\setbox\thbx\hbox{abc}
% HOW TO COPY THE CONTENTS OF THE BOX
% WITHOUT ACTUALLY COPYING THE BOX
% ITSELF ALONG WITH THOSE CONTENTS?
\setbox\thhbx\hbox{\copy\thbx}
% I NEED \hbox{abc} NOT \hbox{\hbox{abc}}
\showbox\thhbx
\bye
输出
\thbx=\box16
\thhbx=\box17
> \box17=
\hbox(6.94444+0.0)x15.27782
.\hbox(6.94444+0.0)x15.27782
..\tenrm a
..\tenrm b
..\kern0.27779
..\tenrm c
但我只需要abc
复制,而不是带有的框abc
。
答案1
简短回答:要复制一个框,请使用\copy
。如果您不想要封闭的\hbox
,就不要写它。也就是说,而不是
\setbox\thhbx=\hbox{\copy\thbx}
写
\setbox\thhbx=\copy\thbx
使框\thhbx
与 相同\thbx
。更一般地,您可以使用\unhcopy
仅复制框的内容,尽管这里没有必要:如果您使用它,您必须将结果再次括在框中,例如:
\setbox\thhbx=\hbox{\unhcopy\thbx}
在这种情况下,与相比,这根本是不必要的\copy\thbx
。
这是一个希望能使一切清楚的例子:
\setbox0=\hbox{ab} % The original box
\setbox1=\hbox{xy\copy0 rs}
\setbox2=\hbox{\copy0}
\setbox3=\copy0 % Now box 3 is identical to box 0
\setbox4=\hbox{xy\unhcopy0 rs}
\setbox5=\hbox{\unhcopy0} % Now box 5 is identical to box 0
这个答案的其余部分只是对上述例子的详细说明。
假设你写
\setbox0=\hbox{ab}
那么框 0 如下:
\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b
因此,当您在更大的框中使用它时,无论是使用破坏性\box
还是使用非破坏性\copy
,您都会得到框。例如,如果您写
\setbox1=\hbox{xy\copy0 rs}
你得到:
\hbox(6.94444+1.94444)x28.9723
.\tenrm x
.\tenrm y
.\hbox(6.94444+0.0)x10.55559
..\tenrm a
..\tenrm b
.\tenrm r
.\tenrm s
其中 的位置有一个方框\copy0
。同样,如果你写
\setbox2=\hbox{\copy0}
你将得到框 2
\hbox(6.94444+0.0)x10.55559
.\hbox(6.94444+0.0)x10.55559
..\tenrm a
..\tenrm b
和问题的情况类似。
当复制到另一个邮箱时,如果你不想额外的外壳\hbox
,那就别写了!所以如果你写
\setbox3=\copy0
你将得到框 3
\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b
和原盒0一样。
\unhbox
在无法使用此功能的情况下,您可以使用(破坏性)或(非破坏性)仅复制“内容”(剥离另一个框)\unhcopy
。 (对于垂直框\unvbox
也类似\unvcopy
。)例如:
\setbox4=\hbox{xy\unhcopy0 rs}
给出
\hbox(6.94444+1.94444)x28.9723
.\tenrm x
.\tenrm y
.\tenrm a
.\tenrm b
.\tenrm r
.\tenrm s
和
\setbox5=\hbox{\unhcopy0}
给出
\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b
再次与原始盒子0相同。