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
Plain 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
水平モードで開始しないため、および\frame
を\makebox
実行すると、得られる結果は正常になります。
\leavevmode
の前に追加します\hbox_overlap_right:n
。