Me topé con un comportamiento inesperado del expl3
comando , 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 \makebox
ejemplo produce el resultado esperado. Los expl3
ejemplos 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}
Respuesta1
La función \hbox_overlap_right:n
es la misma que Plain TeX \rlap
(aparte de ser \protected
), mientras que \hbox_to_zero:n
es 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 \hbox
no inicia el modo horizontal, mientras que \frame
y \makebox
sí lo hacen, el resultado que obtienes es normal.
Añadir \leavevmode
antes \hbox_overlap_right:n
.