Write publication-ready LaTeX research papers with citation integrity. Use this skill when: - Writing a research manuscript from notes/results/figures - Creating LaTeX documents for Nature, Science, IEEE, ACM, APS, ACS, Elsevier journals - Ensuring citation keys match bibliography entries - Building and packaging papers for submission Key features: - Template-pluggable system (8+ publisher templates) - Citation integrity gate (prevents invented bib keys) - Asset audit (catches missing figures) - Build automation via latexmk - Submission packaging (flattening, zip)
This skill inherits all available tools. When active, it can use any tool Claude has access to.
assets/templates/acm-journal/bst/ACM-Reference-Format.bstassets/templates/acm-journal/latexmkrcassets/templates/acm-journal/manifest.ymlassets/templates/acm-journal/tex/main.tex.templateassets/templates/acm-sigconf/bst/ACM-Reference-Format.bstassets/templates/acm-sigconf/latexmkrcassets/templates/acm-sigconf/manifest.ymlassets/templates/acm-sigconf/tex/main.tex.templateassets/templates/acs-journal/latexmkrcassets/templates/acs-journal/manifest.ymlassets/templates/acs-journal/tex/main.tex.templateassets/templates/aps-prb/latexmkrcassets/templates/aps-prb/manifest.ymlassets/templates/aps-prb/tex/main.tex.templateassets/templates/elsevier-num/bst/elsarticle-num.bstassets/templates/elsevier-num/latexmkrcassets/templates/elsevier-num/manifest.ymlassets/templates/elsevier-num/tex/main.tex.templateassets/templates/ieee-conference/bst/IEEEtran.bstassets/templates/ieee-conference/latexmkrcWrite publication-ready LaTeX research papers with automated citation checking, asset validation, and submission packaging.
This skill guides the complete manuscript workflow:
| Phase | Action | Gate |
|---|---|---|
| A | Plan paper structure | - |
| B | Draft/update LaTeX | - |
| C | Check citations | Citation Integrity Gate |
| D | Check assets | Asset Audit Gate |
| E | Build PDF | - |
| F | Package submission | - |
skills/latex-manuscript/scripts/
├── init_project.py # Initialize project with template
├── index_bib.py # Extract valid citation keys
├── check_citations.py # Validate cite commands
├── check_assets.py # Verify figures/files exist
├── build.py # Compile LaTeX (latexmk preferred)
├── flatten.py # Expand \input/\include
└── package_submission.py # Create submission zip
python skills/latex-manuscript/scripts/init_project.py \
--template springer-nature-sn \
--output ./manuscript
This creates:
paper_project.yml - project configurationmain.tex - from templatereferences.bib - empty bibliographyfigures/ - directory for figuresEdit main.tex following the template structure. Claude will:
references.bibfigures/python skills/latex-manuscript/scripts/build.py --project ./manuscript
| Template ID | Publisher | Class | Source |
|---|---|---|---|
springer-nature-sn | Springer Nature | sn-jnl.cls | CTAN |
ieee-conference | IEEE Conference | IEEEtran.cls | CTAN |
ieee-journal | IEEE Journal | IEEEtran.cls | CTAN |
acm-sigconf | ACM SIGCONF | acmart.cls | CTAN |
acm-journal | ACM Journal | acmart.cls | CTAN |
elsevier-num | Elsevier | elsarticle.cls | CTAN |
aps-prb | APS (Phys Rev) | revtex4-2.cls | CTAN |
acs-journal | ACS Chemistry | achemso.cls | CTAN |
ieee-conference - Two-column format for proceedingsieee-journal - Two-column format for Transactionsacm-sigconf - Most common ACM conference formatacm-journal - For JACM, TODS, etc.elsevier-num - Numerical citation styleaps-prb - Physical Review B (change prb to prl, pra, etc.)acs-journal - For JACS, Nano Letters, etc.Each template in assets/templates/<id>/ contains:
├── manifest.yml # Build rules, requirements
├── cls/ # Document class files (optional if in TeXLive)
├── bst/ # Bibliography style files
├── tex/main.tex.template # Starter template
└── latexmkrc # Build configuration
python skills/latex-manuscript/scripts/init_project.py \
--template ieee-conference \
--output ./my-paper
Or manually edit paper_project.yml:
template_id: ieee-conference
main_tex: main.tex
bib_files: ["references.bib"]
figures_dir: figures
mode: draft # or: submission
Before writing, create or update paperplan.json:
{
"title": "Paper Title",
"sections": [
{"id": "abstract", "claims": ["Main claim 1"]},
{"id": "introduction", "claims": ["Background", "Gap", "Contribution"]},
{"id": "methods", "claims": ["Approach description"]},
{"id": "results", "claims": ["Finding 1", "Finding 2"]},
{"id": "discussion", "claims": ["Implications", "Limitations"]},
{"id": "conclusion", "claims": ["Summary"]}
],
"figures": [
{"id": "fig1", "file": "figures/fig1.png", "caption": "..."}
],
"key_citations": ["smith2021", "jones2022"]
}
Write/update main.tex:
HARD RULE: Never generate \cite{KEY} unless KEY exists in references.bib
Before building, run:
# Index valid keys
python skills/latex-manuscript/scripts/index_bib.py --project ./manuscript
# Check all citations
python skills/latex-manuscript/scripts/check_citations.py --project ./manuscript
If citations fail:
references.bib\cite{TODO:description} for unfound refspython skills/latex-manuscript/scripts/check_assets.py --project ./manuscript
This verifies:
\includegraphics{...} files exist.cls, .bst) are presentpython skills/latex-manuscript/scripts/build.py --project ./manuscript
The build script:
latexmk (handles multi-pass automatically)When ready to submit:
# Set mode to submission
# Edit paper_project.yml: mode: submission
# Flatten to single .tex (if required by journal)
python skills/latex-manuscript/scripts/flatten.py --project ./manuscript
# Create submission package
python skills/latex-manuscript/scripts/package_submission.py --project ./manuscript
Output: build/submission.zip with all required files.
AI can hallucinate citation keys that don't exist. This causes:
Index Phase: index_bib.py extracts all valid keys from .bib files:
{"keys": ["smith2021", "jones2022"], "sources": ["references.bib"]}
Check Phase: check_citations.py parses LaTeX for cite commands:
\cite{}, \citep{}, \citet{}, \autocite{}, etc.\cite{a,b,c}Enforcement:
Only these count as valid:
references.bib (or configured .bib files).bbl file (if pre-generated)When a citation is needed but not yet in bib:
\cite{TODO:smith-deep-learning} % Will fail check - intentional
This makes missing refs explicit and prevents accidental submission.
\includegraphics{path} must resolve.bib file must existbuild/asset_report.md
✓ figures/fig1.png exists
✓ figures/fig2.pdf exists
✗ figures/fig3.png MISSING
✓ sn-jnl.cls exists
✓ references.bib exists
SUMMARY: 1 error, 0 warnings
/Library/TeX/texbinlatexmk automates multi-pass compilation:
latexmk -pdf -interaction=nonstopmode -halt-on-error main.tex
If latexmk unavailable:
pdflatex -interaction=nonstopmode main.tex
bibtex main
pdflatex -interaction=nonstopmode main.tex
pdflatex -interaction=nonstopmode main.tex
Build script checks for:
key undefined" (LaTeX warning)These are surfaced as actionable errors.
template_id: springer-nature-sn
main_tex: main.tex
bib_files:
- references.bib
figures_dir: figures
mode: draft # draft | submission
# Optional overrides
strict_citations: false # fail on missing in draft mode
output_dir: build
my-paper/
├── paper_project.yml # Project config
├── paperplan.json # Paper outline (optional)
├── main.tex # Main document
├── references.bib # Bibliography
├── figures/ # Figure files
│ ├── fig1.png
│ └── fig2.pdf
└── build/ # Generated outputs
├── main.pdf
├── citekeys.json
├── citation_report.json
└── asset_report.md
| File | Content |
|---|---|
references/paperplan_schema.md | Paper plan JSON schema |
references/template_pack_spec.md | Template manifest spec |
references/citation_integrity_spec.md | Citation checking details |
references/asset_audit_spec.md | Asset validation rules |
index_bib.py to refresh key indexcheck_citations.py to find invalid keys\includegraphics{}figures/ directoryInstall via MacTeX's TeX Live Utility or:
sudo tlmgr install latexmk
build/main.log for details# Verify MacTeX installation
which pdflatex # Should show /Library/TeX/texbin/pdflatex
which latexmk # Should show /Library/TeX/texbin/latexmk
No additional Python dependencies required beyond standard library.