目的の出力を得るために \hspace*{\fill} に \null が必要なのはなぜですか?

目的の出力を得るために \hspace*{\fill} に \null が必要なのはなぜですか?

行をスキップせずに、列挙リスト内でいくつかの数式を中央に配置しようとしていました。

私は最終的にこの議論\hfillvsでは\hspace*{\fill}、 を使用すると RHS のスペースが消費されるのを回避できると思われます\hspace*{\hfill}が、実際に実装してみると、2 つのレンダリングに違いは見られません。

注: を含めることで特定の問題を解決しました\nullが、どのような誤解によって異なる出力が期待されるのかを知りたいです。

つまりなぜ右側のスペースを無駄にしないことが\hspace*{\hfill}まだ必要なのでしょうか?\null

MWE:

\documentclass{article}
\usepackage{enumitem}
\begin{document}
\begin{enumerate}
    \item \hspace*{\fill} %
            % Some math content
            $y(x) = a_o + a_1 (x-k) + a_2(x-k)^2 + a_3(x-k)^3 + a_4(x-k)^4$ 
            %
            \hspace*{\fill}
    %
    \item \hspace*{\fill} %
            % Some math content
            $y(x) = a_o + a_1 (x-k) + a_2(x-k)^2 + a_3(x-k)^3 + a_4(x-k)^4$
            %
            \hspace*{\fill}\null
\end{enumerate}
\end{document}

\null最初の行 ( なし) と 2 行目 ( あり\null)の違いに注意してください。

ここに画像の説明を入力してください

答え1

LaTeX では、中央揃えに\centeringまたはcenter環境を使用するのが一般的ですが、 が必要な理由は、水平モードで使用すると、前の段落の末尾の水平方向のスペースが削除される\nullためです 。\item

これら2行を削除すると、%同じ方法で設定されます

ここに画像の説明を入力してください

\documentclass{article}
\usepackage{enumitem}
\begin{document}
\begin{enumerate}
    \item \hspace*{\fill} %
            % Some math content
            $y(x) = a_o + a_1 (x-k) + a_2(x-k)^2 + a_3(x-k)^3 + a_4(x-k)^4$ 
            %
            \hspace*{\fill}
    % > If you remove this % (or add a line above it) both will render the same.
    \item \hspace*{\fill} %
            % Some math content
            $y(x) = a_o + a_1 (x-k) + a_2(x-k)^2 + a_3(x-k)^3 + a_4(x-k)^4$
            %
            \hspace*{\fill}\null
\end{enumerate}
\end{document}

また、この使用法では、\hspace*{\fill} %中央揃えが崩れ、フィルグルーと1単語分のスペースが追加されるため、おそらく意図したとおりに中央揃えが崩れることに注意してください。\hspace*{\fill}%

答え2

初めに:

  • \hspace*{\fill} %生成\hfillし、続いて空間(パーセント文字の前のスペースに注意してください) ただし、direct では\hfillこれが実行されません。

  • \hspace*行の先頭では保護を行いますが、行の末尾では保護を行いません。

  • \parTeX (LaTeX ではありません!) は、 に従うと最後の接着剤を削除します。

  • LaTeX の\itemマクロは、\unskip\unskip\par水平モードで処理されるときに実行されます。

  • LaTeX の\hspace*{\fill}マクロは\vrule width0pt \hfill \hskip0pt水平方向のメタラルに配置されます。

の後にが\hspace*{\fill} %続くと、\itemまず を使用してパーセント文字の前の不要なスペースが削除され\unskip\hskip0pt次に が削除され\unskip、最後に が\par削除されます。の後に が続くと が消えるのは、\hfillこのためです。\hspace*{\fill} %\item

関連情報