상자 자체를 복사하지 않고 상자 내용을 복사하는 방법은 무엇입니까?

상자 자체를 복사하지 않고 상자 내용을 복사하는 방법은 무엇입니까?

자체 설명 샘플

% 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과 동일합니다.

관련 정보