presentations
Skill42 starsChanged 17 days agoMITView on GitHub
Create slide presentations in multiple formats: Marp (Markdown, default), Beamer (LaTeX), Jupyter Notebook slides, and PowerPoint (python-pptx). Supports scientific, business, and developer content with math, code, charts, and tables. Converts existing documents into slides or creates from scratch. Auto-compiles to PDF/HTML/PPTX.
- Installs packages
14 other projects use a version of this.
Adopted by
Most recently taken up by
- codewhale-hq/codewhale-plugin-marketplacetheir own version, first seen Nov 8, 2026
- KMaruthi2002/universal-llm-skillstheir own version, first seen Oct 25, 2026
- 0mlkrizzz655335v/claude-skills-zhtheir own version, first seen Oct 15, 2026
- Geruyang/skillstheir own version, first seen Oct 15, 2026
- nimadorostkar/Claude-Skills-collectiontheir own version, first seen Oct 13, 2026
- godagoo/reveal-presentationstheir own version, first seen Oct 7, 2026
Used with
Projects with it also use data-visualization, git-workflow and 1 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
AnthropicSkilldata-visualization
Create effective data visualizations with Python (matplotlib, seaborn, plotly). Use when building charts, choosing the right chart type for a dataset, creating publication-quality figures, or applying design principles like accessibility and color theory.
Also in 3 projects that use this
Microsoft AzureSkillgit-workflow
Squad branching model: dev-first workflow with insiders preview channel
Also in 3 projects that use this
SentrySkillreview
Fixture review skill.
Also in 3 projects that use this
Other versions14 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 14
- nimadorostkar/Claude-Skills-collection★ 33same name
- godagoo/reveal-presentations★ 16same name
- codewhale-hq/codewhale-plugin-marketplace★ 5same name
- 0mlkrizzz655335v/claude-skills-zh★ 2same name
- Geruyang/skills★ 2same name
- ai-ecoverse/skills★ 1same name
- bogemadumb/presentation-designer★ 1same name
- grigoriigarshin/claude-skills★ 1same name
- KMaruthi2002/universal-llm-skills★ 1same name
- michaelsvanbeek/personal-agent-skills★ 1same name
4 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository44 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- phd-qualifierSkill
- citation-verifierSkill
- scientific-writingSkill
- brainstormingSkill
- elevenlabsSkill
- image-generationSkill
- video-storytellingSkill
- code-reviewerSkill
- ralph-wiggumSkill
- tddSkill
- version-controlSkill
- opentrons-absorbance-readerSkill
- opentrons-gripperSkill
- opentrons-heater-shakerSkill
- opentrons-magnetic-blockSkill
- opentronsSkill
- opentrons-temperature-moduleSkill
- opentrons-thermocyclerSkill
- planningSkill
- claude-lightSkill
- emacs-lispSkill
- fairchemSkill
- idaesSkill
- materials-propertiesSkill
- pycalphadSkill
- pymatgenSkill
- python-aseSkill
- python-best-practicesSkill
- python-jaxSkill
- python-multiobjective-optimizationSkill
- python-optimizationSkill
- python-plottingSkill
- python-regression-statisticsSkill
- vaspSkill
- pycseSkill
- elnSkill
- literature-reviewSkill
- materials-databasesSkill
- scientific-data-extractionSkill
- scientific-reviewerSkill
- scientific-workflowsSkill
- design-of-experimentsSkill
- troubleshootingSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
35 rules. 0 are common, 25 are distinctive, and 10 are very specific to this project.
0
Common
Most of the 11 edited versions we read keep these.
25
Distinctive
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 53
Images: Always specify explicit size constraints.
- Distinctive: line 59
Leave breathing room between elements (bullets, images, code blocks)
- Distinctive: line 60
Prefer visual balance over cramming content
- Distinctive: line 64
If the user explicitly requests dense content (e.g., "make a reference slide with all parameters"), honor the request but:
- Distinctive: line 66
Add a note that the slide is intentionally dense
- Distinctive: line 73
Use AskUserQuestion only if the user hasn't specified a format and the content strongly suggests a different one.
- Distinctive: line 87
Before generating slides, determine:
- Distinctive: line 94
If converting a document, read it first with the Read tool, then extract key points and organize into an outline before generating slides.
- Distinctive: line 98
Before writing any slides, create a brief outline:
- Distinctive: line 111
Use the appropriate format section below.
- Distinctive: line 115
After writing the source file, compile to final output:
- Distinctive: line 127
If a compilation tool is not installed, inform the user and provide the install command.
- Very specific: line 273
Use <!-- fit --> before headings that might be too long
- Very specific: line 275
Use ![width:Npx] or ![height:Npx] for all images — never use unsized images
- Very specific: line 463
Use [shrink] frame option as a last resort: \begin{frame}[shrink]{Title}
- Very specific: line 465
Use breaklines=true in lstset for code that might wrap
- Very specific: line 467
Use \resizebox{\textwidth}{!}{...} to scale a table to fit width
- Distinctive: line 498
Use this approach to generate a notebook with slide metadata from Python:
- Very specific: line 556
Keep code cells to max ~10 lines — move setup code to skip cells
- Very specific: line 557
Use plt.figure(figsize=(8, 4)) to control plot sizes explicitly
- Very specific: line 560
Use --no-input flag with nbconvert to hide code cells if showing only results
- Very specific: line 725
Always use Inches() or Pt() for positioning — never raw integers
- Distinctive: line 736
When converting an existing document into slides:
- Distinctive: line 740
Use the Read tool to read the document.
- Distinctive: line 762
Follow the format-specific instructions above.
- Distinctive: line 817
Use AskUserQuestion to confirm audience and any specific topics to cover
- Distinctive: line 818
Create outline with 10 slides: title, outline, 6 content, summary, questions
- Very specific: line 819
Write Marp markdown with theme: default, size: 16:9, proper font sizes
- Distinctive: line 829
Read draft.tex with Read tool
- Distinctive: line 831
Create outline: ~15 slides for 20 minutes (1-1.5 min per slide)
- Distinctive: line 841
Ask about data source and key metrics
- Distinctive: line 843
Create charts using CategoryChartData for sales figures
- Distinctive: line 844
Use proper font sizes (Pt(28) titles, Pt(18) body)
- Distinctive: line 852
Create notebook with nbformat, setting slide_type metadata
- Distinctive: line 854
Add markdown cells for explanations (following density limits)
“Common” is measured: kept by at least 6 in 10 of the 11 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Purpose
Generate professional slide presentations from scratch or by converting existing documents. Supports four output formats covering academic, business, and developer use cases. Enforces slide layout best practices to prevent text overflow, cluttered slides, and poor readability.
When to Use
- User asks to create a presentation, slide deck, or talk
- User wants to convert a paper, report, outline, or notes into slides
- User requests a specific format: Beamer, Marp, Jupyter slides, or PowerPoint
- User asks for conference talk, lecture, or meeting slides
CRITICAL: Slide Layout Rules
These rules apply to ALL formats. Follow them by default. The user may override for specific slides (e.g., reference/appendix slides), but warn about readability.
Text Density Limits
- Max 6 bullet points per slide — if more content is needed, split across multiple slides
- Max ~40 words per slide body (excluding title) — slides are visual aids, not documents
- One core idea per slide — each slide should have a single takeaway message
- Bullet text max ~10 words each — use sentence fragments, not full sentences
Font Size Minimums
| Element | Beamer | Marp | PPTX | Jupyter |
| Title | \Large (24pt+) | 32px+ | Pt(28)+ | H1/H2 |
| Body text | \normalsize (11pt+) | 20px+ | Pt(18)+ | normal |
| Code | \small (10pt) | 16px+ | Pt(14)+ | cell default |
| Footnotes | \footnotesize (8pt) | 14px | Pt(12) | small |
Content-Specific Limits
- Code blocks: Max ~12 lines per slide. For longer code, split across slides or move to appendix
- Tables: Max ~5 data rows visible per slide. Paginate or simplify larger tables
- Images: Always specify explicit size constraints. Never let images overflow slide boundaries
- Equations: Max 2-3 display equations per slide. Use align environments for multi-line math
Whitespace and Margins
- Maintain at least 10% padding on all sides — do not fill every pixel
- Leave breathing room between elements (bullets, images, code blocks)
- Prefer visual balance over cramming content
Override Policy
If the user explicitly requests dense content (e.g., "make a reference slide with all parameters"), honor the request but:
- Reduce font sizes to the minimums above (never below)
- Add a note that the slide is intentionally dense
- Suggest splitting if it still overflows
Format Selection
Default: Marp (Markdown-based, exports to HTML/PDF/PPTX)
Use AskUserQuestion only if the user hasn't specified a format and the content strongly suggests a different one.
Format Decision:
├── Heavy LaTeX math / academic conference → Beamer
├── Live code demos / data science → Jupyter Notebook slides
├── Enterprise / editable by non-technical users → PowerPoint (python-pptx)
└── Everything else (default) → MarpInstructions
Step 1: Gather Requirements
Before generating slides, determine:
- Topic and audience — what is the presentation about and who is it for?
- Format — use Marp unless user specifies otherwise or content suggests a better fit
- Slide count — ask if not specified; default to ~10-15 slides for a talk
- Content source — from scratch, or converting an existing document?
- Special needs — math, code, charts, animations, speaker notes?
If converting a document, read it first with the Read tool, then extract key points and organize into an outline before generating slides.
Step 2: Create Slide Outline
Before writing any slides, create a brief outline:
1. Title slide
2. Outline/Agenda
3-N. Content slides (one idea each)
N+1. Summary/Conclusions
N+2. Questions / Thank youPresent the outline to the user for approval before proceeding.
Step 3: Generate Slides
Use the appropriate format section below. Always apply the layout rules from the CRITICAL section.
Step 4: Auto-Compile
After writing the source file, compile to final output:
| Format | Command |
| Marp → PDF | npx @marp-team/marp-cli@latest --pdf --allow-local-files slides.md |
| Marp → HTML | npx @marp-team/marp-cli@latest --allow-local-files slides.md |
| Marp → PPTX | npx @marp-team/marp-cli@latest --pptx --allow-local-files slides.md |
| Beamer → PDF | latexmk -pdf presentation.tex |
| Beamer + minted | latexmk -pdf -shell-escape presentation.tex |
| Jupyter → HTML slides | jupyter nbconvert --to slides presentation.ipynb --post serve |
| PowerPoint | No compilation needed — python-pptx writes .pptx directly |
If a compilation tool is not installed, inform the user and provide the install command.
Format: Marp (Default)
Prerequisites
# Option 1: Use npx (no install, requires Node.js >= 18)
npx @marp-team/marp-cli@latest --version
# Option 2: Global install
npm install -g @marp-team/marp-cli
# Option 3: Homebrew
brew install marp-cliTemplate
---
marp: true
theme: default
paginate: true
size: 16:9
style: |
section {
font-size: 20px;
}
h1 {
font-size: 36px;
}
h2 {
font-size: 30px;
}
code {
font-size: 16px;
}
table {
font-size: 18px;
}
---
<!-- _paginate: false -->
# Presentation Title
**Author Name**
Date | Event
---
## Outline
1. First topic
2. Second topic
3. Third topic
---
## Slide Title
- Key point one
- Key point two
- Key point three
<!-- Use fragment-style reveals sparingly -->
---Key Features
Auto-fit headers (prevents title overflow):
<!-- fit -->
# This Long Title Will Auto-Scale to FitBackground images:

# Split Layout
Content on the left, image on the right.Image sizing (always constrain):


Math (KaTeX):
Inline: $E = mc^2$
$$
\nabla \cdot \mathbf{E} = \frac{\rho}{\epsilon_0}
$$Code blocks (syntax highlighted automatically):
```python
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
```Two-column layout:
<div style="display: flex; gap: 40px;">
<div style="flex: 1;">
### Left Column
- Point A
- Point B
</div>
<div style="flex: 1;">
### Right Column
- Point C
- Point D
</div>
</div>Speaker notes (only when requested):
<!--
Speaker notes go here.
These are not visible in the presentation.
-->Overflow Prevention
- Use
<!-- fit -->before headings that might be too long - Set global
font-sizein the style block to control base size - Use
![width:Npx]or![height:Npx]for all images — never use unsized images - For dense tables, reduce font size locally:
<div style="font-size: 14px;">...</div> - Split content across slides rather than shrinking fonts below minimums
Compilation
# PDF output (most common)
npx @marp-team/marp-cli@latest --pdf --allow-local-files slides.md
# HTML output (interactive, good for sharing)
npx @marp-team/marp-cli@latest --allow-local-files slides.md -o slides.html
# PPTX output (note: slides are rasterized images, not editable)
npx @marp-team/marp-cli@latest --pptx --allow-local-files slides.mdFormat: Beamer (LaTeX)
Prerequisites
# macOS
brew install --cask mactex
# Ubuntu/Debian
sudo apt install texlive-latex-extra latexmk
# For code highlighting with minted
pip install PygmentsTemplate
\documentclass[aspectratio=169]{beamer}
\usetheme{Madrid}
\usecolortheme{default}
% Prevent text overflow
\setbeamertemplate{frametitle}{\vspace{0.2cm}\insertframetitle}
% Code listings
\usepackage{listings}
\usepackage{xcolor}
\lstset{
basicstyle=\ttfamily\small,
keywordstyle=\color{blue},
commentstyle=\color{green!60!black},
stringstyle=\color{red},
frame=single,
breaklines=true,
breakatwhitespace=true,
postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
numbers=left,
numberstyle=\tiny\color{gray}
}
% Graphics
\usepackage{graphicx}
% Math
\usepackage{amsmath,amssymb}
\title[Short Title]{Full Presentation Title}
\author{Author Name}
\institute{Institution}
\date{\today}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
\begin{frame}{Outline}
\tableofcontents
\end{frame}
\section{Introduction}
\begin{frame}{Slide Title}
\begin{itemize}
\item First key point
\item Second key point
\item Third key point
\end{itemize}
\end{frame}
\end{document}Key Features
Overlay animations:
\begin{frame}{Incremental Reveal}
\begin{itemize}
\item<1-> Always visible
\item<2-> Appears second
\item<3-> Appears third
\end{itemize}
\end{frame}Two-column layout:
\begin{frame}{Side by Side}
\begin{columns}
\column{0.48\textwidth}
Left content here.
\column{0.48\textwidth}
\includegraphics[width=\textwidth]{figure.png}
\end{columns}
\end{frame}Code blocks (use [fragile] on the frame):
\begin{frame}[fragile]{Code Example}
\begin{lstlisting}[language=Python]
def greet(name):
return f"Hello, {name}!"
\end{lstlisting}
\end{frame}Math:
\begin{frame}{Equations}
The Schrödinger equation:
\begin{equation}
i\hbar\frac{\partial}{\partial t}\Psi = \hat{H}\Psi
\end{equation}
\end{frame}Figures with size control:
\begin{frame}{Results}
\begin{figure}
\centering
\includegraphics[width=0.7\textwidth,height=0.5\textheight,keepaspectratio]{plot.png}
\caption{Always constrain both width and height.}
\end{figure}
\end{frame}Blocks:
\begin{block}{Definition}
A concise definition here.
\end{block}
\begin{alertblock}{Warning}
Important caveat.
\end{alertblock}
\begin{exampleblock}{Example}
Illustrative example.
\end{exampleblock}Speaker notes (only when requested):
\usepackage{pgfpages}
\setbeameroption{show notes on second screen=right}
\begin{frame}{Title}
Content here.
\note{Talking points for this slide.}
\end{frame}Popular Themes
| Theme | Style | Best for |
| Madrid | Classic with navigation | General academic |
| Metropolis | Clean, modern, minimal | Modern talks |
| Berlin | Header navigation bar | Long talks |
| CambridgeUS | Red/blue accent | Formal conferences |
| default | Minimal, no decoration | When you want plain |
Overflow Prevention
- Use
[shrink]frame option as a last resort:\begin{frame}[shrink]{Title} - Constrain images:
\includegraphics[width=0.7\textwidth,height=0.5\textheight,keepaspectratio]{img} - Use
breaklines=truein lstset for code that might wrap - For dense slides, use
\smallor\footnotesizebut never below\scriptsize - Use
\resizebox{\textwidth}{!}{...}to scale a table to fit width
Compilation
# Standard
latexmk -pdf presentation.tex
# With minted code highlighting
latexmk -pdf -shell-escape presentation.tex
# Clean auxiliary files
latexmk -cFormat: Jupyter Notebook Slides
Prerequisites
pip install notebook nbconvert
# For live presentation mode (classic notebook only)
pip install RISE # notebook <= 6
pip install jupyterlab-rise # JupyterLab / notebook 7+Creating Slides Programmatically
Use this approach to generate a notebook with slide metadata from Python:
import nbformat
nb = nbformat.v4.new_notebook()
# Title slide
title_cell = nbformat.v4.new_markdown_cell("# Presentation Title\n\n**Author** | Date")
title_cell.metadata["slideshow"] = {"slide_type": "slide"}
nb.cells.append(title_cell)
# Content slide with markdown
content_cell = nbformat.v4.new_markdown_cell(
"## Key Findings\n\n"
"- Finding one\n"
"- Finding two\n"
"- Finding three"
)
content_cell.metadata["slideshow"] = {"slide_type": "slide"}
nb.cells.append(content_cell)
# Code slide
code_cell = nbformat.v4.new_code_cell(
"import matplotlib.pyplot as plt\n"
"import numpy as np\n\n"
"x = np.linspace(0, 10, 100)\n"
"plt.plot(x, np.sin(x))\n"
"plt.title('Sine Wave')\n"
"plt.show()"
)
code_cell.metadata["slideshow"] = {"slide_type": "slide"}
nb.cells.append(code_cell)
# Save
nbformat.write(nb, "presentation.ipynb")Cell Slide Types
| Type | Behavior | Use for |
slide | New horizontal slide | Main content slides |
subslide | Vertical sub-slide | Detail under a main slide |
fragment | Appears incrementally | Reveals within a slide |
skip | Hidden from presentation | Setup code, scratch work |
notes | Speaker notes | Talking points (only when requested) |
- | Continues previous slide | Output cells below code |
Key Features
- Live code execution during presentation (RISE only)
- Interactive widgets and plots remain functional
- Mix markdown, code, and output on the same slide
- Native syntax highlighting for code cells
Overflow Prevention
- Keep code cells to max ~10 lines — move setup code to
skipcells - Use
plt.figure(figsize=(8, 4))to control plot sizes explicitly - For markdown cells, follow the same bullet/word count limits
- Hide verbose output with
;at end of cell orskiptype for output-heavy cells - Use
--no-inputflag with nbconvert to hide code cells if showing only results
Compilation
# Static HTML slides
jupyter nbconvert --to slides presentation.ipynb
# Serve in browser immediately
jupyter nbconvert --to slides presentation.ipynb --post serve
# Hide code cells (output only)
jupyter nbconvert --to slides presentation.ipynb --no-inputFormat: PowerPoint (python-pptx)
Prerequisites
pip install python-pptxTemplate
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
# Load custom template if provided, otherwise use default
# prs = Presentation("template.pptx") # with template
prs = Presentation() # default
# --- Inspect available layouts (do this first with custom templates) ---
for i, layout in enumerate(prs.slide_layouts):
print(f"{i}: {layout.name}")
# --- Title Slide ---
slide = prs.slides.add_slide(prs.slide_layouts[0])
slide.shapes.title.text = "Presentation Title"
slide.placeholders[1].text = "Author | Date"
# --- Content Slide with Bullets ---
slide = prs.slides.add_slide(prs.slide_layouts[1])
slide.shapes.title.text = "Key Points"
tf = slide.placeholders[1].text_frame
tf.word_wrap = True
tf.text = "First bullet point"
for text, level in [("Second point", 0), ("Sub-point", 1), ("Third point", 0)]:
p = tf.add_paragraph()
p.text = text
p.level = level
p.font.size = Pt(18) if level == 0 else Pt(16)
prs.save("presentation.pptx")Adding Images
slide = prs.slides.add_slide(prs.slide_layouts[5]) # Title Only
slide.shapes.title.text = "Results"
# Always specify position and size to prevent overflow
slide_width = prs.slide_width
slide_height = prs.slide_height
img_width = Inches(6)
img_height = Inches(4)
left = (slide_width - img_width) // 2 # center horizontally
top = Inches(1.5)
slide.shapes.add_picture("figure.png", left, top, img_width, img_height)Adding Tables
slide = prs.slides.add_slide(prs.slide_layouts[5])
slide.shapes.title.text = "Data Summary"
rows, cols = 4, 3 # max ~5 data rows per slide
table_shape = slide.shapes.add_table(
rows, cols,
left=Inches(1), top=Inches(1.8),
width=Inches(8), height=Inches(3)
)
table = table_shape.table
# Header row
for col_idx, text in enumerate(["Metric", "Value", "Change"]):
cell = table.cell(0, col_idx)
cell.text = text
for paragraph in cell.text_frame.paragraphs:
paragraph.font.bold = True
paragraph.font.size = Pt(16)
# Data rows
data = [("Revenue", "$1.2M", "+15%"), ("Users", "50K", "+22%"), ("NPS", "72", "+5")]
for row_idx, row_data in enumerate(data, start=1):
for col_idx, text in enumerate(row_data):
cell = table.cell(row_idx, col_idx)
cell.text = text
for paragraph in cell.text_frame.paragraphs:
paragraph.font.size = Pt(14)Adding Charts
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
slide = prs.slides.add_slide(prs.slide_layouts[5])
slide.shapes.title.text = "Performance"
chart_data = CategoryChartData()
chart_data.categories = ["Q1", "Q2", "Q3", "Q4"]
chart_data.add_series("Revenue", (120, 150, 130, 175))
chart_frame = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED,
Inches(1), Inches(1.8), Inches(8), Inches(4.5),
chart_data
)
chart = chart_frame.chart
chart.has_legend = True
chart.has_title = True
chart.chart_title.text_frame.text = "Quarterly Revenue"Custom Template Support
# Load a branded template
prs = Presentation("company_template.pptx")
# Inspect layouts to find the right ones
for i, layout in enumerate(prs.slide_layouts):
print(f"{i}: {layout.name}")
for ph in layout.placeholders:
print(f" Placeholder {ph.placeholder_format.idx}: {ph.name}")
# Use template layouts by index (indices depend on the template)
slide = prs.slides.add_slide(prs.slide_layouts[1])Speaker Notes (only when requested)
from pptx.util import Pt
slide = prs.slides.add_slide(prs.slide_layouts[1])
notes_slide = slide.notes_slide
notes_tf = notes_slide.notes_text_frame
notes_tf.text = "Key talking points for this slide."Overflow Prevention
- Always use
Inches()orPt()for positioning — never raw integers - Center images:
left = (prs.slide_width - img_width) // 2 - Set
text_frame.word_wrap = Trueon all text boxes - Cap font sizes: title
Pt(28), bodyPt(18), minimumPt(12) - For tables with many rows, paginate across slides automatically
- Validate positions: ensure
left + width <= prs.slide_widthandtop + height <= prs.slide_height
Document Conversion Workflow
When converting an existing document into slides:
Step 1: Read the Source
Use the Read tool to read the document. Supported inputs:
- Markdown (.md)
- LaTeX (.tex)
- Org-mode (.org)
- Plain text (.txt)
- PDF (extract key sections)
Step 2: Extract Key Points
Identify:
- Main thesis/argument
- Section headings → slide titles
- Key findings/results → bullet points (max 6 per slide)
- Figures/tables → dedicated slides
- Equations → math slides (max 2-3 per slide)
Step 3: Create Outline
Map document sections to slides. Apply the density rules — a paper section with 5 paragraphs may need 3-4 slides, not one.
Step 4: Generate and Compile
Follow the format-specific instructions above.
Figure Generation
For slides that need charts or figures:
Basic inline generation (matplotlib):
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(8, 4)) # explicit size for slides
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x), linewidth=2)
ax.set_xlabel("x", fontsize=14)
ax.set_ylabel("sin(x)", fontsize=14)
ax.tick_params(labelsize=12)
fig.savefig("sine_plot.png", dpi=150, bbox_inches="tight")
plt.close()For complex visualizations, use the python-plotting skill. For AI-generated images or diagrams, use the image-generation skill.
Requirements
Marp
- Node.js >= 18 (for npx/npm)
- Chrome, Edge, or Firefox (for PDF/PPTX export — used headlessly)
Beamer
- TeX Live, MiKTeX, or MacTeX (full LaTeX distribution)
latexmk(included with TeX Live)- Pygments (
pip install Pygments) for minted code highlighting
Jupyter Notebook Slides
notebookandnbconvert(pip install notebook nbconvert)- Optional:
RISEorjupyterlab-risefor live presentations
PowerPoint
python-pptx(pip install python-pptx)- No system dependencies
Examples
Example 1: Conference Talk (Marp)
User request: "Make a 10-slide presentation about machine learning in materials science"
Expected behavior:
- Use AskUserQuestion to confirm audience and any specific topics to cover
- Create outline with 10 slides: title, outline, 6 content, summary, questions
- Write Marp markdown with
theme: default,size: 16:9, proper font sizes - Include math for key equations, code for example workflows
- Apply layout rules: max 6 bullets, ~40 words per slide
- Compile to PDF:
npx @marp-team/marp-cli@latest --pdf --allow-local-files slides.md
Example 2: Paper Conversion (Beamer)
User request: "Convert my paper draft.tex into a 20-minute conference talk"
Expected behavior:
- Read draft.tex with Read tool
- Extract key contributions, figures, and equations
- Create outline: ~15 slides for 20 minutes (1-1.5 min per slide)
- Generate Beamer .tex file reusing figures from the paper directory
- Apply layout rules: one idea per slide, max 2-3 equations per slide
- Compile:
latexmk -pdf presentation.tex
Example 3: Business Report (PowerPoint)
User request: "Create a PowerPoint for my quarterly review with sales data"
Expected behavior:
- Ask about data source and key metrics
- Generate python-pptx script with title slide, data slides, chart slides, summary
- Create charts using CategoryChartData for sales figures
- Use proper font sizes (Pt(28) titles, Pt(18) body)
- Save directly as .pptx — no compilation needed
Example 4: Interactive Demo (Jupyter)
User request: "Make a notebook slideshow demonstrating pandas data analysis"
Expected behavior:
- Create notebook with nbformat, setting slide_type metadata
- Include code cells with live-executable pandas examples
- Add markdown cells for explanations (following density limits)
- Mark setup/import cells as
skiptype - Export:
jupyter nbconvert --to slides presentation.ipynb
Limitations
- Marp PPTX export produces rasterized slides — text is not editable in PowerPoint
- python-pptx cannot render slides — visual verification requires opening in PowerPoint or LibreOffice
- Beamer compilation requires a full LaTeX distribution (several GB)
- Jupyter RISE only works with classic notebook (<= v6); JupyterLab needs jupyterlab-rise
- Speaker notes are only generated when explicitly requested
Related Skills
- python-plotting — for complex chart and visualization generation
- image-generation — for AI-generated images and diagrams
- scientific-writing — for academic content structuring and LaTeX guidance
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

