89

In the memoir manual on page 183 ,this example is given:

\begin{figure}
\centering
\hspace*{\fill}
{ILLUSTRATION 1} \hfill {ILLUSTRATION 2}
\hspace*{\fill}
\caption{Example float with two illustrations}
\label{fig:mult1}
\end{figure}

I have tried to figure out, what the difference between \hspace*{\fill} and \hfill is!?

The \hfill definition and \hspace definition did not help me much.

2 Answers2

95

Using your code snippet as an example, \centering only has an impact on the \caption. However,

\hspace*{\fill}
{ILLUSTRATION 1} \hfill {ILLUSTRATION 2}
\hspace*{\fill}

is meant to set ILLUSTRATION 1 and ILLUSTRATION 2 even distributed across \textwidth:

enter image description here

\documentclass{article}
\usepackage{showframe}% http://ctan.org/pkg/showframe
\begin{document}
\begin{figure}
\centering
\hspace*{\fill}
{ILLUSTRATION 1} \hfill {ILLUSTRATION 2}
\hspace*{\fill}
\caption{Example float with two illustrations}
\label{fig:mult1}
\end{figure}
\end{document}

However, replacing \hspace*{\fill} with \hfill, the space from the right margin is "gobbled":

enter image description here

\documentclass{article}
\usepackage{showframe}% http://ctan.org/pkg/showframe
\begin{document}
\begin{figure}
\centering
\hfill%\hspace*{\fill}
{ILLUSTRATION 1} \hfill {ILLUSTRATION 2}%
\hfill%\hspace*{\fill}
\caption{Example float with two illustrations}
\label{fig:mult1}
\end{figure}
\end{document}

giving value to the command definition for \hspace*:

LaTeX removes horizontal space that comes at the end of a line. If you don't want LaTeX to remove this space, include the optional * argument. Then the space is never removed.

An alternative to use if \hfill is more intuitive than \hspace*{\fill}, is to insert dummy text (like \null or \mbox{}) at the (start and) end of the line. That way the \hfill will always have "something to infinitely stretch against":

\null\hfill%
{ILLUSTRATION 1} \hfill {ILLUSTRATION 2}%
\hfill\null%

In the above examples, showframe merely highlighted the text block.

Werner
  • 603,163
14

There is a very good discussion and answers at What is the difference between 'fil' and 'fill'?.

As related to the specifics in your question \hfill is a TeX primitive that expands to,

 \hfill = \hskip 0pt plus 1fill minus 0pt

whereas \hspace*{\fill}, is a LaTeX macro, which leaves a space equal to a 1fill. The star version of the command is used if the glue is to be inserted at the beginning of a line.

yannisl
  • 117,160