Polish Tables & Figures
Turn draft-quality LaTeX floats into the tables and figures reviewers expect
to see at ACM / IEEE / NeurIPS-style / LNCS venues: booktabs rules, columns
that fit the page budget, clean subfigure layouts, venue-correct captions,
consistent \cref references, and colorblind-safe colors. Every change is
presentation-only; the numbers are sacred.
When to use
- "Make my tables/figures look professional" / "polish for camera-ready"
- "Convert this table to booktabs" / "my table is too wide" / "overfull hbox"
- "Lay these plots out as subfigures" / "fix my captions"
- "Are my figure colors colorblind-safe?" / "pick a palette for this plot"
- "Fix my \ref/\cref mess"
- After
tailor-to-venue, beforepreflight-check.
Inputs
- The main
.texfile (the one with\documentclass);\input/\includefiles are followed automatically. - Optional: a venue profile
venues/conferences/<venue>-<year>.yml(schema invenues/schema.yml) — sets column count and caption conventions. Without one, conventions are inferred from the documentclass. - Strongly recommended: a compiled
.lognext to the.texso the column-sizing (overfull box) check can run.
Process
Resolve venue conventions. If a venue is named, load its profile (sanity-check with
python3 scripts/venueyaml.py venues/conferences/<venue>.yml). Re-verify format-critical facts against the livecfp_urlbefore relying on them: template/documentclass, column count, any stated figure/table rules (minimum font sizes, color/grayscale requirements, accessibility requirements). Profiles are a starting point, never ground truth.Lint everything first:
python3 scripts/check_floats.py paper.tex \ --venue venues/conferences/<venue>-<year>.ymlFlags:
--json,--strict(warnings also fail),--log <file>,--overfull-threshold <pt>,--no-inputs. Exit codes: 0 clean, 1 findings, 2 bad arguments. The linter covers: booktabs style (\hline,\cline, vertical rules, double rules, missing package),\resizebox/tiny-font scaling, caption position per family, missing\caption/\label/\centering/ACM\Description, label-before-caption, deprecatedsubfigurepackage,width=\textwidthin a one-column float at a two-column venue, raster graphics,[h]/[H]placement, undefined and unreferenced labels, mixedFigure~\refvs\crefstyles, "Figure \cref" double prefixes, cleveref load order, lowercase\crefat sentence start, and Overfull\hboxentries from the.log.Fix tables — work through findings using references/tables.md: the mechanical booktabs conversion recipe (it preserves cell content byte-for-byte), then column sizing within the page budget (cut → abbreviate → align numbers →
\tabcolsep→tabularx→table*— never\resizebox).Fix figures — references/figures.md: width discipline (
\columnwidth/\linewidth,figure*for spans), subfigure layout withsubcaption, vector formats, font sizes inside plots, float placement.Fix captions and cross-references — references/captions-crossrefs.md: per-family caption position/style table, self-contained caption writing, and the cleveref setup (load last,
capitalise,\crefvs\Cref, one style everywhere).Fix color — references/color-accessibility.md. Check the colors actually used in the paper (hex values from TikZ/pgfplots definitions, or sampled from included plots):
python3 scripts/palettes.py check 4477AA EE6677 ... # arbitrary colors python3 scripts/palettes.py show okabe-ito --format latex|pgfplots|matplotlibchecksimulates protanopia/deuteranopia/tritanopia and grayscale print, flags confusable pairs (exit 1), and the references file explains redundant encoding (markers + line styles, not color alone). If plots are generated by user scripts (matplotlib/pgfplots), edit the plotting source and ask the user to regenerate — never claim recolored results.Recompile and re-run the linter until the verdict is PASS (or every remaining WARN is a deliberate, user-approved choice). Then hand off to
preflight-checkfor the full desk-reject lint.
Output
Edited .tex (and plotting-script) changes applied in place with a short
change log per float: what changed and why, citing the venue convention.
Plus the final linter report (PASS / PASS-WITH-WARNINGS / FAIL). No new
files unless the user asks for extracted style snippets (e.g. a
colors.tex palette preamble).
Adapt to your discipline
Conventions here target CS venues (ACM/IEEE/ML/LNCS). Forking for another
field: adjust the caption-position conventions in
references/captions-crossrefs.md and the family mapping in
scripts/check_floats.py (convention_label); the booktabs, sizing, and
color guidance is field-agnostic.
Guardrails
- Never change data: cell values, units, significant digits, axis scales, error bars, and legends' meanings are untouchable. Reformatting only. If a value looks wrong, tell the user — do not "fix" it.
- Never fabricate venue rules. The profile and the live CFP are the only sources; when neither states a rule, label advice as general convention.
- Do not regenerate or recolor result plots yourself; edit the user's plotting source and let them re-run it.
- Bold-best-result formatting must come from the user's stated criterion, not your reading of which number "looks best".
- Citation issues found along the way go to
verify-citations; submission readiness goes topreflight-check. Never submit anything on the user's behalf.