為什麼 \hspace*{\fill} 需要 \null 才能得到所需的輸出?

為什麼 \hspace*{\fill} 需要 \null 才能得到所需的輸出?

我試著將一些數學集中在一個枚舉列表中,而不需要換行。

我最終發現這次討論\hfillvs\hspace*{\fill}這似乎表明使用\hspace*{\hfill}將避免 RHS 上的空間被吞噬;但是,當我實現它時,兩者之間的渲染沒有任何差異。

注意:我透過包含 a 解決了具體問題\null,但想知道是什麼誤解導致我期望不同的輸出,

IE為什麼\hspace*{\hfill}仍然要求\null不吞噬右側空間?

微量元素:

\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請注意第一行(不含)和第二行(帶\null)之間的差異:

在此輸入影像描述

答案1

在乳膠中使用\centeringcenter將事物居中的環境中更常見,但是您需要的原因\null\item如果在水平模式下使用會刪除上一段末尾的水平空間。

如果刪除%這兩行,則以相同的方式設定

在此輸入影像描述

\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} %也會破壞居中,因為它添加了填充膠水和一個單字空間,您可能想要\hspace*{\fill}%

答案2

首先:

  • \hspace*{\fill} %生成\hfill後跟空間(注意百分號字元之前的空格)但直接則\hfill不然。

  • \hspace*在線路的開頭進行保護,在線路的末端不進行保護。

  • TeX(不是 LaTeX!)會在執行以下操作時去除最後的膠水\par

  • LaTeX 的\item巨集\unskip\unskip\par在以水平模式處理時會這樣做。

  • LaTeX 的\hspace*{\fill}宏放入\vrule width0pt \hfill \hskip0pt水平金屬。

接下來使用「fist \hspace*{\fill} %\item刪除百分比字元之前不需要的空格\unskip,然後\hskip0pt使用「second」刪除\unskip,最後\par「remove」\hfill。這就是為什麼 your\hspace*{\fill} %後面跟有 時消失的原因\item

相關內容