The Definitive Guide To Float Placement In Latex
What are Floats and Why Manage Their Placement?
In LaTeX, floats are objects that are not part of the main text flow and are instead placed at a location deemed optimal based on the document's formatting parameters. The most common types of floats are tables, figures, and algorithms, though other custom float types can be defined as well.
Floats serve the purpose of presenting information that needs to be separate from the main text, such as images, charts, code snippets, etc. However, LaTeX makes decisions on float placement based on a complex algorithm that balances optimal page filling against other typesetting conventions. This can sometimes lead to floats being placed far away from their first citation in the text, reducing readability and coherence.
Therefore, it is often necessary for LaTeX users to manually influence float placement to ensure images, tables, and other floats appear in proximity to the text that references them. This improves the reader's ability to visualize the relationships between concepts described and prevents disruption from having to jump back and forth within the document.
Float Placement Options in LaTeX
LaTeX offers several options that provide varying degrees of float placement control when including floats using commands like \begin{figure} and \begin{table}. These options come in the form of placement specifiers that can be combined to tune placement behavior.
The most common placement options are:
- h - Place float here if possible, otherwise at top of page
- t - Place at top of page
- b - Place at bottom of page
- p - Place on a separate page, alone
For example, [ht] attempts to place the float here first, then the top of the next page if not possible. The ! modifier forces a placement, like \begin{figure}[!ht] guaranteeing either the current location or the next page top.
Using [H] makes a float inline, allowing text to wrap around it. This provides the most control over placement at the cost of interrupting text flow. The float areas \topfraction, \bottomfraction, \textfraction and associated counters alter how likely latex is to accept a given placement.
Customizing LaTeX’s Floating Algorithm
Without any user guidance, LaTeX automatically selects float placement based on an algorithm that attempts to balance good page filling against conventions like keeping figures near their first reference. It does this by comparing the remaining space on the page to parameters like \topfraction.
For example, \topfraction=0.7 means floats can occupy 70% of space at the top of a text page. If exceeded, the float will be moved later in the document. The \bottomfraction, \textfraction, and \floatpagefraction perform similar roles for other areas.
LaTeX has separate counters tracking figures, tables and custom float types. When any counter exceeds a limit (e.g. \maxfloats), no more floats of that type will be allowed on the current page.
The placeins package provides additional commands like \FloatBarrier to restrict float movement within sections of a document, giving much finer control than LaTeX floats management defaults.
Troubleshooting Issues with Floats
Sometimes users encounter LaTeX errors like "Too many unprocessed floats", meaning it has struggled to place all specified floats optimally. There are then several techniques to remedy float placement issues:
- The \clearpage or \afterpage{clearpage} command starts a new page, allowing more floats to be flushed
- Multi-column floats may need their widths adjusted to help LaTeX place them
- Large floats should use the [p] specifier to give LaTeX more positioning flexibility
- Additional float areas like \extrafloats can be provided in extreme cases
With trial and error, float placement problems can usually be corrected through a combination of manual placement tweaks and better assisting LaTeX's automated algorithm.
Example Float Placements Step-by-Step
This section provides some real-world examples of using LaTeX's float placement control mechanisms to achieve specific and commonly desired formatting results:
Figures in Outer Column of Two Column Text
Using:
\begin{figure*}[!t]
\centering
\includegraphics[width=\columnwidth]{image}
\caption{My wide image}
\end{figure*}
Forces the float to span both columns at the top of the next page.
Full Page Width Tables
Using:
\begin{table*}[!p]
\small
\centering
\begin{tabular}{|l|l|}
...
\end{tabular}
\caption{My wide table}
\end{table*}
Places the multi-column table on its own page with full text width.
Algorithms Immediately After First Reference
Using:
In algorithm \ref{myalg} we present...
\begin{algorithm}[!h]
\caption{My algorithm}\label{myalg}
...
\end{algorithm}
Forces the algorithm to be placed immediately after its first in-text reference.
Images Before Their Citations
Using:
\begin{figure}[!t]
\centering
\includegraphics[width=\linewidth]{result}
\caption{My results}\label{fig:results}
\end{figure}
As shown in Figure \ref{fig:results}...
Brings the image to the top of the page to ensure it comes before the text that cites it.