Ich bin über ein, meines Wissens nach, unerwartetes Verhalten des expl3
Befehls 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 \makebox
Beispiel liefert das erwartete Ergebnis. Die expl3
Beispiele 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}
Antwort1
Die Funktion \hbox_overlap_right:n
ist genau die gleiche wie bei Plain TeX \rlap
(abgesehen von \protected
), während \hbox_to_zero:n
ist 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 \hbox
den Horizontalmodus nicht startet, während \frame
und \makebox
dies tun, ist das Ergebnis normal.
Füge \leavevmode
vorher hinzu \hbox_overlap_right:n
.