Por que \hspace*{\fill} precisa de \null para a saída desejada?

Por que \hspace*{\fill} precisa de \null para a saída desejada?

Eu estava tentando centralizar um pouco de matemática em uma lista enumerada, sem salto de linha.

Eu finalmente encontreiesta discussãode \hfillvs \hspace*{\fill}que parece sugerir que o uso \hspace*{\hfill}evitará que o espaço no RHS seja engolido; no entanto, quando o implemento, não recebo nenhuma diferença na renderização entre os dois.

NB: Resolvi o problema específico incluindo um \null, mas gostaria de saber que mal-entendido está me levando a esperar resultados diferentes,

ou seja\hspace*{\hfill}por que ainda é necessário \nullnão devorar o espaço do lado direito?

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}

Observe a diferença entre a primeira linha (sem \null) e a segunda linha (com \null):

insira a descrição da imagem aqui

Responder1

É mais normal usar látex \centeringou centerambiente para centralizar as coisas, porém o motivo pelo qual você precisa \nullé \itemse usado no modo horizontal remove o espaço horizontal no final do parágrafo anterior.

Se você remover %essas duas linhas serão definidas da mesma maneira

insira a descrição da imagem aqui

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

Observe também que o uso \hspace*{\fill} %também quebra a centralização, pois adiciona cola de preenchimento mais um espaço de palavra, você provavelmente pretendia\hspace*{\fill}%

Responder2

Em primeiro lugar:

  • \hspace*{\fill} %gera \hfillseguido porespaço(observe o espaço antes do caractere de porcentagem), mas direto \hfillnão faz isso.

  • \hspace*faz proteção no início da linha, não no final.

  • TeX (sem LaTeX!) remove a última cola quando \paré seguido.

  • A macro do LaTeX \itemfunciona \unskip\unskip\parquando é processada no modo horizontal.

  • \hspace*{\fill}A macro do LaTeX é colocada \vrule width0pt \hfill \hskip0ptem metarilal horizontal.

O \hspace*{\fill} %seguido por \itemremove o espaço indesejado antes do caractere percentual usando punho \unskip, depois remove \hskip0ptusando segundo \unskipe finalmente \parremove \hfill. Esta é a razão pela qual your \hspace*{\fill} %desaparece quando é seguido por \item.

informação relacionada