Cursor skill — PPTX template + paper PDF → editable slides.
template.pptx + paper.pdf → Cursor chat → deck-editable.pptx
Supports papers in English and Korean.
- Overview
- Installation
- Quick start (3 steps)
- User manual
- Built-in templates
- Create a custom template
- Output format comparison
- Sample test
- Project structure
- Additional docs
- Cursor Marketplace
- FAQ
| Input | Output |
|---|---|
| Paper PDF (or arXiv link) | deck-editable.pptx — directly editable text in PowerPoint |
PPTX template (template.pptx) |
deck.md — slide content source |
| (optional) HTML preview | deck.html — present in the browser |
This is not a Python app. A Cursor agent reads the paper and writes slides following template rules.
git clone https://github.com/dschloe/paper2ppt.git
cp -r paper2ppt ~/.cursor/skills/paper-to-slides
cd ~/.cursor/skills/paper-to-slides && npm installFor HTML preview (optional):
npm install -g @marp-team/marp-cliRestart Cursor or open a new chat — the skill is picked up automatically.
node scripts/import_pptx_template.mjs ~/my-template.pptx --name my-styleSkip this if you only use built-in templates — start with academic.
Make a 7-slide deck from this paper using the my-style template.
Attach a PDF, paste a file path, or paste an arXiv link.
The agent produces deck-editable.pptx. Open it in PowerPoint and edit directly.
If you have a company or school PPT format, register it:
node scripts/import_pptx_template.mjs ~/Downloads/my-format.pptx --name my-styleCreated folder:
templates/my-style/
├── template.pptx # your template (copy)
├── pptx.json # colors & fonts (auto-extracted)
└── template.yaml # slide structure (7 slides by default)
Then ask in chat: using the my-style template ...
To pin a default template for a project, create .paper2slides at the repo root:
template: my-style
English examples
Summarize this PDF as slides using the academic template.
Make a 7-slide deck from this arXiv paper: https://arxiv.org/abs/2412.xxxxx
Korean paper, English slides
Make slides from this Korean paper in English using the academic template.
The agent will:
- Read the paper PDF
- Write
deck.md(title → problem → method → results → limitations → conclusion) - Render
deck-editable.pptx
| File | Description |
|---|---|
deck-editable.pptx |
Main output — editable text and tables in PowerPoint / Keynote |
deck.md |
Slide source — edit and rebuild |
deck.html |
Browser presentation (auto-generated; images copied to output/assets/) |
deck.pptx |
Marp image-based PPTX (--pptx option; not editable) |
To render deck.md the agent wrote:
# Editable PPTX (recommended)
scripts/build_deck.sh path/to/deck.md path/to/output/deck \
--template my-style --editable-pptx
# HTML only
scripts/build_deck.sh path/to/deck.md path/to/output/deck --template academic
# Marp image PPTX (not editable)
scripts/build_deck.sh path/to/deck.md path/to/output/deck --template academic --pptxOutput: output/deck-editable.pptx, output/deck.html, output/assets/ (images for HTML)
| What to change | How |
|---|---|
| Slide content (wording, numbers) | Edit deck.md, or ask Cursor: "Add one line to slide 3 Method" |
| Colors & fonts | Edit templates/<id>/pptx.json (titleFontFace / bodyFontFace), theme.css font-family, or re-import the template pptx |
| Structure (7 → 10 slides) | Edit chapters in templates/<id>/template.yaml |
| Edit directly in PowerPoint | Open deck-editable.pptx (text boxes are live) |
After large content changes: edit deck.md → re-run --editable-pptx.
You can place tables and figures from the paper on slides.
Table — markdown table in deck.md (good for results slides):
# Key Results
| Method | Accuracy |
|---|---|
| Baseline | 71.2% |
| **Ours** | **78.9%** |Image — extract from PDF, then reference in the deck:
# requires poppler: brew install poppler
scripts/extract_pdf_figures.sh paper.pdf samples/runs/my-run/assets/deck.md example:
<!-- layout: figure -->
# Method Overview

*Source: paper Figure 2*Table + image side by side:
<!-- layout: image-table -->
# Experiment Results
| Method | Score |
|---|---|
| Ours | 78.9% |
In Cursor: "Add paper Figure 2 and Table 3 to the deck."
Syntax details: references/marp-syntax.md
Cite theories, prior work, and statistics with (Author, Year) at the end of bullets:
- **RAG** reduces hallucinations (Patrick Lewis et al., 2021)
- Spence (1973) treats education as a labor-market signal
- Graduate employment rate 70.3% in 2023 (Ministry of Education, 2023)- Presenting authors: full names —
Anum Afzal, Alexander Kowsik, Rajna Fani, & Florian Matthes, notAfzal et al. - Figures/tables from the current paper:
*Source: Anum Afzal, Alexander Kowsik, Rajna Fani, & Florian Matthes (2024), Figure 2* - Optional final slide: condensed reference list (5–8 sources)
- In Cursor: "Add in-text citations."
Recommended title slide (deck.md):
---
marp: true
paginate: true
footer: 'https://arxiv.org/abs/2407.05925 · https://aclanthology.org/2024.dash-1.2/'
---
<!-- _class: lead -->
# Towards Optimizing and Evaluating a Retrieval Augmented QA Chatbot using LLMs with Human-in-the-Loop (2024)
## Anum Afzal, Alexander Kowsik, Rajna Fani, Florian Matthes
ACL DaSH 2024 · Human-in-the-Loop on industrial HR data#title: full paper title + (year) — not a shortened alias##authors: full names on a separate line below the titlefooter:in frontmatter: paper ref links on every slide (HTML + editable PPTX)- PPTX also shows page numbers bottom-right on every slide
HTML preview (open deck.html in Chrome):
| Feature | Description |
|---|---|
| Images | build_deck.sh copies assets/ → output/assets/ so paths work |
| Sticky title | On long slides, # heading and blue rule stay pinned while scrolling |
Use a hard refresh (Cmd+Shift+R) when reopening output/deck.html.
Specify fonts by installed font name, not file path (macOS / Windows).
| File | Example (my-style) |
|---|---|
templates/<id>/theme.css |
section h1 → title, section → body font-family |
templates/<id>/pptx.json |
"titleFontFace", "bodyFontFace" |
Default my-style:
- Title: S-Core Dream 5 Medium
- Body: S-Core Dream 4 Regular
Use the exact name from Font Book (Mac) or Font settings (Windows). Other machines need the same fonts installed for matching PPTX/HTML.
In Cursor: "Use S-Core Medium for titles and S-Core Regular for body text."
| ID | Use case | Notes |
|---|---|---|
academic |
Paper review, lab meeting (default) | White background, blue accent, 7-slide structure |
seminar |
Seminar / conference talk | Large type, high-contrast header |
my-style |
In-depth deck (20–30 slides) | S-Core Dream title/body, title footnote & ref links |
Use without a custom template:
Make slides from this paper using the academic template.
# 1) Copy the example folder
cp -r templates/_example templates/my-style
# 2) Replace my-style/template.pptx with your format
# 3) Import (extract colors/fonts + generate template.yaml)
node scripts/import_pptx_template.mjs templates/my-style/template.pptx --name my-style
# 4) Adjust slide titles and count in template.yaml if neededTemplate spec: references/template-system.md
| Format | Command | Editable in PowerPoint | Use case |
|---|---|---|---|
deck-editable.pptx |
--editable-pptx |
Yes — text & tables | Default (recommended) |
deck.html |
(included by default) | — | Browser presentation, sharing |
deck.pptx |
--pptx |
No — slides are images | Quick share |
Test with the sample paper in the repo:
# English paper, 30 slides (my-style, Afzal et al. 2024 HR RAG)
scripts/build_deck.sh \
samples/runs/my-style-afzal-30/deck.md \
samples/runs/my-style-afzal-30/output/deck \
--template my-style --editable-pptx
# English paper, 7 slides (academic)
scripts/build_deck.sh \
samples/runs/academic-afzal-hr-rag/deck.md \
samples/runs/academic-afzal-hr-rag/output/deck \
--template academic --editable-pptxExtract figures from PDF (optional):
brew install poppler # once
scripts/extract_pdf_figures.sh \
"samples/papers/Afzal et al. - 2024 - Towards Optimizing and Evaluating a Retrieval Augmented QA Chatbot using LLMs with Human-in-the-Loop.pdf" \
samples/runs/my-style-afzal-30/assets/Sample layout:
samples/
├── papers/ # test PDFs (gitignored)
└── runs/<name>/
├── source.md # paper metadata & arXiv link
├── deck.md # slide source
├── assets/ # fig-*.png extracted from PDF
└── output/
├── deck.html
├── deck-editable.pptx
└── assets/ # copied for HTML preview on build
More: samples/README.md
paper-to-slides/
├── SKILL.md # Cursor agent workflow
├── README.md # this file (user manual)
├── MARKETPLACE.md # marketplace submission guide
├── .cursor-plugin/ # Cursor marketplace manifest
├── assets/logo.svg # marketplace icon
├── templates/
│ ├── academic/ # default template
│ ├── seminar/
│ ├── my-style/ # S-Core fonts, 20–30 slide structure
│ ├── _example/ # custom template starter
│ └── <your-name>/ # created by import
│ ├── template.pptx
│ ├── pptx.json
│ └── template.yaml
├── scripts/
│ ├── import_pptx_template.mjs
│ ├── build_editable_pptx.mjs
│ └── build_deck.sh
├── references/
│ ├── quickstart.md # README summary
│ ├── template-system.md
│ └── marp-syntax.md
└── samples/ # test examples
| Doc | Audience | Content |
|---|---|---|
| README.md (this file) | Users | Install, use, edit |
references/quickstart.md |
Users | Quick reference |
references/template-system.md |
Advanced / agent | Template file spec |
references/marp-syntax.md |
Advanced | deck.md syntax |
SKILL.md |
Cursor agent | Conversion workflow |
samples/README.md |
Developers | Sample testing |
| Method | Review | Available now? |
|---|---|---|
Copy to ~/.cursor/skills/ |
None | Yes |
| Cursor Marketplace | Manual review | Ready to submit |
- Push this repo to GitHub (
https://github.com/dschloe/paper2ppt) - Submit the repo URL at cursor.com/marketplace/publish
- After approval, install via Customize → Marketplace
Local test & checklist: MARKETPLACE.md
| File | Role |
|---|---|
.cursor-plugin/plugin.json |
Marketplace manifest |
SKILL.md |
Agent workflow (root skill) |
assets/logo.svg |
Marketplace icon |
templates/, scripts/, references/ |
Templates, build, syntax |
Q. Do I need Python?
No. Node.js is enough (npm install).
Q. My paper is in Korean — can slides be in English?
Yes. Ask in chat: "Make the slides in English."
Q. Can I edit text directly in the PPTX?
Yes with deck-editable.pptx. deck.pptx (Marp) is image-based and hard to edit.
Q. Can I use my company PPT template as-is?
Partially. The skill does not copy slides from your PowerPoint file; it reads colors and fonts from the template and builds new slides in that tone.
- Register — import your company
.pptx:node scripts/import_pptx_template.mjs ~/company-template.pptx --name company - Auto-extracted — font, title/body colors, accent, table header colors →
templates/company/pptx.json. Original file kept attemplates/company/template.pptx. - Generated — paper content is laid out per
template.yamlintodeck-editable.pptxwith editable text boxes. - Not replicated — logo placement, slide master shapes, background images, exact margins/box positions. (Future: fill slides directly from
template.pptx.) - Tweaks — edit
templates/company/pptx.jsonor fix the source pptx and re-import.
Summary: brand colors & fonts yes; layout = skill structure + editable PPTX. For pixel-perfect masters, adjust logo/master manually in PowerPoint after generation.
Q. Is an arXiv link enough?
Yes. Paste the link in chat and ask for conversion.
Q. How do I change the slide count?
Ask for "30 slides" or edit chapters in template.yaml. deck.md can exceed the template default (7 or 20 slides).
Q. Images don't show in HTML.
output/assets/ must sit next to deck.html. Re-run build_deck.sh — it copies assets automatically. Chrome loads from output/assets/, not the run folder's assets/.
Q. Authors overlap the title on the title slide.
Long titles wrap to multiple lines. my-style adds spacing between title and authors. If needed, adjust section.lead h1 margin-bottom in theme.css or leadTitleSize in PPTX theme.
Q. How do I show paper links on every slide?
Add footer: with arXiv/ACL URLs in deck.md frontmatter — see Title slide & HTML preview.