LaTeX Diff
Compare two versions of a LaTeX document and report what actually changed — text, equations, citations, labels/refs, section titles, macros, environments, file add/remove, and moves — each graded by severity. Wraps the
latexdiff-agentCLI (packages/latex-diff). Member of thelatex-*source/build family.
When to Use
- "What changed between these two versions of the paper?"
- Building an R&R "summary of changes" or a preprint vN→vN+1 changelog
- Focusing a re-review on the changes that matter (semantic-impact only)
- Sanity-checking a co-author's edits before merging
When NOT to Use
- Compiling a document →
latex - Prose quality / proofreading →
proofread - A raw line diff is enough →
git diff(this skill is LaTeX-aware: it knows a changed\citekey from a reflowed paragraph)
What it produces
Two views from the same canonical diff:
- Human summary — grouped by file and section, every line carrying a change
id, a severity badge, and afile:linelocation. - Machine-readable JSON — severity-graded
ChangeRecords.semantic_impact: trueflags the changes a reviewer should actually read.
For a persistent run inside a research project, these are the mandatory core files. Use one timestamp-only basename for the whole run:
reviews/<scope>/<check>/<YYYY-MM-DD-HHMM>.md
reviews/<scope>/<check>/<YYYY-MM-DD-HHMM>.changes.json
Here and below, <check> is this skill's frontmatter name.
Co-locate applicable typed companions with the same basename:
.full.json— unfiltered machine-readable inventory.changes.md— full or raw human-readable inventory when the primary report is a shorter curated summary.diff.texand.diff.pdf— rendered manuscript comparison.source.patch— exact source patch for source-only changes such as citation rekeys
The core pair is stable; companions vary with the comparison. Do not replace the core pair with a PDF, patch, or run-specific directory.
Severity ladder: trivial < low < medium < high < critical. Change types:
formatting_only, text, equation, citation, label_ref, environment, section_title, macro_definition, file_add, file_remove, move, other.
Full flag reference: packages/latex-diff/README.md.
Critical rules
- Read-only. This skill never edits the paper. It reports; the human (or a downstream skill) decides what to do.
paper/is LaTeX-only — when extracting git revisions to temp dirs, write temp copies under/tmp, never inside an Overleaf-syncedpaper/.- Clean up any
git worktree/ temp dirs you create. - Route generated artifacts by provenance. In a research project, persist
them under
reviews/<scope>/<check>/, where<scope>is the target paper slug or_projectand<check>is this skill's frontmattername. Never place generated diff output undercorrespondence/; genuine reviewer/editor/co-author material may be an input, but it remains external correspondence. - Use a flat, same-stem bundle. Put files directly in the producer
directory with a
YYYY-MM-DD-HHMMbasename. Do not create a timestamped run subdirectory and do not useREADME.md,summary.md, or bespoke basenames.
Protocol
1. Resolve the two inputs
| Input form | How to run |
|---|---|
| Two files | latexdiff-agent OLD.tex NEW.tex … |
Two project dirs (multi-file, \input/\include-aware) |
latexdiff-agent OLD_DIR/ NEW_DIR/ … |
| Two git revisions of one file | extract each, then diff (below) |
| Two git revisions of a whole project | git worktree each, then diff dirs (below) |
Single file across revisions:
git show <REV_OLD>:<path/to/main.tex> > /tmp/ld-old.tex
git show <REV_NEW>:<path/to/main.tex> > /tmp/ld-new.tex # omit for working tree
latexdiff-agent /tmp/ld-old.tex /tmp/ld-new.tex --summary -
Whole project across revisions (multi-file):
git worktree add /tmp/ld-old <REV_OLD>
git worktree add /tmp/ld-new <REV_NEW>
latexdiff-agent /tmp/ld-old/<paper-dir> /tmp/ld-new/<paper-dir> --summary - --compact --semantic-only
git worktree remove /tmp/ld-old && git worktree remove /tmp/ld-new
Resolve revisions with
git log --oneline -- <path>when the user names a round ("since submission", "v1") rather than a SHA. If ambiguous, ask.
2. Run the diff
Get both views in one pass — the human summary to read aloud, and the semantic-only JSON to reason over:
latexdiff-agent <OLD> <NEW> --summary - # human view
latexdiff-agent <OLD> <NEW> --compact --semantic-only # the changes that matter
Useful filters (compose freely): --min-severity high, --type citation,
--section Methods, --file sections/intro.tex.
3. Persist a requested diff bundle
If the user asks to generate, create, save, or deliver a diff inside a research project, resolve the project root and paper scope, then create the canonical destination. A conversational request to explain changes without saving files may remain stdout-only.
STAMP=$(date '+%Y-%m-%d-%H%M')
OUT="<project-root>/reviews/<scope>/<check>"
BASE="$OUT/$STAMP"
mkdir -p "$OUT"
latexdiff-agent <OLD> <NEW> --summary "$BASE.md"
latexdiff-agent <OLD> <NEW> --compact --semantic-only --json "$BASE.changes.json"
Add same-stem companions only when useful:
latexdiff-agent <OLD> <NEW> --json "$BASE.full.json"
latexdiff-agent <OLD> <NEW> --latexdiff "$BASE.diff.tex"
git diff <OLD> <NEW> > "$BASE.source.patch" # source-level comparison only
Compile .diff.tex through the latex workflow when the user requests a visual
diff; keep intermediate build artifacts in out/ and copy only the final
.diff.pdf beside the bundle. Record the two stable comparison inputs in the
Markdown report; never expose disposable /tmp paths as the authoritative
baseline/current identifiers.
4. Report
- Lead with the summary line: total changes, semantic-impact count, impact score.
- List the semantic-impact changes grouped by section, each with its
file:line, type, and severity. These are the ones worth attention. - Note (don't dump) the trivial/formatting/move changes as a count.
- If the user wanted a changelog or response-letter "summary of changes", phrase
the semantic changes as prose bullets — but do not edit the manuscript
(
rules/manuscript-edit-budget.md); hand the bullets back for them to place.
Cross-References
| Skill | Relationship |
|---|---|
latex |
Compiles documents; this skill compares versions of them |
review-artefact-routing |
Governs the scoped producer route and same-stem companion contract |
strategic-revision --external |
Consumes this as evidence for the R&R "summary of changes"; it does not turn internal findings into venue claims |
preprint |
Consumes this for a vN→vN+1 changelog on version bump |
paper-critic / referee2-reviewer |
Can take --semantic-only JSON to focus a re-review on what changed |
packages/latex-diff/README.md |
Full CLI flags, schema, and design notes |