\hbox_overlap_right:n{} 대 \makebox[0pt][l]{}

\hbox_overlap_right:n{} 대 \makebox[0pt][l]{}

expl3내가 이해한 바로는 명령 의 예상치 못한 동작에 대해 우연히 발견했습니다 \hbox_overlap_right:n. 나는 아래의 모든 예가 동일한 결과, 즉 프레임 상자가 노란색 상자와 같은 위치에 있을 것으로 기대했습니다. 그러나 \makebox예제에서만 예상한 결과가 생성됩니다. 예제 expl3에서는 노란색과 프레임 상자 사이에 줄바꿈을 삽입하기도 합니다. 무슨 일이 일어나고 있나요?

\documentclass{article}
\usepackage{color}
\usepackage{expl3}

\begin{document}
\ExplSyntaxOn
%doesn't work
\hbox_overlap_right:n{\color{yellow}\rule{1in}{0.5in}}\frame{\phantom{\rule{1in}{0.5in}}}
\par
%doesn't work either
\hbox_to_zero:n{\color{yellow}\rule{1in}{0.5in}\hss}\frame{\phantom{\rule{1in}{0.5in}}}
\par
%LaTeX2e working as expected
\makebox[0pt][l]{\color{yellow}\rule{1in}{0.5in}}\frame{\phantom{\rule{1in}{0.5in}}}
\ExplSyntaxOff
\end{document}

여기에 이미지 설명을 입력하세요

답변1

이 기능은 \hbox_overlap_right:n일반 TeX와 동일합니다 \rlap( 는 제외 \protected). 반면에 다음 \hbox_to_zero:n과 동일합니다 \hbox to 0pt.

> texdef -t latex -p expl3 'hbox_overlap_right:n'

\hbox_overlap_right:n:
\protected\long macro:#1->\hbox_to_zero:n {#1\tex_hss:D }

> texdef -t latex -p expl3 'hbox_to_zero:n'

\hbox_to_zero:n:
\protected\long macro:#1->\tex_hbox:D to\c_zero_dim {#1}

> texdef -t latex frame

\frame:
\long macro:#1->\leavevmode \hbox {\hskip -\@wholewidth \vbox {\vskip -\@wholewidth \hrule \@height \@wholewidth \hbox {\vrule \@width \@wholewidth #1\vrule \@width \@wholewidth }\hrule \@height \@wholewidth \vskip -\@wholewidth }\hskip -\@wholewidth }

프리미티브는 \hbox수평 모드를 시작하지 않으므로 while \frame\makeboxdo를 사용하면 얻을 수 있는 결과는 정상입니다.

\leavevmode전에 추가하세요 \hbox_overlap_right:n.

관련 정보