为什么 \hspace*{\fill} 需要 \null 才能获得所需的输出?

为什么 \hspace*{\fill} 需要 \null 才能获得所需的输出?

我试图将一些数学运算集中在枚举列表内,而不跳行。

我最终发现这次讨论vs似乎表明使用将避免 RHS 上的空间被吞噬;但是,当我实现它时,我没有发现两者之间的渲染有任何差异\hfill\hspace*{\fill}\hspace*{\hfill}

注意:我通过添加解决了具体问题\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*在线的开头进行保护,在线的结尾不进行保护。

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

相关内容