Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Write LaTeX ML/AI review articles for arXiv using the IEEEtran template and verified BibTeX citations. Use when writing, planning, or continuing an arXiv review/survey paper, or when validating and repairing citations in an existing LaTeX project.
.claude/skills/appautomaton-arxiv-paper-writer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 13% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 194% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 114% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 171% | 0% |
main.tex (LaTeX source)ref.bib (verified BibTeX entries)IEEEtran.clsplan/<timestamp>-<slug>.md, issues/<timestamp>-<slug>.csvmain.pdfnotes/research-snapshot.md (Gate 0 research snapshot)notes/literature-notes.md (optional per-citation notes)notes/arxiv-registry.sqlite3 (arXiv metadata/BibTeX cache)Conventions: run python3 scripts/... from this skill folder (where scripts/ lives); <paper_dir> is the paper/project root (contains main.tex, ref.bib, plan/, issues/, notes/). Paths like plan/... are under <paper_dir>. Papers are created under --out <workspace_dir> (your working directory, never inside this skill folder); pass the same --out (and --name, if used) to both bootstrap stages. For arXiv discovery/metadata/BibTeX, use scripts/arxiv_registry.py (no ad-hoc curl/wget).
> Tip: Run python3 scripts/<script>.py --help before use. > Open reference files only when a step calls them out.
main.tex until plan approved AND issues CSV exists.Status and Verified_Citations per issue, and add/split/insert issue rows when scope grows (do not do untracked work).assets/template/IEEEtran.cls).Treat two-column width as a layout constraint (use two-column floats when needed).
10-20 key papers (see references/research-workflow.md). After step 4 (once <paper_dir> exists), cache arXiv discovery with arxiv_registry.py search and save the snapshot to notes/research-snapshot.md.
bash python3 scripts/bootstrap_ieee_review_paper.py --stage kickoff --topic "<topic>" --out <workspace_dir> This copies LaTeX templates from assets/template/; plan/issues are generated from templates in assets/. Initialize arXiv registry (once): python3 scripts/arxiv_registry.py --project-dir <paper_dir> init.
main.tex(section headings + 2-4 bullets per section + seed citations; no prose).
python3 scripts/compile_paper.py --project-dir <paper_dir>Fix any Overfull \hbox warnings (see Layout Hygiene below).
references/visual-templates.md)- [x] User confirmed scope + outline in chat.bash python3 scripts/bootstrap_ieee_review_paper.py --stage issues --topic "<topic>" --out <workspace_dir> --with-literature-notes
bash python3 scripts/validate_paper_issues.py <paper_dir>/issues/<timestamp>-<slug>.csv
DONE or SKIP (when feasible, in the same run).For each writing issue in the CSV:
W6a, Q5) before proceeding; re-run python3 scripts/validate_paper_issues.py <issues.csv>; keep going until all issues are DONE/SKIP.(see references/writing-style.md). For section intent and structure, use references/template-usage.md.
references/visual-templates.md).Prioritize single-column sizing; use double-column spans only when necessary (see Layout Hygiene). Cite externally sourced figure content.
ref.bib.For arXiv entries, append BibTeX via python3 scripts/arxiv_registry.py --project-dir <paper_dir> export-bibtex <arxiv_id> --out-bib <paper_dir>/ref.bib.
DONE with Verified_Citations count.Overfull \hbox before marking DONE.After all writing issues are DONE, refine prose section-by-section using the latex-rhythm-refiner skill. This step varies sentence/paragraph lengths and removes filler phrases while preserving all citations.
references/quality-report.md).Overfull \hbox warnings in main.log.main.tex, ref.bib, figures, and main.pdf.If a paper folder already exists, do NOT rerun scaffold:
bash# Create plan python3 scripts/create_paper_plan.py --topic "<topic>" --stage plan --output-dir <paper_dir> # STOP for approval, then check kickoff gate box # Create issues (use timestamp/slug from plan filename/frontmatter) python3 scripts/create_paper_plan.py --topic "<topic>" --stage issues --timestamp "<TS>" --slug "<slug>" --output-dir <paper_dir> --with-literature-notes
references/citation-workflow.md.references/bibtex-guide.md for BibTeX rules if entries need repair.ref.bib if requested.Compilation: python3 scripts/compile_paper.py --project-dir <paper_dir> (exit 0, no "Citation undefined" warnings). Use --report-page-counts for main-text page count.
Quality Metrics:
DONE or SKIPref.bib.DONE only when criteria met.Fix Overfull \hbox warnings before marking issues DONE:
figure + \columnwidth; switch to figure* + \textwidth if neededp{...} column widths / \tabcolsep over \resizeboxsplit, multline, aligned, or IEEEeqnarray for line-breaking| Phase | Issues | |-------|--------| | Research | Rx: discovery, scaffolding, framework, viz planning | | Writing | Wx: each section with target citations and visualization | | Refinement | RFx: apply latex-rhythm-refiner skill (after all Wx DONE) | | QA | Qx: citation verification, QA checklist, compilation, final review |
Status: TODO → DOING → DONE, or SKIP with a reason in Notes. Schema validated by validate_paper_issues.py.
Verified_Citations = the number of unique verified cite keys in the issue's section when it is marked DONE (0 for non-writing issues).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 25,369 | 6,530 | -74% | 1 | 1 | 0% | 4,471 | 2,688 | -40% | 0 | 0 | — |
case-02 | fail→fail | 12,730 | 6,182 | -51% | 1 | 1 | 0% | 2,292 | 2,851 | +24% | 0 | 0 | — |
case-03 | fail→fail | 3,250 | 4,634 | +43% | 1 | 1 | 0% | 193 | 2,630 | +1263% | 0 | 0 | — |
case-04 | fail→fail | 31,182 | 10,625 | -66% | 1 | 1 | 0% | 5,321 | 3,003 | -44% | 0 | 0 | — |
case-05 | fail→pass | 17,269 | 5,548 | -68% | 1 | 1 | 0% | 2,933 | 3,321 | +13% | 0 | 0 | — |
case-06 | fail→fail | 35,489 | 10,938 | -69% | 1 | 1 | 0% | 6,187 | 3,409 | -45% | 0 | 0 | — |
case-07 | fail→fail | 31,290 | 8,139 | -74% | 1 | 1 | 0% | 5,839 | 2,918 | -50% | 0 | 0 | — |
case-08 | fail→fail | 13,776 | 5,406 | -61% | 1 | 1 | 0% | 2,565 | 2,630 | +3% | 0 | 0 | — |
case-09 | pass→pass | 14,409 | 9,919 | -31% | 1 | 1 | 0% | 2,353 | 4,042 | +72% | 0 | 0 | — |
case-10 | pass→pass | 10,349 | 6,311 | -39% | 1 | 1 | 0% | 1,818 | 3,468 | +91% | 0 | 0 | — |
case-11 | fail→fail | 10,840 | 5,332 | -51% | 1 | 1 | 0% | 1,903 | 2,637 | +39% | 0 | 0 | — |
case-12 | fail→pass | 5,756 | 3,524 | -39% | 1 | 1 | 0% | 979 | 2,883 | +194% | 0 | 0 | — |
case-13 | fail→pass | 8,570 | 4,660 | -46% | 1 | 1 | 0% | 1,496 | 3,206 | +114% | 0 | 0 | — |
case-14 | fail→fail | 6,596 | 4,946 | -25% | 1 | 1 | 0% | 1,027 | 3,214 | +213% | 0 | 0 | — |
case-15 | fail→pass | 13,218 | 3,703 | -72% | 1 | 1 | 0% | 2,291 | 2,992 | +31% | 0 | 0 | — |
case-16 | pass→pass | 12,342 | 8,926 | -28% | 1 | 1 | 0% | 2,293 | 3,988 | +74% | 0 | 0 | — |
case-17 | fail→pass | 6,744 | 4,902 | -27% | 1 | 1 | 0% | 1,228 | 3,327 | +171% | 0 | 0 | — |
case-18 | fail→pass | 13,822 | 4,899 | -65% | 1 | 1 | 0% | 2,301 | 3,221 | +40% | 0 | 0 | — |
case-19 | pass→pass | 10,312 | 4,128 | -60% | 1 | 1 | 0% | 1,619 | 3,047 | +88% | 0 | 0 | — |
case-20 | pass→pass | 5,834 | 2,449 | -58% | 1 | 1 | 0% | 842 | 2,682 | +219% | 0 | 0 | — |
case-21 | fail→pass | 9,087 | 2,560 | -72% | 1 | 1 | 0% | 1,454 | 2,780 | +91% | 0 | 0 | — |
case-22 | fail→pass | 11,224 | 7,758 | -31% | 1 | 1 | 0% | 1,985 | 3,560 | +79% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 14 counted toward the lift figure. The other 8 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +36 percentage points is the difference between those two pass rates over the 14 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.