¿Por qué \hspace*{\fill} necesita \null para obtener el resultado deseado?

¿Por qué \hspace*{\fill} necesita \null para obtener el resultado deseado?

Estaba tratando de centrar algunas matemáticas dentro de una lista enumerada, sin un salto de línea.

finalmente encontréesta discusiónde \hfillvs \hspace*{\fill}que parece sugerir que su uso \hspace*{\hfill}evitará que se devore espacio en el RHS; sin embargo, cuando lo implemento, no obtengo ninguna diferencia en el renderizado entre los dos.

NB: Resolví el problema específico incluyendo un \null, pero me gustaría saber qué malentendido me lleva a esperar un resultado diferente.

es decir\hspace*{\hfill}¿Por qué todavía es necesario \nullno devorar el espacio del lado derecho?

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 la diferencia entre la primera línea (sin \null) y la segunda línea (con \null):

ingrese la descripción de la imagen aquí

Respuesta1

Es más normal en látex usarlo \centeringo en el centerentorno para centrar cosas, sin embargo la razón por la que lo necesitas \nulles que \itemsi se usa en modo horizontal se elimina el espacio horizontal al final del párrafo anterior.

Si eliminas %estas dos líneas se configuran de la misma manera.

ingrese la descripción de la imagen aquí

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

Tenga en cuenta también que el uso \hspace*{\fill} %también rompe el centrado, ya que agrega pegamento de relleno más un espacio para palabras, probablemente era su intención.\hspace*{\fill}%

Respuesta2

En primer lugar:

  • \hspace*{\fill} %genera \hfillseguido deespacio(tenga en cuenta el espacio antes del carácter de porcentaje) pero directo \hfillno hace esto.

  • \hspace*hace protección al inicio de la línea, no al final.

  • TeX (¡no LaTeX!) elimina el último pegamento cuando \parse sigue.

  • \itemLa macro de LaTeX lo hace \unskip\unskip\parcuando se procesa en modo horizontal.

  • \hspace*{\fill}La macro de LaTeX se pone \vrule width0pt \hfill \hskip0pten metarilal horizontal.

Lo \hspace*{\fill} %seguido de \itemelimina el espacio no deseado antes del carácter de porcentaje usando el puño \unskip, luego lo elimina \hskip0ptusando el segundo \unskipy finalmente \parelimina \hfill. Esta es la razón por la que \hspace*{\fill} %desaparece cuando le sigue \item.

información relacionada