如何在不複製盒子本身的情況下複製盒子的內容?

如何在不複製盒子本身的情況下複製盒子的內容?

自描述樣本

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

相關內容