Wie kopiere ich den Inhalt einer Box, ohne die Box selbst zu kopieren?

Wie kopiere ich den Inhalt einer Box, ohne die Box selbst zu kopieren?

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 abcdie 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 \thhbxmit übereinstimmt \thbx. Allgemeiner ausgedrückt können Sie verwenden, \unhcopyum 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 \boxoder 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 \unvboxfür \unvcopyvertikale 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.

verwandte Informationen