自描述樣本
% 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 相同。