From armory
Audits LaTeX academic manuscripts for typography conventions: booktabs tables, caption placement, dashes/quotes, units/numbers, cross-references, layout, hierarchy, and polish. Useful for paper review phase.
npx claudepluginhub mathews-tom/armory --plugin armoryThis skill uses the workspace's default tool permissions.
---
Reviews LaTeX documents for common issues, style consistency, typography, cross-references, draft artifacts, and debugging code. Use after editing or before submission.
Audits readability and rendering of figures and tables in LaTeX academic manuscripts by computing display-scale font and marker sizes, checking label collisions, color accessibility, axis efficiency, table formatting, and consistency.
Converts LaTeX academic papers between publisher formats (e.g., Springer/IPOL to MDPI/IEEE/Nature) by extracting content, injecting into new templates, fixing formatting, and compiling PDFs.
Share bugs, ideas, or general feedback.
Pipeline position: Phase 2b (polish audit). Runs in parallel with
manuscript-provenance. Depends on: content settled after Phase 1 fixes.
See /manuscript-pipeline for full execution order.
Audit a LaTeX manuscript for widely-accepted academic typographic conventions that directly affect readability and professional appearance. These are not venue-specific formatting rules — they are cross-venue norms from decades of academic publishing that experienced readers and reviewers notice.
A paper with solid content but poor typography signals inexperience. Reviewers form impressions from visual presentation before reading a single sentence.
| Concern | manuscript-review | manuscript-typography (this) | arxiv-preflight |
|---|---|---|---|
| Table content | Data quality, significant figures (§12) | Design: booktabs, alignment, headers, caption placement | Format compliance |
| Figure content | Colorblind, axis labels, chartjunk (§12) | Design: font matching, backgrounds, subfigure style | Format/size compliance |
| Rendered output | Legibility, float proximity, page breaks (§23) | Layout: widows, column balance, spacing, float specifiers | N/A |
| Math notation | Notation consistency, operator formatting (§15) | Spacing, delimiter sizing, display vs inline choices | N/A |
| Cross-refs | Citation hygiene (§11) | Reference style consistency, non-breaking spaces | N/A |
| Typography | N/A | Dashes, quotes, units, micro-typography | N/A |
| Polish | N/A | TODOs, placeholders, metadata, bookmarks | N/A |
Rule: This skill audits design and typography. manuscript-review audits content and communication. arxiv-preflight audits submission compliance. No overlap — each reads different signals from the same document.
Read all .tex files (main + \input/\include targets). Identify:
If compiled PDF is available, use it for rendered inspection checks.
For each check:
1.1 Rule structure
booktabs package: \toprule, \midrule, \bottomrule\hline (replace with booktabs equivalents)| in column spec) — vertical lines in tables are a hallmark of amateur typesetting% BAD
\begin{tabular}{|l|c|r|}
\hline
Method & Accuracy & F1 \\
\hline\hline
Ours & 0.94 & 0.91 \\
\hline
\end{tabular}
% GOOD
\begin{tabular}{lcr}
\toprule
Method & Accuracy & F1 \\
\midrule
Ours & 0.94 & 0.91 \\
\bottomrule
\end{tabular}
1.2 Column alignment
S column from siunitx)1.3 Header formatting
\textbf{})Latency (ms) not Latency ms1.4 Best-result indication
1.5 Table notes
\tablenotes (threeparttable) or manual footnotes with consistent markers1.6 Caption placement
\caption{} before \begin{tabular}1.7 Caption formatting
\small (one step down) is standard; \footnotesize acceptablecaption package to control this consistently:\usepackage[font=small, labelfont=bf]{caption}
% label ("Table 1:") = bold, description = \small
% applies uniformly to all figures AND tables
\footnotesize — becomes unreadable1.8 Caption style
labelsep in caption package)1.9 Spacing
\addlinespace (booktabs) for logical row groups, not empty rows\\[6pt] manual spacing hacks inside tables@{\hspace{...}} or \setlength{\tabcolsep} if too compressed1.10 Long tables
longtable or supertabular\small is unreadable)2.1 Caption placement
\caption{} after \includegraphics2.2 Caption formatting
caption package applies uniformly\small or \footnotesize (matches table caption size)caption package: verify manually that figure and table captions use identical formatting2.3 Caption style
2.4 Subfigure labeling
subcaption or subfigure package — not manual lettering2.5 Font consistency
2.6 Background
axes.facecolor)2.7 Aspect ratio
2.8 Consistent framing
3.1 Dashes
-): compound words (well-known, state-of-the-art)--): number ranges (10--20, pages 5--12, 2020--2023). Common error: hyphen used for ranges ("10-20" → "10--20").---): parenthetical asides and emphatic breaks. Em-dashes are accepted by CMOS 18, APA 7, and MLA 9 in academic prose — flag the following instead of banning the character:
text---text); journalistic AP style uses spaced (text --- text). Pick one and apply uniformly. Mixed usage = FAIL.pages 5---12 should be pages 5--12) = FAIL.manuscript-review Pass 7b for that judgment, do not flag em-dashes alone as AI tells.3.2 Quotation marks
`` (backticks)'' (straight single quotes)"straight quotes" — renders incorrectly in TeX`inner' inside outer'' ``3.3 Ellipsis
\ldots or \dots — not three periods (...)\ldots produces properly spaced ellipsis3.4 Non-breaking spaces
\ref: Figure~\ref{fig:x}, Table~\ref{tab:x}, Section~\ref{sec:x}\cite: previous work~\cite{smith2020}10~ms or 10\,ms3.5 Ties and thin spaces
10\,ms, 5\,GB, 100\,K (use siunitx for consistency)\cite{x} not \cite{ x }3.6 Semantic markup
\emph{text} over {\it text} or \textit{text} — \emph nests correctly\textbf{} for bold, not {\bf }\textbf, \textit, \textsf) over old-style (\bf, \it, \sf)\textrm{} for roman text inside math mode, not manual font switches3.7 Micro-typography
\usepackage{microtype} — enables character protrusion and font expansion3.8 Special characters
\& not & in text\% not % in text\# not # in text\_ not _ in text$^\circ$ or \textdegree — not ° (Unicode)$\times$ — not x3.9 Ligatures
\DisableLigatures or microtype ligatures=false is set globally without reason3.10 Italic usage — three distinct purposes
\emph{important} — for stress within a sentence\textit{in vivo}, \textit{a priori} — for non-English terms not yet naturalized\textit{A convolutional layer is...} — for the first occurrence of a technical term being introduced3.11 No color for emphasis
hyperref link colors for cross-references and URLs3.12 Sentence spacing
\frenchspacing disables it (uniform spacing). Both are acceptable — but be deliberate.\frenchspacing, add \ or ~ after the period to prevent LaTeX from treating it as end-of-sentence: et al.\ or use \@. before a true sentence-ending period after a capital letter.Dr.\ Smith3.13 Display vs inline math
\frac), sums (\sum), products (\prod), integrals, or matrices should be displayed, not inline — inline rendering compresses them and disrupts line spacing$x = 5$) stay inline\[ ... \] or equation environment — not $$ ... $$ (which is plain TeX, not LaTeX, and has incorrect spacing)3.14 URL handling
\url{} or \href{} — never bare text or \texttt{}\url{} enables line breaking at appropriate characters (/, ., -, etc.)\texttt{https://...} does NOT break across lines → overfull boxesurl or hyperref package (hyperref includes url functionality)hyperref is loaded: verify breaklinks=true is set in \hypersetup\UrlBreaks:\makeatletter
\g@addto@macro{\UrlBreaks}{\UrlOrds}
\makeatother
\url{}4.1 Number-unit spacing
siunitx package — \SI{10}{\milli\second} or \qty{10}{ms}4.2 Unit typography
$t = 10\,\mathrm{ms}$ not $t = 10\,ms$ (italic)m/s or m\,s$^{-1}$ — consistent style4.3 Number formatting
10--20) not hyphen (10-20)$-5$) not hyphen (-5) in running text4.4 Significant figures
4.5 Percentages
4.6 Inline fractions
\nicefrac{1}{2} or \sfrac{1}{2} (from xfrac) — not $\frac{1}{2}$$\frac{}{}$ inline disrupts line spacing by creating a tall element\frac) are correct in display math and equations5.1 Reference abbreviation consistency
5.2 Non-breaking spaces
Figure~\ref{fig:x} — prevents "Figure" at end of line, "3" at start of nextEq.~\eqref{eq:x} — same5.3 Equation references
(\ref{eq:x}) or \eqref{eq:x} — not mixed5.4 Citation style
\bibliographystyle)[1] hardcoded) — always \cite\cite{a,b,c} not \cite{a}\cite{b}\cite{c}5.5 Latin abbreviations and common shorthands
\frenchspacing: add \ after abbreviation periods mid-sentence to prevent extra spacing (see 3.12)5.6 Hyperref consistency
hyperref: link colors consistent (all blue, all black, or all boxed)6.1 Float specifiers
[htbp] over [H] — [H] forces placement and often creates bad page breaks with large whitespace gaps[t] or [tb] acceptable for top/bottom placement[h] alone is fragile (LaTeX often ignores it)[h!] or [H] unless there is a specific reason6.2 Widow and orphan control
\widowpenalty=10000 and \clubpenalty=10000 in preamble\needspace commands6.3 Column balance (two-column layouts)
\usepackage{balance} or \usepackage{flushend})6.4 Manual spacing
\vspace{}, \hspace{}, \\[Xpt], \bigskip, \smallskip6.5 Page breaks
\newpage or \clearpage in the middle of sections without justification\clearpage before bibliography is acceptable6.6 Paragraph spacing vs indentation
\usepackage{parskip})6.7 Paragraph indentation size
\parindent is ~1.5em)\parindent to unusual values without reason6.8 First paragraph after heading
\indent or \hspace{\parindent} to first paragraphs: FAIL\usepackage{indentfirst}): WARN — non-standard in English academic typesetting. Standard in French/some European traditions — acceptable if intentional.6.9 Line spacing / leading
\baselinestretch = 1.0)\linespread{1.6} or \usepackage[doublespacing]{setspace} = FAIL for submission — this is referee/draft mode, not camera-readyarticle and double-spacing is active, flag it — likely a forgotten draft setting\linespread{1.05} to \linespread{1.1} is acceptable fine-tuning for some fonts6.10 Line length / characters per line
\usepackage{geometry} to set appropriate text width6.11 Deferred float accumulation
[t] floats in a section with dense content. LaTeX defers floats it
cannot place, and they pile into the next available space.\usepackage{placeins} and insert \FloatBarrier before subsections that
should start with clean text flow (especially methodology/statistics/discussion sections
that follow data-heavy sections with many floats).\usepackage[section]{placeins} prevents floats from crossing \section
boundaries automatically. For \subsection-level control, manual \FloatBarrier is needed.[H] — this creates worse layout problems (large
whitespace gaps). \FloatBarrier at strategic points is the correct solution.\usepackage{placeins} + \FloatBarrier before affected subsections)6.12 Consecutive hyphenated lines
\hyphenpenalty=50 (default), increase to reduce hyphenation frequency, or rephrase locally\usepackage[none]{hyphenat} disables hyphenation entirely — rarely desirable in academic text\hyphenation{spe-ci-fic-word} for individual problem words7.1 Inline code
\texttt{} or \verb|| for inline code/identifiers7.2 Code listings
listings or minted package — not manual \texttt blocks\small or \footnotesize — not body size (too large) or \scriptsize (too small)7.3 Algorithm pseudocode
algorithm2e, algorithmic, or algorithmicx packageThe document's font sizes and weights must form a clear visual hierarchy. Readers unconsciously use size/weight differences to parse document structure. When elements are the same size, the hierarchy collapses and the page looks flat.
8.1 Size hierarchy reference
Standard academic LaTeX size hierarchy (relative to body text):
| Element | Size relative to body | Weight | Style |
|---|---|---|---|
| Chapter/Part title | +4--6pt | Bold | Roman |
| Section heading | +2--3pt | Bold | Roman |
| Subsection heading | +1--2pt | Bold | Roman |
| Subsubsection heading | same as body | Bold or italic | Roman |
| Body text | base (10pt, 11pt, or 12pt) | Normal | Roman |
| Caption label ("Figure 1:") | 1 step below body (\small) | Bold | Roman |
| Caption description | 1 step below body (\small) | Normal | Roman |
| Table body text | same as body or \small | Normal | Roman |
| Figure-internal text | comparable to caption size | Normal | Sans-serif or body font |
| Footnotes | 2 steps below body (\footnotesize) | Normal | Roman |
| Code listings | 1--2 steps below body | Normal | Monospace |
| Header/footer | 1--2 steps below body | Normal | Roman or italic |
Most document classes set this hierarchy automatically. The skill checks that the author hasn't overridden it incorrectly.
8.2 Caption size must be smaller than body
\small (10.95pt for 12pt body, 9.5pt for 11pt, 9pt for 10pt)\footnotesize is also acceptable (slightly smaller)caption package is the correct way to enforce this:% Standard professional setup
\usepackage[font=small, labelfont=bf]{caption}
% Alternative: slightly smaller
\usepackage[font=footnotesize, labelfont=bf]{caption}
% With label separator control
\usepackage[font=small, labelfont=bf, labelsep=period]{caption}
% produces "Figure 1. Description" with bold "Figure 1."
8.3 Caption label must be visually distinct from description
labelfont=sc) or bold small caps8.4 Heading weight and size decrease with depth
\section > \subsection > \subsubsection in both size and visual weight{\Large\textbf{...}} instead of \section{} = FAIL — breaks numbering, bookmarks, and TOC8.5 Footnote size
\footnotesize)8.6 Table body text size
\small)\footnotesize or smaller to fit — redesign the table instead (fewer columns, abbreviate headers, split into two tables)\small is the floor8.7 Header/footer text
8.8 No manual font-size overrides in body
{\large ...} or {\Large ...} in running text (not headings){\small ...} wrapping entire sections to fit page limits\small inside specific floats/environments is acceptable9.1 Placeholder detection
.tex file9.2 PDF metadata (if PDF available)
\hypersetup{pdftitle={...}, pdfauthor={...}} configured9.3 PDF bookmarks
hyperref loaded with bookmarks enabled (default)9.4 Consistent package loading
\usepackage calls for the same package9.5 Overfull/underfull box warnings (MANDATORY — do not skip)
.log file (same name as main tex, e.g., main.log or yuj.log)Overfull \\hbox — each is text extending past the margin\resizebox tables, long \texttt{} stringsbreaklinks=true + \UrlBreaks{\UrlOrds} (see 3.14)\allowbreak or move to display\resizebox scaling, consider \small or redesign\texttt{}: replace with \url{} for URLs, add \allowbreak for pathsUnderfull \\hbox with badness > 5000 — these produce visibly loose lines9.6 Unresolved references
?? in rendered output from unresolved \ref or \cite[?] from missing bibliography entries.log for "Reference ... undefined" and "Citation ... undefined"# Typography Audit Report
**Manuscript:** [main tex file]
**Document class:** [detected class]
**Layout:** [single/two-column]
**Date:** [date]
**Verdict:** [Professional | Needs Polish | Significant Issues]
## Summary
| Category | Pass | Fail | Warn |
|----------|------|------|------|
| Table Design | | | |
| Figure Design | | | |
| LaTeX Typography | | | |
| Units & Numbers | | | |
| Cross-References | | | |
| Page Layout | | | |
| Code & Algorithms | | | |
| Typographic Hierarchy | | | |
| Professional Polish | | | |
## Fixes (ordered by impact)
### High Impact (visual professionalism)
[Issues that experienced readers/reviewers will notice immediately]
### Medium Impact (readability)
[Issues that affect reading experience but may not be consciously noticed]
### Low Impact (polish)
[Micro-issues that matter for camera-ready / final versions]
## Quick Fixes
[One-line fixes: add microtype, add booktabs, fix non-breaking spaces —
items that take <1 minute each and improve the document noticeably]
Save report as [manuscript-name]-typography-report.md in the project directory.
Present:
Common one-line preamble additions that resolve multiple issues:
% Micro-typography: better line breaks, margin alignment
\usepackage{microtype}
% Professional tables: \toprule, \midrule, \bottomrule
\usepackage{booktabs}
% Proper SI units: \SI{10}{\milli\second}
\usepackage{siunitx}
% Subfigures with consistent labeling
\usepackage[labelformat=parens]{subcaption}
% Widow/orphan prevention
\widowpenalty=10000
\clubpenalty=10000
% Two-column balance on last page
\usepackage{balance} % add \balance before \bibliography
% Caption formatting: bold label, small text
\usepackage[font=small, labelfont=bf]{caption}
% Inline fractions: \nicefrac{1}{2}
\usepackage{nicefrac}
% PDF metadata
\hypersetup{
pdftitle={Your Paper Title},
pdfauthor={Author Names},
}
Conventions, not preferences. Every check in this audit reflects a norm practiced by the majority of well-typeset academic papers across venues. Where conventions genuinely vary (e.g., percentage spacing), flag as WARN with both options and ask for consistency.
Document class awareness. Some document classes override default
conventions (e.g., IEEEtran has its own table style). When the class
dictates a style, follow it — do not impose conflicting conventions.
Fix the source, not the symptom. \vspace{-3mm} to fix spacing is a
symptom-level hack. Fixing the float specifier or package configuration
that caused the bad spacing is the real fix.
Quick wins first. The report prioritizes fixes by impact-to-effort ratio.
Adding \usepackage{microtype} takes 5 seconds and improves every page.
That goes before suggestions to redesign all tables.
No style imposition. This skill does not enforce "my preferred style." It enforces consistency within the document and adherence to conventions that have broad consensus. Where the author has made a deliberate, consistent choice, respect it.