¿Cómo \copiar el contenido de una caja sin copiar la caja misma?

¿Cómo \copiar el contenido de una caja sin copiar la caja misma?

Muestra autodescriptiva

% 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

salidas

\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

pero sólo necesito abccopiar, no el cuadro con el archivo abc.

Respuesta1

Respuesta corta: para copiar un cuadro, utilice \copy. Si no desea el adjunto \hbox, simplemente no lo escriba. Es decir, en lugar de

\setbox\thhbx=\hbox{\copy\thbx}

escribir

\setbox\thhbx=\copy\thbx

para que la caja \thhbxsea igual que \thbx. De manera más general, puedes usar \unhcopypara copiar solo el contenido de un cuadro, aunque no es necesario aquí: si lo usaras, tendrías que encerrar los resultados nuevamente en un cuadro, como:

\setbox\thhbx=\hbox{\unhcopy\thbx}

que en este caso es simplemente innecesario en comparación con \copy\thbx.


Aquí hay un ejemplo que, con suerte, aclarará todo:

\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

El resto de esta respuesta es solo una elaboración del ejemplo anterior.


Supongamos que escribes

\setbox0=\hbox{ab}

Entonces el cuadro 0 es el siguiente:

\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b

Entonces, cuando lo uses en cajas más grandes, ya sea de forma destructiva \boxo no destructiva con \copy, obtendrás la caja. Por ejemplo, si escribes

\setbox1=\hbox{xy\copy0 rs}

usted obtiene:

\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

donde hay una caja en lugar de \copy0. De manera similar si escribes

\setbox2=\hbox{\copy0}

obtendrás la casilla 2

\hbox(6.94444+0.0)x10.55559
.\hbox(6.94444+0.0)x10.55559
..\tenrm a
..\tenrm b

similar a la situación en la pregunta.

Al copiar a otro cuadro, si no desea unadicionaladjunto exterior \hbox, ¡entonces simplemente no lo escribas! Entonces si escribes

\setbox3=\copy0

obtendrás la casilla 3

\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b

Igual que la caja original 0.

En los casos en los que esto no se pueda utilizar, puede copiar solo el “contenido” (eliminando el otro cuadro) ya sea \unhbox(de forma destructiva) o \unhcopy(no destructiva). (Del mismo modo \unvboxy \unvcopypara cajas verticales). Así, por ejemplo:

\setbox4=\hbox{xy\unhcopy0 rs}

da

\hbox(6.94444+1.94444)x28.9723
.\tenrm x
.\tenrm y
.\tenrm a
.\tenrm b
.\tenrm r
.\tenrm s

y

\setbox5=\hbox{\unhcopy0}

da

\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b

nuevamente igual que la caja 0 original.

información relacionada