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

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

Ich bin über ein, meines Wissens nach, unerwartetes Verhalten des expl3Befehls gestolpert \hbox_overlap_right:n. Ich hatte erwartet, dass alle Beispiele unten dasselbe Ergebnis liefern, d. h. dass sich die Rahmenbox an derselben Position befindet wie die gelbe Box. Aber nur das \makeboxBeispiel liefert das erwartete Ergebnis. Die expl3Beispiele fügen sogar einen Zeilenumbruch zwischen der gelben Box und der Rahmenbox ein. Was läuft da schief?

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

Bildbeschreibung hier eingeben

Antwort1

Die Funktion \hbox_overlap_right:nist genau die gleiche wie bei Plain TeX \rlap(abgesehen von \protected), während \hbox_to_zero:nist dasselbe wie \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 }

Da das Grundelement \hboxden Horizontalmodus nicht startet, während \frameund \makeboxdies tun, ist das Ergebnis normal.

Füge \leavevmodevorher hinzu \hbox_overlap_right:n.

verwandte Informationen