Selbstbeschreibendes Beispiel
% 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
Ausgänge
\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
aber ich brauche nur abc
die Kopie, nicht das Kästchen mit der abc
.
Antwort1
Kurze Antwort: Um eine Box zu kopieren, verwenden Sie \copy
. Wenn Sie das umschließende nicht möchten \hbox
, schreiben Sie es einfach nicht. Das heißt, statt
\setbox\thhbx=\hbox{\copy\thbx}
schreiben
\setbox\thhbx=\copy\thbx
damit die Box \thhbx
mit übereinstimmt \thbx
. Allgemeiner ausgedrückt können Sie verwenden, \unhcopy
um nur den Inhalt einer Box zu kopieren, obwohl dies hier nicht erforderlich ist: Wenn Sie es verwenden würden, müssten Sie die Ergebnisse erneut in eine Box einschließen, etwa:
\setbox\thhbx=\hbox{\unhcopy\thbx}
was in diesem Fall im Vergleich zu einfach unnötig ist \copy\thbx
.
Hier ist ein Beispiel, das hoffentlich alles klar macht:
\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
Der Rest dieser Antwort ist lediglich eine Ausarbeitung des obigen Beispiels.
Angenommen, Sie schreiben
\setbox0=\hbox{ab}
Dann lautet die Box 0 wie folgt:
\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b
Wenn Sie es also in größeren Boxen verwenden, entweder destruktiv mit \box
oder nicht destruktiv mit \copy
, erhalten Sie die Box. Wenn Sie beispielsweise schreiben
\setbox1=\hbox{xy\copy0 rs}
du erhältst:
\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
wo sich ein Kästchen anstelle von befindet \copy0
. Ähnlich verhält es sich, wenn Sie schreiben
\setbox2=\hbox{\copy0}
Sie erhalten Box 2
\hbox(6.94444+0.0)x10.55559
.\hbox(6.94444+0.0)x10.55559
..\tenrm a
..\tenrm b
ähnlich der Situation in der Frage.
Wenn Sie beim Kopieren in eine andere Box keinezusätzlichäußeres umschließendes \hbox
, dann schreiben Sie es einfach nicht! Wenn Sie also schreiben
\setbox3=\copy0
Sie erhalten Box 3
\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b
das gleiche wie die Originalbox 0.
In Fällen, in denen dies nicht verwendet werden kann, können Sie nur den „Inhalt“ kopieren (und dabei die andere Box entfernen), entweder mit \unhbox
(destruktiv) oder \unhcopy
(nicht destruktiv). (Das Gleiche gilt \unvbox
für \unvcopy
vertikale Boxen.) Also zum Beispiel:
\setbox4=\hbox{xy\unhcopy0 rs}
gibt
\hbox(6.94444+1.94444)x28.9723
.\tenrm x
.\tenrm y
.\tenrm a
.\tenrm b
.\tenrm r
.\tenrm s
Und
\setbox5=\hbox{\unhcopy0}
gibt
\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b
wieder das gleiche wie die Originalbox 0.