Paper Write: Section-by-Section LaTeX Generation
Draft a LaTeX paper based on: $ARGUMENTS
Constants
- REVIEWER_MODEL = — Model used via Codex MCP for section review. Must be an OpenAI model.
- TARGET_VENUE = — Default venue. Supported: , , . Determines style file and formatting.
- ANONYMOUS = true — If true, use anonymous author block. Set for camera-ready.
- MAX_PAGES = 9 — Main body page limit. Counts from first page to end of Conclusion section. References and appendix are NOT counted.
- DBLP_BIBTEX = true — Fetch real BibTeX from DBLP/CrossRef instead of LLM-generated entries. Eliminates hallucinated citations. Zero install required. Set to use legacy behavior (LLM search + markers).
Inputs
- PAPER_PLAN.md — outline with claims-evidence matrix, section plan, figure plan (from )
- NARRATIVE_REPORT.md — the research narrative (primary source of content)
- Generated figures — PDF/PNG files in (from )
- LaTeX includes —
figures/latex_includes.tex
(from )
- Bibliography — existing file, or will create one
If no PAPER_PLAN.md exists, ask the user to run
first or provide a brief outline.
Templates
Venue-Specific Setup
The skill includes conference templates in
. Select based on TARGET_VENUE:
ICLR:
latex
\documentclass{article}
\usepackage{iclr2026_conference,times}
% \iclrfinalcopy % Uncomment for camera-ready
NeurIPS:
latex
\documentclass{article}
\usepackage[preprint]{neurips_2025}
% \usepackage[final]{neurips_2025} % Camera-ready
ICML:
latex
\documentclass[accepted]{icml2025}
% Use [accepted] for camera-ready
Project Structure
Generate this file structure:
paper/
├── main.tex # master file (includes sections)
├── iclr2026_conference.sty # or neurips_2025.sty / icml2025.sty
├── math_commands.tex # shared math macros
├── references.bib # bibliography (filtered — only cited entries)
├── sections/
│ ├── 0_abstract.tex
│ ├── 1_introduction.tex
│ ├── 2_related_work.tex
│ ├── 3_method.tex # or preliminaries, setup, etc.
│ ├── 4_experiments.tex
│ ├── 5_conclusion.tex
│ └── A_appendix.tex # proof details, extra experiments
└── figures/ # symlink or copy from project figures/
Section files are FLEXIBLE: If the paper plan has 6-8 sections, create corresponding files (e.g.,
,
,
,
).
Workflow
Step 0: Backup and Clean
If
already exists, back up to
paper-backup-{timestamp}/
before overwriting. Never silently destroy existing work.
CRITICAL: Clean stale files. When changing section structure (e.g., 5 sections → 7 sections), delete section files that are no longer referenced by
. Stale files (e.g., old
left behind when conclusion moved to
) cause confusion and waste space.
Step 1: Initialize Project
- Create directory
- Copy venue template from — the template already includes:
- All standard packages (amsmath, hyperref, cleveref, booktabs, etc.)
- Theorem environments with fix
- Anonymous author block
- Generate with paper-specific notation
- Create section files matching PAPER_PLAN structure
Author block (anonymous mode):
latex
\author{Anonymous Authors}
Step 2: Generate math_commands.tex
Create shared math macros based on the paper's notation:
latex
% math_commands.tex — shared notation
\newcommand{\R}{\mathbb{R}}
\newcommand{\E}{\mathbb{E}}
\DeclareMathOperator*{\argmin}{arg\,min}
\DeclareMathOperator*{\argmax}{arg\,max}
% Add paper-specific notation here
Step 3: Write Each Section
Process sections in order. For each section:
- Read the plan — what claims, evidence, citations belong here
- Read NARRATIVE_REPORT.md — extract relevant content, findings, and quantitative results
- Draft content — write complete LaTeX (not placeholders)
- Insert figures/tables — use snippets from
figures/latex_includes.tex
- Add citations — use / (all three venues use )
Section-Specific Guidelines
§0 Abstract:
- Must be self-contained (understandable without reading the paper)
- Structure: problem → approach → key result → implication
- Include one concrete quantitative result
- 150-250 words (check venue limit)
- No citations, no undefined acronyms
- No — that's in main.tex
§1 Introduction:
- Open with a compelling hook (1-2 sentences, problem motivation)
- State the gap clearly ("However, ...")
- List contributions as a numbered or bulleted list
- End with a brief roadmap ("The rest of this paper is organized as...")
- Include the main result figure if space allows
- Target: 1.5 pages
§2 Related Work:
- MINIMUM 1 full page (3-4 substantive paragraphs). Short related work sections are a common reviewer complaint.
- Organize by category using
\paragraph{Category Name.}
- Each category: 1 paragraph summarizing the line of work + 1-2 sentences positioning this paper
- Do NOT just list papers — synthesize and compare
- End each paragraph with how this paper relates/differs
§3 Method / Preliminaries / Setup:
- Define notation early (reference math_commands.tex)
- Use , environments for formal statements
- For theory papers: include proof sketches of key results in main body, full proofs in appendix
- For theory papers: include a comparison table of prior bounds vs. this paper
- Include algorithm pseudocode if applicable ( or )
- Target: 1.5-2 pages
§4 Experiments:
- Start with experimental setup (datasets, baselines, metrics, implementation details)
- Main results table/figure first
- Then ablations and analysis
- Every claim from the introduction must have supporting evidence here
- Target: 2.5-3 pages
§5 Conclusion:
- Summarize contributions (NOT copy-paste from intro — rephrase)
- Limitations (be honest — reviewers appreciate this)
- Future work (1-2 concrete directions)
- Ethics statement and reproducibility statement (if venue requires)
- Target: 0.5 pages
Appendix:
- Proof details (full proofs of main-body theorems)
- Additional experiments, ablations
- Implementation details, hyperparameter tables
- Additional visualizations
Step 4: Build Bibliography
CRITICAL: Only include entries that are actually cited in the paper.
- Scan all and references in the drafted sections
- Build a citation key list
- For each citation key:
- Check existing files in the project/narrative docs
- If not found and DBLP_BIBTEX = true, use the verified fetch chain below
- If not found and DBLP_BIBTEX = false, search arXiv/Scholar for correct BibTeX
- NEVER fabricate BibTeX entries — mark unknown ones with comment
- Write containing ONLY cited entries (no bloat)
Verified BibTeX Fetch (when DBLP_BIBTEX = true)
Three-step fallback chain — zero install, zero auth, all real BibTeX:
Step A: DBLP (best quality — full venue, pages, editors)
bash
# 1. Search by title + first author
curl -s "https://dblp.org/search/publ/api?q=TITLE+AUTHOR&format=json&h=3"
# 2. Extract DBLP key from result (e.g., conf/nips/VaswaniSPUJGKP17)
# 3. Fetch real BibTeX
curl -s "https://dblp.org/rec/{key}.bib"
Step B: CrossRef DOI (fallback — works for arXiv preprints)
bash
# If paper has a DOI or arXiv ID (arXiv DOI = 10.48550/arXiv.{id})
curl -sLH "Accept: application/x-bibtex" "https://doi.org/{doi}"
Step C: Mark (last resort)
If both DBLP and CrossRef return nothing, mark the entry with
comment. Do NOT fabricate.
Why this matters: LLM-generated BibTeX frequently hallucinates venue names, page numbers, or even co-authors. DBLP and CrossRef return publisher-verified metadata. Upstream skills (
,
) may mention papers from LLM memory — this fetch chain is the gate that prevents hallucinated citations from entering the final
.
Automated bib cleaning — use this Python pattern to extract only cited entries:
python
import re
# 1. Grep all \citep{...} and \citet{...} from all .tex files
# 2. Extract unique keys (handle multi-cite like \citep{a,b,c})
# 3. Parse the full .bib file, keep only entries whose key is in the cited set
# 4. Write the filtered bib
This prevents bib bloat (e.g., 948 lines → 215 lines in testing).
Citation verification rules (from claude-scholar + Imbad0202):
- Every BibTeX entry must have: author, title, year, venue/journal
- Prefer published venue versions over arXiv preprints (if published)
- Use consistent key format:
{firstauthor}{year}{keyword}
(e.g., )
- Double-check year and venue for every entry
- Remove duplicate entries (same paper with different keys)
Step 5: De-AI Polish (from kgraph57/paper-writer-skill)
After drafting all sections, scan for common AI writing patterns and fix them:
Content patterns to fix:
- Significance inflation ("groundbreaking", "revolutionary" → use measured language)
- Formulaic transitions ("In this section, we..." → remove or vary)
- Generic conclusions ("This work opens exciting new avenues" → be specific)
Language patterns to fix (watch words):
- Replace: delve, pivotal, landscape, tapestry, underscore, noteworthy, intriguingly
- Remove filler: "It is worth noting that", "Importantly,", "Notably,"
- Avoid rule-of-three lists ("X, Y, and Z" appearing repeatedly)
- Don't start consecutive sentences with "This" or "We"
Step 6: Cross-Review with REVIEWER_MODEL
Send the complete draft to GPT-5.4 xhigh:
mcp__codex__codex:
model: gpt-5.4
config: {"model_reasoning_effort": "xhigh"}
prompt: |
Review this [VENUE] paper draft (main body, excluding appendix).
Focus on:
1. Does each claim from the intro have supporting evidence?
2. Is the writing clear, concise, and free of AI-isms?
3. Any logical gaps or unclear explanations?
4. Does it fit within [MAX_PAGES] pages (to end of Conclusion)?
5. Is related work sufficiently comprehensive (≥1 page)?
6. For theory papers: are proof sketches adequate?
7. Are figures/tables clearly described and properly referenced?
For each issue, specify: severity (CRITICAL/MAJOR/MINOR), location, and fix.
[paste full draft text]
Apply CRITICAL and MAJOR fixes. Document MINOR issues for the user.
Step 7: Reverse Outline Test (from Research-Paper-Writing-Skills)
After drafting all sections:
- Extract topic sentences — pull the first sentence of every paragraph
- Read them in sequence — they should form a coherent narrative on their own
- Check claim coverage — every claim from the Claims-Evidence Matrix must appear
- Check evidence mapping — every experiment/figure must support a stated claim
- Fix gaps — if a topic sentence doesn't advance the story, rewrite the paragraph
Step 8: Final Checks
Before declaring done:
Key Rules
-
Large file handling: If the Write tool fails due to file size, immediately retry using Bash (
) to write in chunks. Do NOT ask the user for permission — just do it silently.
-
Do NOT generate author names, emails, or affiliations — use anonymous block or placeholder
-
Write complete sections, not outlines — the output should be compilable LaTeX
-
One file per section — modular structure for easy editing
-
Every claim must cite evidence — cross-reference the Claims-Evidence Matrix
-
Compile-ready — the output should compile with
without errors (modulo missing figures)
-
No over-claiming — use hedging language ("suggests", "indicates") for weak evidence
-
Venue style matters — all three venues (ICLR/NeurIPS/ICML) use
(
/
)
-
Page limit = main body to Conclusion — references and appendix do NOT count
-
Clean bib — references.bib must only contain entries that are actually
d
-
Section count is flexible — match PAPER_PLAN structure, don't force into 5 sections
-
Backup before overwrite — never destroy existing
directory without backing up
Writing Quality Reference
- One message per paragraph — each paragraph makes exactly one point
- Topic sentence first — the first sentence states the paragraph's message
- Explicit transitions — connect paragraphs with logical connectors
- Reverse outline test — extract topic sentences; they should form a coherent narrative
- No AI watch words — delve, pivotal, landscape, tapestry, underscore
- No significance inflation — groundbreaking, revolutionary, paradigm shift
- No formulaic structures — vary sentence openings and transitions
Acknowledgements
Writing methodology adapted from
Research-Paper-Writing-Skills (CCF award-winning methodology). Citation verification from
claude-scholar and
Imbad0202/academic-research-skills. De-AI polish from
kgraph57/paper-writer-skill. Backup mechanism from
baoyu-skills.