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

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

Me topé con un comportamiento inesperado del expl3comando , según tengo entendido \hbox_overlap_right:n. Esperaba que todos los ejemplos siguientes produjeran el mismo resultado, es decir, el cuadro del marco en la misma posición que el cuadro amarillo. Pero sólo el \makeboxejemplo produce el resultado esperado. Los expl3ejemplos incluso insertan un salto de línea entre los cuadros amarillos y el marco. ¿Qué está pasando mal?

\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}

ingrese la descripción de la imagen aquí

Respuesta1

La función \hbox_overlap_right:nes la misma que Plain TeX \rlap(aparte de ser \protected), mientras que \hbox_to_zero:nes la misma que \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 }

Dado que la primitiva \hboxno inicia el modo horizontal, mientras que \framey \makeboxsí lo hacen, el resultado que obtienes es normal.

Añadir \leavevmodeantes \hbox_overlap_right:n.

información relacionada