/paper-compile
SkillDocs & knowledgeLaTeX compile → PDF — latexmk compile + auto-fix + page count/anonymity/font/[UNCONFIRMED] checks + submission checklist
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the /paper-compile skill
What this skill tells your AI
The instructions your AI receives, as published by skyllwt/autosci in .claude/skills/paper-compile/SKILL.md and read by ahel’s review.
Compile a LaTeX paper to PDF, auto-fix common errors, and verify submission requirements. Input: the paper/ directory generated by /paper-draft. Run latexmk compilation, parse errors and attempt auto-fix (missing packages, undefined references, figure paths). Verify page limit, anonymous compliance, font embedding, and clearance of [UNCONFIRMED] markers. Generate a submission checklist.
Inputs
paper_dir(optional, defaultpaper/): LaTeX project directory containingmain.tex--fix(optional): enable auto-fix mode (automatically install missing packages, correct paths)--checklist(optional): generate a detailed submission checklist (check only, no compilation)
Outputs
paper/main.pdf— compiled PDF- COMPILE_REPORT (printed to terminal) — compilation status, check results, submission checklist
- If
--fix: modified .tex files (auto-fixed)
Wiki Interaction
Reads
wiki/outputs/paper-plan-*.md— retrieve venue information (page limit, anonymity requirements).claude/skills/shared-references/citation-verification.md— [UNCONFIRMED] marker check rules
Writes
paper/main.pdf— compilation outputwiki/log.md— appended compilation log
Graph edges created
- None
Workflow
Precondition: confirm paper/main.tex exists. Confirm latexmk is installed (which latexmk).
Step 1: Compile
-
First compilation:
cd paper/ && latexmk -pdf -interaction=nonstopmode main.tex 2>&1 -
Parse compilation output:
- Collect all errors (
! ...) - Collect all warnings (
Warning:/Overfull/Underfull) - Classify:
- Missing package:
! LaTeX Error: File 'xxx.sty' not found - Undefined reference:
LaTeX Warning: Reference 'xxx' on page N undefined - Undefined citation:
LaTeX Warning: Citation 'xxx' on page N undefined - Missing figure:
! LaTeX Error: File 'figures/xxx' not found - Syntax error: other errors beginning with
! - Overfull/Underfull: typesetting warnings (non-blocking)
- Missing package:
- Collect all errors (
-
If compilation succeeds (main.pdf generated): proceed to Step 3
-
If compilation fails: proceed to Step 2
Step 2: Auto-Fix
If --fix is enabled, attempt to auto-fix each error type:
2a. Missing package:
# check if the package is installable via TeX Live
tlmgr info {package-name} 2>/dev/null
# if installable and user confirms:
tlmgr install {package-name}
If not installable: comment out the \usepackage{xxx} line and annotate % TODO: install package {xxx}
2b. Undefined reference/citation:
- Undefined reference: check if the corresponding
\label{}exists; if not, add a placeholder label - Undefined citation: check if
references.bibcontains the key- If not: attempt to match from wiki papers and add an [UNCONFIRMED] entry
- If present but bibtex has not run: re-run
latexmk(latexmk usually handles this automatically)
2c. Missing figure:
- Check if
paper/figures/contains a file with a different extension (.pdf vs .png vs .eps) - If found: correct the
\includegraphicspath - If not found: replace with placeholder
\missingfigure{xxx}(requirestodonotespackage)
2d. Syntax error:
- Common fixes: unclosed
{}, mismatched\begin{}/\end{}, illegal characters - Attempt to locate the error line number; provide specific fix suggestions
- If auto-fix is not possible: report error location and suggestions
Re-compile after fixes (up to 3 fix-compile cycles):
cd paper/ && latexmk -pdf -interaction=nonstopmode main.tex 2>&1
Step 3: Verification Checks
After successful compilation, run the following checks:
3a. Page count check:
# get PDF page count
python3 -c "
import subprocess
result = subprocess.run(['pdfinfo', 'paper/main.pdf'], capture_output=True, text=True)
for line in result.stdout.splitlines():
if line.startswith('Pages:'):
print(line.split(':')[1].strip())
"
Compare against the venue page limit (retrieved from the PAPER_PLAN venue or the venue table in academic-writing.md).
- Exceeds limit: report number of pages over limit; suggest compressing or moving content to appendix
- Under limit: report remaining space; suggest adding content
3b. Anonymity check: Scan all .tex files:
- Search for author names (if
\author{}is non-empty → warn) - Search for institution names (university, lab, institute → warn)
- Search for GitHub/GitLab links (may reveal identity → warn)
- Search for "our previous work" / "we previously" → should use third-person citation
- Search for
\thanks{}/\acknowledgments→ remove for anonymous submission
3c. [UNCONFIRMED] marker check:
# scan references.bib and all .tex files
grep -rn "VERIFY" paper/
- If [UNCONFIRMED] markers exist: list each one; flag as submission blocker
- Per citation-verification.md: [UNCONFIRMED] is a hard submission blocker
3d. Font embedding check:
pdffonts paper/main.pdf
- Check the "emb" column: all fonts should be "yes"
- Unembedded fonts: report font names; suggest adding font embedding to compile options
3e. Content completeness check:
- Search for
TODO,FIXME,XXXmarkers - Search for
\missingfigure, empty sections (\section{X}followed by no content) - Search for unreferenced figures/tables (
\includegraphicspresent but no\ref) - Check that the abstract exists and is non-empty
Step 4: Generate Submission Checklist and Report
# Compile Report
## Compilation
- Status: {SUCCESS / FAILED}
- Compiler: latexmk + pdflatex
- Rounds: {N} (including auto-fix rounds)
- Errors: {N} (fixed: {M}, remaining: {K})
- Warnings: {N} (overfull: {O}, underfull: {U}, other: {W})
## Verification Results
| Check | Status | Details |
|-------|--------|---------|
| Page count | {PASS/FAIL} | {N} pages (limit: {L}) |
| Anonymous | {PASS/WARN} | {details} |
| [UNCONFIRMED] citations | {PASS/FAIL} | {N} remaining |
| Fonts embedded | {PASS/FAIL} | {details} |
| No TODOs | {PASS/WARN} | {N} remaining |
| Figures referenced | {PASS/WARN} | {details} |
| Abstract present | {PASS/FAIL} | {details} |
## Submission Checklist
- [ ] PDF compiles without errors
- [ ] Page count within venue limit ({L} pages)
- [ ] All [UNCONFIRMED] citations resolved
- [ ] Anonymous submission (no author info)
- [ ] All fonts embedded
- [ ] No TODO/FIXME markers
- [ ] All figures referenced in text
- [ ] Abstract present and complete
- [ ] Supplementary material prepared (if applicable)
- [ ] Paper title matches submission system
## Blocking Issues
{list of FAIL items that must be resolved before submission}
## Warnings (non-blocking)
{list of WARN items for consideration}
## Next Steps
- {specific actions to resolve blocking issues}
- Run `/refine paper/main.tex --focus writing` for final polish
- Manual review of anonymous compliance
Append log:
python3 tools/research_wiki.py log wiki/ \
"paper-compile | {SUCCESS/FAILED} | {pages} pages, {errors} errors, {verify_count} [UNCONFIRMED], {checks_passed}/{checks_total} checks passed"
Constraints
- Do not modify wiki content: only operate on the paper/ directory and wiki/log.md
- Auto-fix requires --fix: by default, only report errors; do not fix
- [UNCONFIRMED] is a hard blocker: [UNCONFIRMED] present in submission checklist = not submittable
- Maximum 3 fix-compile rounds: prevent infinite fix loops
- Do not delete user content: auto-fix only adds or corrects; does not delete hand-written content
- pdfinfo/pdffonts dependency: if not installed, skip the corresponding check and annotate "tool not available"
- Anonymity check is heuristic: may produce false positives; annotate as WARN rather than FAIL
Error Handling
- main.tex not found: error; suggest running /paper-draft first
- latexmk not installed: error; provide installation command (
sudo apt install texlive-fullorbrew install --cask mactex) - Compilation failed and auto-fix unsuccessful: output full error log + locate specific .tex file and line number
- pdfinfo/pdffonts not installed: skip page count / font checks; annotate in report
- PAPER_PLAN not found: skip venue info extraction; use default limit (10 pages); warn user
- Permission issue (tlmgr requires sudo): report list of packages requiring manual installation
Dependencies
Tools(via Bash)
latexmk— LaTeX compilationpdfinfo— PDF page count check (poppler-utils)pdffonts— font embedding check (poppler-utils)python3 tools/research_wiki.py log wiki/ "<message>"— append log
MCP Servers
- None
Claude Code Native
Read— read .tex files and compilation logsEdit— auto-fix .tex files (--fix mode)Bash— execute compilation and check commandsGrep— search for [UNCONFIRMED], TODO, anonymity violations
Shared References
.claude/skills/shared-references/citation-verification.md— [UNCONFIRMED] marker check rules.claude/skills/shared-references/academic-writing.md— venue page limit reference
Called by
/researchStage 5 (paper compilation stage)- Manual user invocation
Signals
- GitHub stars
- 2k
- Forks
- 210
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
paper-compile-skyllwt- Source
- github.com/skyllwt/autosci