Awesome-Agent-Skills-for-Empirical-Research compiledeck
Create and compile beautiful Beamer presentations following the Rhetoric of Decks philosophy. Use when making slides, creating decks, or compiling .tex presentation files.
git clone https://github.com/brycewang-stanford/Awesome-Agent-Skills-for-Empirical-Research
T=$(mktemp -d) && git clone --depth=1 https://github.com/brycewang-stanford/Awesome-Agent-Skills-for-Empirical-Research "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/13-scunning1975-MixtapeTools/skills/compiledeck" ~/.claude/skills/brycewang-stanford-awesome-agent-skills-for-empirical-research-compiledeck && rm -rf "$T"
skills/13-scunning1975-MixtapeTools/skills/compiledeck/SKILL.mdCompile Deck
Create beautiful Beamer presentations. This skill enforces the Rhetoric of Decks philosophy through concrete, measurable rules — not aspirational guidance.
Step 1: Triage
Before touching anything, answer three questions:
Q1: New deck or editing existing?
- If editing: Read the
file first. Understand its palette, structure, and style before changing anything..tex - If new: Proceed to Q2.
Q2: Who is the audience?
- Academic seminar — sparse, one idea per slide, titles carry the argument
- Teaching lecture — clarity over compression, repetition OK, progressive revelation
- Working deck (coauthors) — more detail OK, document choices, preserve uncertainty
- External non-academic — storytelling, visual impact, minimal jargon
See
domain_patterns.md in this skill directory for detailed guidance per audience type.
Q3: What's the tone?
- Professional/Academic — use the Warm Professional palette (default) or Academic Muted
- Colorful/Expressive — create something new each time. See
for inspiration.palette_reference.md
Step 2: The Non-Negotiable Rules
These are not guidelines. They are constraints.
ONE idea per slide
If a slide has two ideas, split it. No exceptions.
Titles are assertions, not labels
- Bad: "Results"
- Good: "Treatment increased distance by 61 miles on average"
- Bad: "Literature Review"
- Good: "Prior work ignores the supply-side margin"
If someone reads only the slide titles in sequence, they should understand the entire argument.
Typography minimums
- Body text: 24pt minimum
- Absolute floor (footnotes, source notes): 18pt
- Sans-serif fonts only
- Never justify text — always ragged right
No bullet lists (usually)
Bullets are a confession that you haven't found the structure. Look for:
- A sequence (use a flow diagram)
- A contrast (use two columns)
- A hierarchy (use size/color differentiation)
- A causal chain (use arrows)
Exception: genuinely parallel items (e.g., a list of axioms in a teaching deck).
Charts: one message, direct labels
- Every chart communicates ONE finding
- Title states the finding ("Enrollment doubled after 2015"), not the chart type ("Enrollment Over Time")
- Label data directly on the chart — no legends requiring eye movement
- Remove all chartjunk: gridlines, borders, unnecessary axis marks
White space is confidence, not waste
Empty space on a slide signals that you chose carefully. A full slide signals anxiety.
Zero compile warnings
Not "try to fix." Zero. See the Compile Loop below.
Step 3: The Preamble
For new decks, use this template. It is extracted from real decks that work.
Default: Warm Professional Palette (10 colors)
\documentclass[aspectratio=169,11pt]{beamer} % Packages \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{microtype} \usepackage{amsmath,amssymb} \usepackage{booktabs} \usepackage{graphicx} \usepackage{tikz} \usepackage{pgfplots} \usepackage{xcolor} \usepackage{ragged2e} \usepackage{colortbl} \usepackage{array} \usepackage{hyperref} \usepackage{adjustbox} \usetikzlibrary{shapes.geometric, arrows.meta, positioning, calc, backgrounds, decorations.pathreplacing, shadows, fadings} \pgfplotsset{compat=1.18} % --- Color Palette: Warm Professional --- \definecolor{DeepNavy}{HTML}{2E4057} \definecolor{Teal}{HTML}{048A81} \definecolor{WarmOrange}{HTML}{E85D04} \definecolor{SoftPurple}{HTML}{9D4EDD} \definecolor{WarmGray}{HTML}{6C757D} \definecolor{LightGray}{HTML}{E9ECEF} \definecolor{Cream}{HTML}{FBF8F1} \definecolor{DeepRed}{HTML}{D62828} \definecolor{Gold}{HTML}{D4A03A} \definecolor{SoftWhite}{HTML}{FAFAFA} % Beamer colors \setbeamercolor{normal text}{fg=DeepNavy, bg=SoftWhite} \setbeamercolor{structure}{fg=DeepNavy} \setbeamercolor{alerted text}{fg=DeepRed} \setbeamercolor{example text}{fg=Teal} \setbeamercolor{frametitle}{fg=DeepNavy, bg=SoftWhite} \setbeamercolor{title}{fg=DeepNavy} \setbeamercolor{subtitle}{fg=WarmGray} \setbeamercolor{block title}{bg=DeepNavy, fg=SoftWhite} \setbeamercolor{block body}{bg=LightGray, fg=DeepNavy} \setbeamercolor{itemize item}{fg=WarmOrange} \setbeamercolor{itemize subitem}{fg=Gold} % Fonts \usefonttheme{professionalfonts} \setbeamerfont{title}{size=\huge, series=\bfseries} \setbeamerfont{frametitle}{size=\Large, series=\bfseries} % Strip chrome \setbeamertemplate{navigation symbols}{} \setbeamertemplate{headline}{} % Minimal footline \setbeamertemplate{footline}{% \hfill \begin{beamercolorbox}[wd=3cm,ht=2.5ex,dp=1ex,right,rightskip=0.6cm]{page number} \usebeamercolor[fg]{WarmGray}\scriptsize\insertframenumber \end{beamercolorbox} \vspace{0.3cm} } % Bullets \setbeamertemplate{itemize item}{\footnotesize\raisebox{0.3ex}{\tikz\fill[WarmOrange] (0,0) circle (0.45ex);}} \setbeamertemplate{itemize subitem}{\footnotesize\raisebox{0.3ex}{\tikz\fill[Gold] (0,0) circle (0.35ex);}} % Custom commands \newcommand{\transitionslide}[2]{% {\setbeamercolor{normal text}{fg=SoftWhite,bg=DeepNavy} \begin{frame}[plain]\vfill\begin{center} {\huge\bfseries\textcolor{Gold}{#1}}\\[0.6cm] {\large\textcolor{LightGray}{#2}} \end{center}\vfill\end{frame}} } \graphicspath{{figures/}}
For alternative palettes, see
palette_reference.md in this skill directory.
Step 4: Slide Architecture Patterns
Opening slide (first content slide after title)
NOT "Motivation" with bullet points. Instead:
- A surprising fact or statistic (big number, centered)
- A puzzle or unanswered question
- A provocative claim that the deck will support
Transition slides
Use
\transitionslide{Section Title}{Subtitle} for dark-background section dividers.
Closing slide
NOT "Questions?" or "Thank you." Instead:
- The ONE sentence the audience should remember tomorrow
- Full-bleed dark background with the takeaway centered
Devil's Advocate slide (academic decks)
Present the strongest objection to your argument, then respond to it. This builds credibility. Format: "A skeptic would say..." followed by your response.
TikZ diagram slides
Read
tikz_rules.md in this skill directory BEFORE creating any TikZ figure. The rules are measurement-based — they prevent text from overlapping arrows, boxes, and other objects.
Critical rule preview: Before placing a label between two nodes, CALCULATE the edge-to-edge gap and compare it to the estimated text width. If the text is wider than the gap minus 0.6cm padding, the label WILL collide. Move it above/below or shorten the text.
Step 5: The Compile Loop
After EVERY edit to a .tex file:
5a: Compile
pdflatex -interaction=nonstopmode [file].tex
5b: Check for fatal errors
grep "^!" [file].log
If any: fix, recompile, repeat.
5c: Check for ALL warnings
grep -cE "Overfull|Underfull" [file].log
This must return 0. For EACH warning:
| Warning | Fix |
|---|---|
| Overfull \hbox | Rephrase shorter, use , add to table columns |
| Underfull \hbox | Rephrase or adjust paragraph breaks |
| Overfull \vbox | Split the slide or reduce , tighten content |
| Underfull \vbox | Add or adjust spacing |
Even 0.5pt overfull must be fixed. Do NOT proceed until the count is 0.
5d: Check fonts
grep -i "font" [file].log | grep -i "warning"
5e: TikZ verification (Bézier-first workflow)
TikZ errors don't trigger compile warnings. You must catch them yourself. Follow this order — curves first, everything else second:
Pass 1 — Find and fix all Bézier curves:
grep -n "bend" [file].tex
For EACH curved arrow found:
- Calculate max depth:
(chord / 2) × tan(bend_angle / 2) - Add 0.5cm safety margin
- Check: is any label within the danger zone? Move it if so.
- Check: does the curve cross any other arrow? Re-route if so.
Pass 2 — Everything else:
- Gap calculation: for every label between two nodes, is estimated text width < usable gap?
- Arrow labels: does every one have
,above
,below
, orleft
?right - No nodes clipped by slide edges
- All arrows pointing to intended targets
Pass 3 — Open the PDF and visually confirm.
Full rules and formulas are in
tikz_rules.md. This verification runs on ALL TikZ figures in the deck, not just the one you just edited.
5f: Open the PDF
open [file].pdf
Step 6: The Narrative Arc
Every deck tells a story. The structure depends on context, but the principle is universal:
Act I — Setup: Establish the problem or question. Make the audience feel it. Act II — Development: Present evidence, analysis, investigation. Build the logical case. Act III — Resolution: Deliver the insight. State implications. Give the audience something to do or remember.
Within this arc, apply the Pyramid Principle: lead with the conclusion, then support it. Academic audiences expect this. Do not build suspense — state the finding, then prove it.
For domain-specific structures, see
domain_patterns.md.
Step 7: Figure Generation
When a deck needs data visualizations:
- Write a Python script (
) using matplotlibgenerate_figures.py - Use the same color palette as the LaTeX deck
- Save figures as PDF (vector, not raster) to a
subdirectoryfigures/ - Every figure: one message, direct labels, title states the finding
- Match the deck's background color in
fig.set_facecolor() - Save the script alongside the figures — never generate a figure without preserving the code that created it
- Boundary Rule applies to figures too: When placing
near patches (ax.text()
,FancyBboxPatch
,Circle
), compute the patch boundary and verify text has ≥0.4cm clearance. SeeRectangle
Pass 4.tikz_rules.md - Anchor-Based Centering Rule: When a container holds multiple text elements (title + math), do NOT use
for both at symmetric offsets — multi-line text extends further from its anchor than single-line, creating visual asymmetry. Instead, anchor outward from center: upper element usesva='center'
atva='bottom'
, lower usescenter + gap
atva='top'
. Seecenter - gap
Pass 4.tikz_rules.md - Bézier-first for matplotlib arrows: When labeling curved arrows (
), compute the actual Bézier curve position using the arc3 control point formula (arc3
), then offset labels perpendicular to the computed curve position. Never guess where curves pass. Use a white-background bbox on labels for readability. Seecx = mid_x + rad*dy, cy = mid_y - rad*dx
Pass 4 for the full formula and workflow.tikz_rules.md
Quick Reference
| Principle | Rule |
|---|---|
| Ideas per slide | ONE |
| Title style | Assertion, not label |
| Minimum font | 24pt (18pt floor) |
| Bullets | Avoid — find the structure |
| White space | Confidence, not waste |
| Charts | One message, direct labels |
| Compile target | Zero warnings |
| Opening slide | Puzzle, surprise, or provocation |
| Closing slide | One memorable takeaway |
| TikZ labels | Calculate the gap (see tikz_rules.md) |
| Color palette | 10+ colors, warm by default |
| Narrative | Setup, Development, Resolution |
Supporting Files
All in this skill directory (
~/.claude/skills/compiledeck/):
- tikz_rules.md — Measurement-based TikZ collision prevention rules. READ THIS before creating any TikZ diagram.
- palette_reference.md — Four real palettes extracted from existing decks, with a selection guide.
- domain_patterns.md — Detailed structural patterns for academic seminars, teaching lectures, and working decks.
Full Philosophy Reference
For the complete essay behind these principles:
~/MixtapeTools/presentations/rhetoric_of_decks.md
~/MixtapeTools/presentations/rhetoric_of_decks_full_essay.md
This skill distills those essays into operational rules. You don't need to re-read them — just follow the rules above.