如何复制盒子的内容而不复制盒子本身?

如何复制盒子的内容而不复制盒子本身?

自描述样本

% 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相同。

相关内容