paper-slides
Generate conference presentation slides (beamer LaTeX → PDF + editable PPTX) from a compiled paper, with speaker notes and full talk script. Use when user says "做PPT", "做幻灯片", "make slides", "conference talk", "presentation slides", "生成slides", "写演讲稿", or wants beamer slides for a conference talk.
By wanshuiyin · 420 installs
npx skills add wanshuiyin/auto-claude-code-research-in-sleep --skill paper-slides
Source repository · Upstream listing
Paper Slides: From Paper to Conference Talk
Generate conference presentation slides from: $ARGUMENTS
Context
This skill runs after Workflow 3 ( /paper writing ). It takes a compiled paper and generates a presentation slide deck for conference oral talks, spotlight presentations, or poster lightning talks.
Unlike posters (single page, visual first), slides tell a temporal story : each slide builds on the previous one, with progressive revelation of the research narrative. A good talk makes the audience understand why this matters before showing what was done .
Constants
VENUE = NeurIPS — Target venue, determines color scheme. Supported: NeurIPS , ICML , ICLR , AAAI , ACL , EMNLP , CVPR , ECCV , GENERIC . Override via argument.
TALK TYPE = spotlight — Talk format. Options: oral (15 20 min), spotlight (5 8 min), poster talk (3 5 min), invited (30 45 min). Determines slide count and content depth.
TALK MINUTES = 15 — Talk duration in minutes. Auto adjusts slide count (~1 slide/minute for oral, ~1.5 slides/minute for spotlight). Override explicitly if needed.
ASPECT RATIO = 16:9 — Slide aspect ratio. Options: 16:9 (default, modern projectors), 4:3 (legacy).
SPEAKER NOTES = true — Generate \note{} blocks in beamer and corresponding PPTX notes. Set false for clean slides without notes.
PAPER DIR = paper/ — Directory containing the compiled paper.
OUTPUT DIR = slides/ — Output directory for all slide files.
REVIEWER MODEL = gpt 6 astra — Model used via Codex MCP for slide review.
AUTO PROCEED = false — At each checkpoint, always wait for explicit user confirmation .
COMPILER = latexmk — LaTeX build tool.
ENGINE = pdflatex — LaTeX engine. Use xelatex for CJK text.
💡 Override: /paper slides "paper/" — talk type: oral, venue: ICML, minutes: 20, aspect: 4:3
Optional: Style reference ( — style ref: <source , opt in)
Lets the user steer the talk's structural rhythm (story beats, theorem density, figure density inherited from the source paper) toward a reference paper. Default OFF — when the user does not pass — style ref , do nothing differently from before.
Only when — style ref: <source appears in $ARGUMENTS , run the helper FIRST:
Sources accepted: local TeX dir / file, local PDF, arXiv id, http(s) URL. Overleaf URLs/IDs are rejected — clone via /overleaf sync setup <id first and pass the local clone path.
Strict rules (full contract in tools/extract paper style.py docstring):
Use style profile.md to align section budget tendency and theorem environment density. Talk type slide count above still takes precedence.
Never copy speaker note prose, slide titles, or examples from anything reachable through the cache. The talk content is from the user's paper, not the reference.
Never pass — style ref (or the cache contents) to the GPT 6 Astra reviewer sub agent — the reviewer must judge the talk's clarity on its own merits.
Talk Type → Slide Count
Talk Type Duration Slides Content Depth
: :
poster talk 3 5 min 5 8 Problem + 1 method slide + 1 result + conclusion
spotlight 5 8 min 8 12 Problem + 2 method + 2 results + conclusion
oral 15 20 min 15 22 Full story with motivation, method detail, experiments, analysis
invited 30 45 min 25 40 Comprehensive: background, related work, deep method, extensive results, discussion
Venue Color Schemes
Same as /paper poster html :
Venue Primary Accent Background Text
NeurIPS 8B5CF6 2563EB FFFFFF 1E1E1E
ICML DC2626 1D4ED8 FFFFFF 1E1E1E
ICLR 059669 0284C7 FFFFFF 1E1E1E
CVPR 2563EB 7C3AED FFFFFF 1E1E1E
GENERIC 334155 2563EB FFFFFF 1E1E1E
State Persistence (Compact Recovery)
Persist state to slides/SLIDES STATE.json after each phase:
On startup : if SLIDES STATE.json exists with "status": "in progress" and within 24h → resume. Otherwise → fresh start.
Workflow
Phase 0: Input Validation & Setup
1. Check prerequisites :
2. Verify paper exists :
3. Backup existing slides : if slides/ exists, copy to slides backup {timestamp}/
4. Create output directory : mkdir p slides/figures
5. Detect CJK : if paper contains Chinese/Japanese/Korean, set ENGINE to xelatex
6. Determine slide count : from TALK TYPE and TALK MINUTES using the table above
7. Check for resume : read slides/SLIDES STATE.json if it exists
State : Write SLIDES STATE.json with phase: 0 .
Phase 1: Content Extraction & Slide Outline
Read paper/sections/ .tex and build a slide by slide outline.
Slide template by talk type :
Oral (15 22 slides)
Slide Purpose Content Source Figure?
: : : :
1 Title Paper metadata No
2 Outline Section headers No
3 4 Motivation & Problem Introduction Optional
5 Key Insight Introduction (contribution) No
6 9 Method Method section Yes (hero figure)
10 14 Results Experiments Yes (per slide)
15 16 Analysis / Ablations Experiments Yes
17 Limitations Conclusion No
18 Conclusion / Takeaway Conclusion No
19 Thank You + QR — QR code
Spotlight (8 12 slides)
Slide Purpose Content Source Figure?
: : : :
1 Title Paper metadata No
2 3 Problem + Why It Matters Introduction Optional
4 Key Insight Contribution No
5 6 Method Method (condensed) Yes (hero)
7 9 Results Key results only Yes
10 Takeaway Conclusion No
11 Thank You + QR — QR code
Poster talk (5 8 slides)
Slide Purpose Content Source Figure?
: : : :
1 Title Paper metadata No
2 Problem Introduction (1 slide) No
3 Method Method (1 slide) Yes
4 5 Results Key result only Yes
6 Takeaway + QR Conclusion QR
For each slide, specify :
Title (max 8 words)
3 5 bullet points (max 8 words each)
Figure reference (if any) from paper/figures/
Speaker note (2 3 sentences of what to say)
Time allocation (in seconds)
Output : slides/SLIDE OUTLINE.md
🚦 Checkpoint:
⛔ STOP HERE and wait for user response. This is the most critical checkpoint — the outline determines the entire talk flow.
Options:
"go" → proceed to Phase 2
adjustments (e.g., "merge slides 3 4", "add a demo slide", "cut the ablation") → revise
"stop" → save to slides/SLIDE OUTLINE.md
State : Write SLIDES STATE.json with phase: 1 .
Phase 2: Slide by Slide Content Drafting
For each slide in the outline, draft the actual content.
Presentation rules (enforced strictly) :
Rule Rationale
One message per slide If a slide has two ideas, split it
Max 6 lines per slide More than 6 lines = wall of text
Max 8 words per line Audience reads, not listens, if text is long
Sentence fragments, not sentences "Improves F1 by 3.2%" not "Our method improves the F1 score by 3.2 percentage points"
Figure slides: figure ≥60% area The figure IS the content; bullets are annotations
Bold key numbers "Achieves 94.3% accuracy"
Progressive disclosure Use \pause or \onslide for complex slides
No Related Work slide Unless invited talk (30+ min)
For each slide, produce :
1. \frametitle{}
2. Content (itemize or figure + caption)
3. \note{} with speaker text (if SPEAKER NOTES=true)
Phase 3: Generate Slides LaTeX
Create slides/main.tex using beamer.
Template structure :
Symlink figures :
Key formatting rules :
Title font: ≥28pt, venue primary color
Body font: ≥20pt
Footnotes: ≥14pt
No navigation symbols
Frame numbers in bottom right
Clean white background (no gradients, no decorative elements)
Phase 4: Compile Slides
Error handling loop (max 3 attempts):
1. Parse error log
2. Fix: missing package, undefined command, file not found, overfull boxes
3. Recompile
Verification :
If page count differs significantly from outline ( 2 slides off), investigate.
State : Write SLIDES STATE.json with phase: 4 .
Phase 5: Codex MCP Review
Send the slide outline + selected LaTeX frames to GPT 6 Astra xhigh:
Apply fixes. Recompile if LaTeX was changed.
⚠️ If mcp codex codex is not available (no OpenAI API key), skip external review and proceed to Phase 6. Note the skip in SLIDES STATE.json .
Save review to slides/SLIDES REVIEW.md .
State : Write SLIDES STATE.json with phase: 5 .
Phase 6: Speaker Notes
For each slide, ensure a \note{} block exists with:
1. What to say (2 3 complete sentences, conversational tone)
2. Timing hint (e.g., "spend 1 minute here", "quick — 20 seconds")
3. Transition phrase to the next slide (e.g., "So how do we actually implement this? Let me show you...")
Also generate slides/speaker notes.md as a standalone backup:
State : Write SLIDES STATE.json with phase: 6 .
Phase 7: PowerPoint Export
Generate an editable PPTX using python pptx :
Write slides/generate pptx.py that:
1. Creates a PPTX with correct aspect ratio (16:9 → 13.33" x 7.5"; 4:3 → 10" x 7.5")
2. For each beamer frame:
Creates a slide with matching layout
Title in venue primary color, bold
Bullet points with venue accent color markers
Figures embedded as images (from slides/figures/)
Speaker notes transferred to PPTX notes field
3. Title slide with special formatting (centered, larger title)
4. Thank You slide with centered text
5. Applies venue color scheme throughout
⚠️ If python pptx is not installed, skip with a note: "Install pip install python pptx to enable PowerPoint export."
State : Write SLIDES STATE.json with phase: 7 .
Phase 8: Full Talk Script
Generate slides/TALK SCRIPT.md — a complete, word for word script for the talk.
This is different from speaker notes (brief reminders). The talk script is a full manuscript that can be read aloud or used for practice.
Final Output Summary
State : Write SLIDES STATE.json with phase: 8, status: "completed" .
Recommended Follow up: /slides polish
After this skill produces the initial Beamer + PPTX, the typical drift is
typography proportion + per slide layout , not content. Run
/slides polish as a focused post generation polish phase: it does
per page Codex review against a reference visual (e.g., a prior academic
talk), bumps PPTX fonts to projector readable sizes, fixes text frame
overflow, and applies a fix pattern catalog (italic style leaks, em dash
spacing, image aspect ratio, Chinese font hints, anonymity placeholders).
/slides polish is read only on content (no claim / number / citation
edits) and preserves speaker notes verbatim. Invocation:
Skip it for short decks (< 5 slides) or when a complete redesign is
needed (re run /paper slides instead).
Key Rules
Large file handling : If the Write tool fails due to file size, immediately retry using Bash ( cat << 'EOF' file ) to write in chunks. Do NOT ask the user for permission — just do it silently.
One message per slide. If a slide has two ideas, split it into two slides.
Do NOT fabricate data. All numbers must come from paper/sections/ .tex .
Bullet points only — never full sentences on slides. Sentence fragments are fine.
Figure slides: figure ≥60% of slide area. The figure IS the content.
Progressive disclosure : Use \pause or \onslide for complex method slides.
De AI polish : Remove watch words from all slide text and talk script.
Do NOT hallucinate citations. Reference only papers cited in the paper.
Opening hook matters : Never start with "In this paper, we..." — start with the problem or a provocative question.
Font size minimums : Title ≥28pt, body ≥20pt, footnotes ≥14pt.
Feishu notifications are optional. If ~/.claude/fei