自己記述サンプル
% 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と同じです。