Agent Skills: LaTeX Figure and Table Layout

Professional LaTeX figure and table positioning. Handle float placement, subfigure/subtable layouts, side-by-side arrangements, and cross-column figures. Does NOT adjust sizes, widths, or scaling.

UncategorizedID: dw-dengwei/skills/latex-figure-table-layout

Install this agent skill to your local

pnpm dlx add-skill https://github.com/dw-dengwei/skills/tree/HEAD/latex-figure-table-layout

Skill Files

Browse the full folder contents for latex-figure-table-layout.

Download Skill

Loading file tree…

latex-figure-table-layout/SKILL.md

Skill Metadata

Name
latex-figure-table-layout
Description
Professional LaTeX figure and table positioning. Handle float placement, subfigure/subtable layouts, side-by-side arrangements, and cross-column figures. Does NOT adjust sizes, widths, or scaling.

LaTeX Figure and Table Layout

Expert guidance for positioning figures and tables in LaTeX documents. This skill handles float placement, subfigure arrangements, side-by-side layouts, and cross-column positioning.

When to Use This Skill

Use this skill when:

  • Adjusting figure/table position parameters ([h], [t], [b], [p])
  • Arranging multiple figures/tables in subfigures
  • Creating side-by-side figure or figure+table layouts
  • Fixing float positioning issues (drifting, page alone)
  • Working with cross-column figures (figure*, table*)

NOTE: This skill does NOT modify sizes, column widths, or scaling. Only positioning.


Float Position Parameters

Position Specifiers

| Parameter | Meaning | Priority | |-----------|---------|----------| | [h] | Here (exact location) | Highest | | [t] | Top of page | Medium | | [b] | Bottom of page | Medium | | [p] | Separate float page | Lowest | | [!] | Override LaTeX defaults | - |

Recommended Order

\begin{figure}[htbp]  % Recommended: try here, then top, bottom, then float page
\end{figure}

Strong Recommendations

\begin{figure}[!htbp]  % Force LaTeX to respect your order
\end{figure}

Best Practice: Use [htbp] or [!htbp] for most cases. Avoid single [h] which can cause float to drift.


Subfigure Layout with subcaption

Basic Subfigures (2 side-by-side)

\usepackage{subcaption}

\begin{figure}[htbp]
  \centering
  \begin{subfigure}[b]{0.45\textwidth}
    \includegraphics[width=\textwidth]{figure1.pdf}
    \caption{First figure}
    \label{fig:first}
  \end{subfigure}
  \hfill
  \begin{subfigure}[b]{0.45\textwidth}
    \includegraphics[width=\filename]{figure2.pdf}
    \caption{Second figure}
    \label{fig:second}
  \end{subfigure}
  \caption{Main caption for both figures}
  \label{fig:both}
\end{figure}

Subfigures in Grid (2x2)

\begin{figure}[htbp]
  \centering
  \begin{subfigure}[t]{0.45\textwidth}
    \includegraphics[width=\filename]{fig1.pdf}
    \caption{Caption A}
  \end{subfigure}
  \hfill
  \begin{subfigure}[t]{0.45\textwidth}
    \includegraphics[width=\filename]{fig2.pdf}
    \caption{Caption B}
  \end{bmatrix}
  \\
  \begin{subfigure}[t]{0.45\textwidth}
    \includegraphics[width=\filename]{fig3.pdf}
    \caption{Caption C}
  \end{subfigure}
  \hfill
  \begin{subfigure}[t]{0.45\textwidth}
    \includegraphics[width=\filename]{fig4.pdf}
    \caption{Caption D}
  \end{subfigure}
  \caption{Main caption for all four}
  \label{fig:grid}
\end{figure}

Subtables

\begin{table}[htbp]
  \centering
  \begin{subtable}[t]{0.45\textwidth}
    \centering
    \begin{tabular}{cc}
      \toprule
      A & B \\
      \midrule
      1 & 2 \\
      \bottomrule
    \end{tabular}
    \caption{First table}
    \label{tab:first}
  \end{subtable}
  \hfill
  \begin{subtable}[t]{0.45\textwidth}
    \centering
    \begin{tabular}{cc}
      \toprule
      C & D \\
      \midrule
      3 & 4 \\
      \bottomrule
    \end{tabular}
    \caption{Second table}
    \label{tab:second}
  \end{subtable}
  \caption{Main caption}
  \label{tab:both}
\end{table}

Side-by-Side: Figure + Table

Using minipage

\begin{figure}[htbp]
  \centering
  \begin{minipage}[c]{0.45\textwidth}
    \centering
    \includegraphics[width=\filename]{figure.pdf}
    \caption{My figure}
    \label{fig:minipage}
  \end{minipage}
  \hfill
  \begin{minipage}[c]{0.45\textwidth}
    \centering
    \begin{tabular}{lc}
      \toprule
      Method & Acc \\
      \midrule
      A & 85.2 \\
      B & 92.1 \\
      \bottomrule
    \end{tabular}
    \caption{My table}
    \label{tab:minipage}
  \end{minipage}
  \caption{Combined figure and table}
  \label{fig+tab}
\end{figure}

Using subcaptionbox

\begin{figure}[htbp]
  \centering
  \subcaptionbox{Figure label\label{fig:subcap}}
    {\includegraphics[width=0.45\textwidth]{figure.pdf}}
  \qquad
  \subcaptionbox{Table label\label{tab:subcap}}
    {\begin{tabular}{lc}
      \toprule
      A & B \\
      \midrule
      1 & 2 \\
      \bottomrule
    \end{tabular}}
  \caption{Combined caption}
  \label{fig:subcap:combined}
\end{figure}

Cross-Column Figures (twocolumn)

Cross-Column Figure

\begin{figure*}[htbp]
  \centering
  \includegraphics[width=0.8\textwidth]{wide-figure.pdf}
  \caption{Wide figure spanning both columns}
  \label{fig:wide}
\end{figure*}

Cross-Column Table

\begin{table*}[htbp]
  \centering
  \begin{tabular}{lcccc}
    \toprule
    Method & A & B & C & D \\
    \midrule
    Baseline & 85.2 & 86.1 & 87.3 & 88.0 \\
    Ours & \textbf{92.1} & \textbf{91.5} & \textbf{93.2} & \textbf{94.1} \\
    \bottomrule
  \end{tabular}
  \caption{Wide table spanning both columns}
  \label{tab:wide}
\end{table*}

Common Float Issues and Solutions

Issue: Figure drifts to end of document

Cause: Using [h] alone or figure is too large

Solution:

% Before (problematic)
\begin{figure}[h]

% After (recommended)
\begin{figure}[htbp]
% Or force placement
\begin{figure}[!htbp]

Issue: Figure takes entire page alone

Cause: [p] triggers float page, or figure is large

Solution:

% Add stretch to push other content
\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.7\textwidth]{figure.pdf}
  \caption{Caption}
  % Add space to encourage text to flow around
\end{figure}

Issue: Figure separated from text reference

Cause: Float placement rules

Solution:

  1. Use [!htbp] to force earlier placement
  2. Place figure closer to its reference in source
  3. Use \FloatBarrier from placeins package:
\usepackage{placeins}
\section{My Section}
Text reference to \figurename~\ref{fig:myfig}.

\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.8\textwidth]{figure.pdf}
  \caption{My figure}
  \label{fig:myfig}
\end{figure}
\FloatBarrier  % Prevents floats from crossing this barrier

Issue: Subfigures not aligned

Cause: Different heights, missing alignment option

Solution:

% Use [t], [b], or [c] for vertical alignment
\begin{subfigure}[t]{0.45\textwidth}  % [t] = top alignment
\begin{subfigure}[b]{0.45\textwidth}  % [b] = bottom alignment

Issue: Captions not centered under subfigures

Cause: Missing width specification

Solution:

\begin{subfigure}[t]{0.45\textwidth}
  \centering
  \includegraphics[width=\filename]{fig.pdf}
  \caption{Caption text}
\end{subfigure}

Best Practices

  1. Use [htbp] by default - gives LaTeX flexibility while respecting order
  2. Use [!htbp] for important figures - overrides some float constraints
  3. Place floats near their reference - in source order, not necessarily final position
  4. Use booktabs for tables - professional look, but this skill doesn't handle formatting
  5. Use subcaption package - modern replacement for subfig
  6. Consider \FloatBarrier - for strict float control in sensitive locations

Required Packages

The following packages are referenced in the examples above:

\usepackage{subcaption}  % For subfigure/subtable
\usepackage{booktabs}    % For professional tables (not positioning)
\usepackage{placeins}    % For \FloatBarrier

Example Tasks

| Request | Approach | |---------|----------| | "Figure 1 always goes to next page" | Change [h] to [htbp] or [!htbp] | | "Arrange 4 figures in 2x2 grid" | Use subfigure with line break \\ | | "Put figure and table side by side" | Use minipage or subcaptionbox | | "Figure 2 is far from Section 2.2" | Use [!htbp] or add \FloatBarrier | | "Wide table spans both columns" | Use table* instead of table |