Template Compliance
Compare a research project's LaTeX preamble against the working paper template (templates/latex-wp/your-template.sty + your-bib-template.sty). Classify every difference, produce a scored report, and optionally apply changes interactively.
When to Use
- After the template has been updated and you want to check older papers
- Before submission — verify the preamble is clean and up to date
- When a paper has mysterious compilation issues (often a stale preamble)
- During periodic maintenance or
/system-audit
- When starting work on a paper that hasn't been touched in a while
When NOT to Use
- Setting up a new project — use
/init-project-research instead (it copies the template)
- Fixing compilation errors — use
/latex first, then run this
- Non-LaTeX projects — this skill is LaTeX-specific
Critical Rules
- Never edit without
--apply. Default mode is report-only. Without --apply, the skill produces a report and exits.
- Never auto-apply Conflict items. Conflicts always require explicit user confirmation via
AskUserQuestion.
- Semantic comparison, not line-by-line. Compare packages, options, commands, and environments as logical units — not raw text diffs.
- Preserve project-specific additions. Items classified as Keep are informational. Never suggest removing them unless they conflict with a template feature.
- Template is the reference, not the authority. Projects may legitimately diverge. The skill reports differences — the user decides what to act on.
- Compile after applying. If
--apply makes any changes, always verify with /latex.
Protocol
Phase 1: Locate & Parse
Resolve the project path. Accept as argument or use CWD. Resolve to absolute path.
Find the project's preamble files. The canonical location is the Overleaf document, accessed via the paper/ symlink in the project directory. Search in this order:
- New format (
.sty files): paper/your-template.sty + paper/your-bib-template.sty (Overleaf symlink — preferred)
- Legacy format:
paper/settings.tex (Overleaf symlink)
- If no
paper/ symlink exists, check the project root for your-template.sty (or settings.tex)
- Project root:
your-template.sty + your-bib-template.sty or settings.tex (for local-only projects without Overleaf)
- Any
\input{settings} or \usepackage{your-template} in main.tex pointing elsewhere
NEVER check settings/style files in subdirectories like docs/, to-sort/, docs/venues/, or any non-paper location. Only the main paper's preamble is relevant.
If no preamble files are found, report error and exit.
Read the template. The canonical location is templates/latex-wp/ in Task Management:
$TASK_MGMT/templates/latex-wp/your-template.sty + your-bib-template.sty (canonical source)
- Legacy fallback:
settings.tex in the same location
If no template files are found, report "Template not found — cannot compare. Verify that templates/latex-wp/ exists in Task Management." and exit.
Parse both files into semantic blocks:
| Block |
What to extract |
| Packages |
Package name + options (e.g., [dvipsnames]{xcolor}) |
| Hyperref |
All \hypersetup{} key-value pairs + \urlstyle |
| Bibliography |
System (biblatex/natbib), all options, \addbibresource, source mappings, field clearing (\AtEveryBibitem), possessive citation commands |
| Custom commands |
All \newcommand, \renewcommand, \DeclareMathOperator, \newcolumntype |
| Theorem environments |
All \newtheorem declarations with their styles and counters |
| Build config |
.latexmkrc content (engine, output dir, PDF copy-back) |
For packages, normalise options: \usepackage[a,b]{pkg} and \usepackage[b,a]{pkg} are equivalent.
Phase 2: Compare
For each semantic block, compare the project against the template. Detailed check tables for each block: references/comparison-checklist.md
Blocks to compare: Packages (missing, extra, options, load order, duplicates) · Hyperref (missing keys, different values, urlstyle, cleveref ordering) · Bibliography (system mismatch, options, source mappings, field clearing, possessive citations) · Custom Commands (missing, different definitions, column types, math commands) · Theorem Environments (missing, different styles/counters, numberwithin) · Build Config (.latexmkrc existence, engine, output dir, PDF copy-back)
Phase 3: Classify
Label every difference with: Adopt (missing from project, safe to add) · Keep (project-specific, informational) · Conflict (needs human judgement, always ask) · Drop (redundant/superseded).
Full classification rules and when-to-use-each-label guidance: references/comparison-checklist.md
Phase 4: Check Auxiliaries
Check main.tex (preamble loading, documentclass, printbibliography, no stale bibliography commands) and .latexmkrc (exists, engine, output dir, PDF copy-back).
Full check tables: references/comparison-checklist.md
Phase 5: Report
Produce a structured compliance report. Full format: references/report-format.md
Quality Score
Apply numeric quality scoring using the shared framework: ../shared/quality-scoring.md
Start at 100 and deduct per issue:
| Tier |
Deduction |
Examples |
| Critical |
-15 to -25 |
Missing .latexmkrc, natbib vs biblatex conflict, missing hyperref, hyperref/cleveref load order wrong |
| Major |
-5 to -14 |
Missing common packages (booktabs, microtype, enumitem), missing dvipsnames, duplicate package loads, missing custom commands (\todo, \red, \blue), missing source mappings, missing field clearing, missing cleveref |
| Minor |
-1 to -4 |
Missing optional packages, different hyperref colours, missing theorem environments, missing math operators, missing \numberwithin |
Verdicts
| Score |
Verdict |
Meaning |
| 95-100 |
Ship |
Fully aligned with template |
| 90-94 |
Ship with notes |
Minor gaps, acceptable to proceed |
| 80-89 |
Revise |
Meaningful gaps — fix before submission |
| 60-79 |
Revise (major) |
Significant drift — several features missing |
| 0-59 |
Blocked |
Major conflicts or missing infrastructure — consider full resync |
Report Sections
- Header: Project name, path, score, date
- Summary table: Counts by classification (Adopt / Keep / Conflict / Drop)
- Per-item detail: Grouped by semantic block, showing classification + what/why
- Auxiliaries: main.tex and .latexmkrc checks
- Recommendations: Prioritised list of suggested actions
If --apply is not set, end with:
Run `/latex-template <path> --apply` to interactively apply changes.
Phase 6: Apply (--apply mode only)
Apply changes in dependency order to avoid compilation breakage:
- Package options (e.g., add
dvipsnames to xcolor)
- Missing packages (insert in correct position relative to existing packages)
- Hyperref configuration (update
\hypersetup{} block)
- Bibliography changes (only if user approves — always
AskUserQuestion for system changes)
- Custom commands (append after existing commands section)
- Theorem environments (append after existing theorem section)
.latexmkrc (create or update)
- Cleanup (remove duplicates, drop redundancies)
Apply Rules
- Show a summary first. Before making any edits, present the full list of changes to be applied (Adopt + Drop items) and ask for confirmation.
- Conflicts are always individual. Each Conflict item gets its own
AskUserQuestion with the template version, project version, and context.
- Keep items are never touched. They appear in the report but are skipped during apply.
- Preserve comments and whitespace. When inserting packages, match the project's existing formatting style (e.g., if packages are grouped with comment headers, add to the right group).
- Log what was changed. After applying, list every edit made.
Phase 7: Verify (--apply mode only)
After applying changes:
- Compile with
/latex. This handles any secondary issues the changes might introduce.
- Report the result:
- If compilation succeeds: report success + number of changes applied
- If compilation fails: report the error, suggest reverting specific changes, and note which change likely caused the issue
What This Skill Does NOT Do
- Does not rewrite
main.tex structure. Only checks \input{settings} and bibliography commands.
- Does not check content quality. Use
/proofread for that.
- Does not manage
.bib files. Use /bib-validate for bibliography key issues.
- Does not handle journal-specific formatting. Use
/retarget-journal for that.
- Does not compare across projects. Checks one project at a time against the template.
Examples
Report only (default)
"/latex-template ~/papers/costly-voice"
Produces a compliance report without making any changes.
Apply mode
"/latex-template ~/papers/costly-voice --apply"
Produces the report, then interactively applies Adopt and Drop changes with user confirmation.
Current directory
"Check my template compliance"
Runs on the current working directory in report-only mode.
After template update
"I updated the template — check all my papers"
Run on each project individually. This skill checks one project at a time.
Cross-References
templates/latex-wp/your-template.sty + your-bib-template.sty — the canonical template this skill compares against
/latex — used in Phase 7 to verify compilation after applying changes
/audit-project-research — complementary: checks directory structure, this checks LaTeX preamble
/bib-validate — complementary: checks citation keys, this checks bibliography system config
/init-project-research — creates projects from the template; this skill verifies ongoing compliance
/retarget-journal — handles journal-specific formatting (different concern)
1---2name: latex-template3description: Use when you need to compare a project's LaTeX preamble against the working paper template.4---56# Template Compliance78> Compare a research project's LaTeX preamble against the working paper template (`templates/latex-wp/your-template.sty` + `your-bib-template.sty`). Classify every difference, produce a scored report, and optionally apply changes interactively.910## When to Use1112- After the template has been updated and you want to check older papers13- Before submission — verify the preamble is clean and up to date14- When a paper has mysterious compilation issues (often a stale preamble)15- During periodic maintenance or `/system-audit`16- When starting work on a paper that hasn't been touched in a while1718## When NOT to Use1920- **Setting up a new project** — use `/init-project-research` instead (it copies the template)21- **Fixing compilation errors** — use `/latex` first, then run this22- **Non-LaTeX projects** — this skill is LaTeX-specific2324---2526## Critical Rules27281. **Never edit without `--apply`.** Default mode is report-only. Without `--apply`, the skill produces a report and exits.292. **Never auto-apply Conflict items.** Conflicts always require explicit user confirmation via `AskUserQuestion`.303. **Semantic comparison, not line-by-line.** Compare packages, options, commands, and environments as logical units — not raw text diffs.314. **Preserve project-specific additions.** Items classified as **Keep** are informational. Never suggest removing them unless they conflict with a template feature.325. **Template is the reference, not the authority.** Projects may legitimately diverge. The skill reports differences — the user decides what to act on.336. **Compile after applying.** If `--apply` makes any changes, always verify with `/latex`.3435---3637## Protocol3839### Phase 1: Locate & Parse40411. **Resolve the project path.** Accept as argument or use CWD. Resolve to absolute path.422. **Find the project's preamble files.** The canonical location is the **Overleaf document**, accessed via the `paper/` symlink in the project directory. Search in this order:43 - **New format (`.sty` files):** `paper/your-template.sty` + `paper/your-bib-template.sty` (Overleaf symlink — **preferred**)44 - **Legacy format:** `paper/settings.tex` (Overleaf symlink)45 - If no `paper/` symlink exists, check the project root for `your-template.sty` (or `settings.tex`)46 - Project root: `your-template.sty` + `your-bib-template.sty` or `settings.tex` (for local-only projects without Overleaf)47 - Any `\input{settings}` or `\usepackage{your-template}` in `main.tex` pointing elsewhere4849 **NEVER** check settings/style files in subdirectories like `docs/`, `to-sort/`, `docs/venues/`, or any non-paper location. Only the main paper's preamble is relevant.5051 If no preamble files are found, report error and exit.52533. **Read the template.** The canonical location is `templates/latex-wp/` in Task Management:54 - `$TASK_MGMT/templates/latex-wp/your-template.sty` + `your-bib-template.sty` (canonical source)55 - Legacy fallback: `settings.tex` in the same location5657 If no template files are found, report "Template not found — cannot compare. Verify that `templates/latex-wp/` exists in Task Management." and exit.58594. **Parse both files into semantic blocks:**6061 | Block | What to extract |62 |-------|----------------|63 | **Packages** | Package name + options (e.g., `[dvipsnames]{xcolor}`) |64 | **Hyperref** | All `\hypersetup{}` key-value pairs + `\urlstyle` |65 | **Bibliography** | System (biblatex/natbib), all options, `\addbibresource`, source mappings, field clearing (`\AtEveryBibitem`), possessive citation commands |66 | **Custom commands** | All `\newcommand`, `\renewcommand`, `\DeclareMathOperator`, `\newcolumntype` |67 | **Theorem environments** | All `\newtheorem` declarations with their styles and counters |68 | **Build config** | `.latexmkrc` content (engine, output dir, PDF copy-back) |6970 For packages, normalise options: `\usepackage[a,b]{pkg}` and `\usepackage[b,a]{pkg}` are equivalent.7172---7374### Phase 2: Compare7576For each semantic block, compare the project against the template. Detailed check tables for each block: [`references/comparison-checklist.md`](references/comparison-checklist.md)7778Blocks to compare: **Packages** (missing, extra, options, load order, duplicates) · **Hyperref** (missing keys, different values, urlstyle, cleveref ordering) · **Bibliography** (system mismatch, options, source mappings, field clearing, possessive citations) · **Custom Commands** (missing, different definitions, column types, math commands) · **Theorem Environments** (missing, different styles/counters, numberwithin) · **Build Config** (.latexmkrc existence, engine, output dir, PDF copy-back)7980---8182### Phase 3: Classify8384Label every difference with: **Adopt** (missing from project, safe to add) · **Keep** (project-specific, informational) · **Conflict** (needs human judgement, always ask) · **Drop** (redundant/superseded).8586Full classification rules and when-to-use-each-label guidance: [`references/comparison-checklist.md`](references/comparison-checklist.md#phase-3-classification-rules)8788---8990### Phase 4: Check Auxiliaries9192Check `main.tex` (preamble loading, documentclass, printbibliography, no stale bibliography commands) and `.latexmkrc` (exists, engine, output dir, PDF copy-back).9394Full check tables: [`references/comparison-checklist.md`](references/comparison-checklist.md#phase-4-auxiliary-checks)9596---9798### Phase 5: Report99100Produce a structured compliance report. Full format: [`references/report-format.md`](references/report-format.md)101102#### Quality Score103104Apply numeric quality scoring using the shared framework: [`../shared/quality-scoring.md`](../shared/quality-scoring.md)105106Start at **100** and deduct per issue:107108| Tier | Deduction | Examples |109|------|-----------|----------|110| **Critical** | -15 to -25 | Missing `.latexmkrc`, natbib vs biblatex conflict, missing `hyperref`, `hyperref`/`cleveref` load order wrong |111| **Major** | -5 to -14 | Missing common packages (booktabs, microtype, enumitem), missing `dvipsnames`, duplicate package loads, missing custom commands (\todo, \red, \blue), missing source mappings, missing field clearing, missing `cleveref` |112| **Minor** | -1 to -4 | Missing optional packages, different hyperref colours, missing theorem environments, missing math operators, missing `\numberwithin` |113114#### Verdicts115116| Score | Verdict | Meaning |117|-------|---------|---------|118| 95-100 | Ship | Fully aligned with template |119| 90-94 | Ship with notes | Minor gaps, acceptable to proceed |120| 80-89 | Revise | Meaningful gaps — fix before submission |121| 60-79 | Revise (major) | Significant drift — several features missing |122| 0-59 | Blocked | Major conflicts or missing infrastructure — consider full resync |123124#### Report Sections1251261. **Header**: Project name, path, score, date1272. **Summary table**: Counts by classification (Adopt / Keep / Conflict / Drop)1283. **Per-item detail**: Grouped by semantic block, showing classification + what/why1294. **Auxiliaries**: main.tex and .latexmkrc checks1305. **Recommendations**: Prioritised list of suggested actions131132If `--apply` is not set, end with:133```134Run `/latex-template <path> --apply` to interactively apply changes.135```136137---138139### Phase 6: Apply (--apply mode only)140141Apply changes in dependency order to avoid compilation breakage:1421431. **Package options** (e.g., add `dvipsnames` to xcolor)1442. **Missing packages** (insert in correct position relative to existing packages)1453. **Hyperref configuration** (update `\hypersetup{}` block)1464. **Bibliography changes** (only if user approves — always `AskUserQuestion` for system changes)1475. **Custom commands** (append after existing commands section)1486. **Theorem environments** (append after existing theorem section)1497. **`.latexmkrc`** (create or update)1508. **Cleanup** (remove duplicates, drop redundancies)151152#### Apply Rules153154- **Show a summary first.** Before making any edits, present the full list of changes to be applied (Adopt + Drop items) and ask for confirmation.155- **Conflicts are always individual.** Each Conflict item gets its own `AskUserQuestion` with the template version, project version, and context.156- **Keep items are never touched.** They appear in the report but are skipped during apply.157- **Preserve comments and whitespace.** When inserting packages, match the project's existing formatting style (e.g., if packages are grouped with comment headers, add to the right group).158- **Log what was changed.** After applying, list every edit made.159160---161162### Phase 7: Verify (--apply mode only)163164After applying changes:1651661. **Compile with `/latex`.** This handles any secondary issues the changes might introduce.1672. **Report the result:**168 - If compilation succeeds: report success + number of changes applied169 - If compilation fails: report the error, suggest reverting specific changes, and note which change likely caused the issue170171---172173## What This Skill Does NOT Do174175- **Does not rewrite `main.tex` structure.** Only checks `\input{settings}` and bibliography commands.176- **Does not check content quality.** Use `/proofread` for that.177- **Does not manage `.bib` files.** Use `/bib-validate` for bibliography key issues.178- **Does not handle journal-specific formatting.** Use `/retarget-journal` for that.179- **Does not compare across projects.** Checks one project at a time against the template.180181---182183## Examples184185### Report only (default)186187> "/latex-template ~/papers/costly-voice"188189Produces a compliance report without making any changes.190191### Apply mode192193> "/latex-template ~/papers/costly-voice --apply"194195Produces the report, then interactively applies Adopt and Drop changes with user confirmation.196197### Current directory198199> "Check my template compliance"200201Runs on the current working directory in report-only mode.202203### After template update204205> "I updated the template — check all my papers"206207Run on each project individually. This skill checks one project at a time.208209---210211## Cross-References212213- **`templates/latex-wp/your-template.sty`** + **`your-bib-template.sty`** — the canonical template this skill compares against214- **`/latex`** — used in Phase 7 to verify compilation after applying changes215- **`/audit-project-research`** — complementary: checks directory structure, this checks LaTeX preamble216- **`/bib-validate`** — complementary: checks citation keys, this checks bibliography system config217- **`/init-project-research`** — creates projects from the template; this skill verifies ongoing compliance218- **`/retarget-journal`** — handles journal-specific formatting (different concern)