Почему \hspace*{\fill} требует \null для желаемого вывода?

Почему \hspace*{\fill} требует \null для желаемого вывода?

Я пытался разместить некоторые математические вычисления в перечислимом списке, без пропуска строк.

В конце концов я нашелэто обсуждениеvs \hfill, \hspace*{\fill}что, по-видимому, предполагает, что использование \hspace*{\hfill}позволит избежать поглощения пространства на правой стороне; однако, когда я реализую это, я не получаю никакой разницы в рендеринге между этими двумя вариантами.

Примечание: Я решил конкретную проблему, включив \null, но хотел бы узнать, какое недопонимание заставляет меня ожидать иного результата,

то естьпочему \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

В латексе более привычно использовать \centeringили в centerсреде для центрирования вещей, однако причина, по которой вам это нужно, \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, за которым следуеткосмос(обратите внимание на пробел перед символом процента), но direct \hfillэтого не делает.

  • \hspace*есть ли защита в начале линии, нет в конце.

  • TeX (не LaTeX!) удаляет последний клей, когда \parследует.

  • \itemМакрос LaTeX делает это \unskip\unskip\par, когда он обрабатывается в горизонтальном режиме.

  • Макрос LaTeX \hspace*{\fill}помещает \vrule width0pt \hfill \hskip0ptв горизонтальный метарилал.

Следующий \hspace*{\fill} %за ним \itemудаляет нежелательный пробел перед символом процента с помощью fist \unskip, затем удаляет \hskip0ptс помощью second \unskipи, наконец, \parудаляет \hfill. Вот почему ваш \hspace*{\fill} %исчезает, когда за ним следует \item.

Связанный контент