This skill is agent-driven. There is no Python app and no runtime that parses templates — the Cursor agent reads template files and applies them when writing Marp markdown.
Users struggle with formatting, not summarization: fonts, title hierarchy, colors, table styling, slide layout. Templates capture those decisions once so every deck looks consistent.
templates/
├── academic/ # default preset
│ ├── template.yaml # structure + formatting rules (agent reads this)
│ ├── theme.css # Marp visual theme (marp-cli reads this)
│ └── pptx.json # fonts/colors for editable PPTX (pptxgenjs reads this)
├── seminar/ # large-type preset for room projection
│ ├── template.yaml
│ └── theme.css
└── _example/ # copy this folder to create a custom template
├── template.yaml
└── theme.css
User-owned templates (optional, checked after built-in presets):
- Project-local:
templates/<name>/inside the repo - Personal:
~/.cursor/skills/paper-to-slides/templates/<name>/
Resolve in this order:
- User explicitly names a template ("seminar 템플릿으로",
--template minimal) - Project file
.paper2slidescontainstemplate: <id>(one line) - Default:
academic
Always read templates/<id>/template.yaml before writing slides. If the id is missing, list available folders under templates/ (skip _example) and ask the user to pick one.
Each template defines three things:
| Section | Purpose |
|---|---|
marp |
Frontmatter values for the deck (theme, size, paginate) |
structure.chapters |
Which slides to create and in what order |
layouts |
Per-slide-type rules (bullets, table, figure, two-column) |
The agent maps paper sections → chapter ids → layout rules → Marp markdown.
| id | Typical paper source | Default layout |
|---|---|---|
title |
Title, authors, venue | lead |
problem |
Introduction, motivation | bullets |
method |
Method, approach | bullets |
how |
Architecture, pipeline, algorithm | two-column or bullets |
results |
Experiments, tables | table or bullets |
limitations |
Discussion, limitations | bullets |
takeaway |
Conclusion | bullets |
For longer decks, duplicate or split chapters (e.g. method-1, method-2) but keep the same layout rules.
<!-- _class: lead -->
<!-- _footer: "https://arxiv.org/abs/XXXX.XXXXX" -->
# {paper title} ({year})
## {authors}
{venue} · {one-line hook}- Use the full paper title with publication year in the
#heading — not a shortened alias. - Put the canonical paper URL in a Marp
_footerdirective (renders as a bottom footnote in HTML and editable PPTX).
#= slide title (from chapterheadingor paper section name)-bullets only; no paragraphs- Respect
max_itemsandmax_words_per_itemfrom template.yaml
- Reproduce the paper's headline comparison table when numbers exist
- Bold the best row if
highlight_best: true - Never invent statistics
<!-- layout: figure -->
# How It Works

*출처: 논문 Figure 2*Extract images: scripts/extract_pdf_figures.sh <pdf> <run>/assets/
Table markdown +  on the same slide — table left, image right in PPTX.
If the PDF figure is not extractable, use caption only — never fabricate what the figure shows.
Use the HTML flex pattern from references/marp-syntax.md — left column for concept, right for diagram/bullets.
Read marp block from template.yaml:
---
marp: true
theme: academic-theme
size: 16:9
paginate: true
---The theme: name must match the @theme line in that template's theme.css.
After writing deck.md, run:
scripts/build_deck.sh deck.md output-basename --template <id> [--pptx] [--editable-pptx]--pptx→ Marp image-based PPTX (not editable in PowerPoint)--editable-pptx→ nativeoutput-basename-editable.pptxwith real text boxes (pptxgenjs +templates/<id>/pptx.json)
build_deck.sh loads templates/<id>/theme.css for HTML. The agent does not hand-edit CSS unless the user asks to customize a template.
- Copy
templates/_example/→templates/my-style/(or~/.cursor/skills/paper-to-slides/templates/my-style/) - Edit
template.yaml— slide count, headings, bullet limits - Edit
theme.css— fonts, colors, table header style (@themename must matchmarp.theme) - Edit
pptx.json— same colors/fonts for editable PowerPoint export (titleFontFace/bodyFontFaceoptional)
Templates can reference fonts already on the machine — no font files in the repo required.
- Note the exact name from Font Book (macOS) or Font settings (Windows), e.g.
S-Core Dream 5 Medium. - Set
theme.css:section { font-family: 'S-Core Dream 4 Regular', ... }andsection h1 { font-family: 'S-Core Dream 5 Medium', ... } - Set
pptx.json:"titleFontFace": "S-Core Dream 5 Medium","bodyFontFace": "S-Core Dream 4 Regular"
HTML and PowerPoint resolve installed fonts by name, not file path. Viewers need the same fonts installed (or add @font-face files for portable HTML).
5. Ask the agent: "my-style 템플릿으로 이 논문 슬라이드 만들어줘"
No code changes required.
- Download PDFs (agent reads uploaded PDFs or URLs directly in Cursor)
- Parse PDF structure programmatically (agent reads and understands the paper)
- Provide native editable PowerPoint (Marp PPTX is image-based; mention this if user asks for .pptx)