Amostra autodescritiva
% 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
saídas
\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
mas preciso apenas abc
copiar, não a caixa com o arquivo abc
.
Responder1
Resposta curta: Para copiar uma caixa, use \copy
. Se você não quiser o anexo \hbox
, simplesmente não escreva. Ou seja, em vez de
\setbox\thhbx=\hbox{\copy\thbx}
escrever
\setbox\thhbx=\copy\thbx
para fazer com que a caixa \thhbx
seja igual a \thbx
. De maneira mais geral, você pode \unhcopy
copiar apenas o conteúdo de uma caixa, embora não seja necessário aqui: se você usasse, teria que colocar os resultados novamente em uma caixa, como:
\setbox\thhbx=\hbox{\unhcopy\thbx}
o que neste caso é simplesmente desnecessário em comparação com \copy\thbx
.
Aqui está um exemplo que, esperamos, deixará tudo claro:
\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
O restante desta resposta é apenas uma elaboração do exemplo acima.
Suponha que você escreva
\setbox0=\hbox{ab}
Então a caixa 0 é a seguinte:
\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b
Então, quando você usá-lo em caixas maiores, seja de forma destrutiva \box
ou não destrutiva \copy
, você obterá a caixa. Por exemplo, se você escrever
\setbox1=\hbox{xy\copy0 rs}
você obtém:
\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
onde há uma caixa no lugar de \copy0
. Da mesma forma, se você escrever
\setbox2=\hbox{\copy0}
você obterá a caixa 2 para ser
\hbox(6.94444+0.0)x10.55559
.\hbox(6.94444+0.0)x10.55559
..\tenrm a
..\tenrm b
semelhante à situação da pergunta.
Ao copiar para outra caixa, se você não quiseradicionalanexo externo \hbox
, então simplesmente não escreva! Então, se você escrever
\setbox3=\copy0
você receberá a caixa 3 para ser
\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b
o mesmo que a caixa original 0.
Nos casos em que isso não pode ser usado, você pode copiar apenas o “conteúdo” (retirando a outra caixa) com \unhbox
(destrutivamente) ou \unhcopy
(não destrutivamente). (Da mesma forma \unvbox
e \unvcopy
para caixas verticais.) Por exemplo:
\setbox4=\hbox{xy\unhcopy0 rs}
dá
\hbox(6.94444+1.94444)x28.9723
.\tenrm x
.\tenrm y
.\tenrm a
.\tenrm b
.\tenrm r
.\tenrm s
e
\setbox5=\hbox{\unhcopy0}
dá
\hbox(6.94444+0.0)x10.55559
.\tenrm a
.\tenrm b
novamente o mesmo que a caixa original 0.