mcpField
L
latex-figure-table-layout

latex-figure-table-layout

github.com/dw-dengweiDocuments148 installsUpdated 35w ago
Repository

About latex-figure-table-layout

A guidance skill for authors arranging figures and tables in LaTeX. It focuses on float positioning and layouts, not sizing or scaling.

Key features

  1. 01Float placement options
  2. 02Subfigure and subtable layouts
  3. 03Side-by-side figure and table layouts
  4. 04Cross-column floats
  5. 05Troubleshooting float placement

Use cases

  1. 01Stop figures drifting far from their references
  2. 02Arrange figures in a 2×2 grid
  3. 03Place a figure beside a table
  4. 04Position a table across two columns

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/dw-dengwei/skills --skill latex-figure-table-layout

After installing, type/latex-figure-table-layoutin Claude Code to confirm it loaded.

Bundled filesreferences/float-positioning.mdreferences/subfigure-layout.md

Details

From the project README

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
ParameterMeaningPriority
[h]Here (exact location)Highest
[t]Top of pageMedium
[b]Bottom of pageMedium
[p]Separate float pageLowest
[!]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

RequestApproach
"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

Comments

Markdown supported