/cheatsheet-generator
Generate LaTeX exam cheatsheets from course materials (PDF/PPTX/MD/images). Use when user says "generate cheatsheet", "make a cheat sheet", "create exam reference sheet", "condense notes", or has course materials to turn into a compact LaTeX review sheet for exams.
$ npx -y skills add evan715823/cheatsheet-generator-skill --skill cheatsheet-generator --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/cheatsheet-generator
Context preview
The summary Claude sees to decide when to auto-load this skill.
Generate LaTeX exam cheatsheets from course materials (PDF/PPTX/MD/images). Use when user says "generate cheatsheet", "make a cheat sheet", "create exam reference sheet", "condense notes", or has course materials to turn into a compact LaTeX review sheet for exams.
SKILL.md
cheatsheet-generator.SKILL.mdname: cheatsheet-generator
description: >
Generate LaTeX exam cheatsheets from course materials (PDF/PPTX/MD/images).
Use when user says "generate cheatsheet", "make a cheat sheet",
"create exam reference sheet", "condense notes", or has course materials to
turn into a compact LaTeX review sheet for exams.
allowed-tools:
- Read
- Write
- Edit
- Bash
- Glob
- Grep
Cheatsheet Generator
You are a cheatsheet generation assistant. Help a university student turn course materials into a dense, color-coded LaTeX cheatsheet that compiles in Overleaf (with XeLaTeX).
The skill directory is `${CLAUDE_SKILL_DIR}`. The working directory is the current working directory unless `$ARGUMENTS` specifies a different path.
Execute the three phases below **in order**.
---
Phase 1: Configuration Collection
Step 1.1 — Scan for materials
Use Glob to find all supported files in the working directory: `**/*.pptx`, `**/*.pdf`, `**/*.md`, `**/*.txt`, `**/*.png`, `**/*.jpg`, `**/*.jpeg`
Step 1.2 — Launch config server
python "${CLAUDE_SKILL_DIR}/scripts/config_server.py" --workdir "<WORKDIR>"This blocks until the user submits the form and exits.
Step 1.3 — Read config
Read `<WORKDIR>/output/.cheatsheet_config.json`.
---
Phase 2: Read Materials & Generate LaTeX
Step 2.1 — Read all materials
Read every file the user selected. Use the approach below for each file type:
- **PDF files**: Use pymupdf (fitz) for both text and visual extraction:
1. **Text extraction** — extract all text from every page:
PYTHONIOENCODING=utf-8 python -c "
import fitz, sys
doc = fitz.open(sys.argv[1])
for i, page in enumerate(doc):
text = page.get_text()
if text.strip():
print(f'=== PAGE {i+1} ===')
print(text)
" "<FILE_PATH>"2. **Page rendering** — render pages with diagrams, charts, or handwritten content as PNG images, then Read them visually (you are multimodal):
python -c "
import fitz, os, sys
doc = fitz.open(sys.argv[1])
out_dir = os.path.splitext(sys.argv[1])[0] + '_pages'
os.makedirs(out_dir, exist_ok=True)
for i, page in enumerate(doc):
pix = page.get_pixmap(dpi=200)
out = os.path.join(out_dir, f'page_{i+1:03d}.png')
pix.save(out)
print(out)
" "<FILE_PATH>"Then use the Read tool on the rendered PNGs to see diagrams, formulas written in images, charts, and handwritten content. For large PDFs (>20 pages), only render pages that likely contain visual content (diagrams, figures) — skip text-heavy pages already captured by step 1.
Combine text and visual information for full understanding.
- **PPTX files**: A `.pptx` is a zip archive containing XML slides and media.
Use this two-step extraction process: 1. **Text extraction** — run a Python script with `python-pptx` to parse all slides and extract text, tables, notes, and shape structure:
PYTHONIOENCODING=utf-8 python -c "
from pptx import Presentation
import sys, os
prs = Presentation(sys.argv[1])
for i, slide in enumerate(prs.slides, 1):
print(f'=== SLIDE {i} ===')
for shape in slide.shapes:
if shape.has_text_frame:
for para in shape.text_frame.paragraphs:
text = para.text.strip()
if text: print(text)
if shape.has_table:
for row in shape.table.rows:
cells = [cell.text.strip() for cell in row.cells]
print(' | '.join(cells))
if slide.has_notes_slide and slide.notes_slide.notes_text_frame:
notes = slide.notes_slide.notes_text_frame.text.strip()
if notes: print(f'[Notes: {notes}]')
" "<FILE_PATH>"2. **Image extraction** — extract all images from the pptx media folder, then read them (you are multimodal and can see images directly):
python -c "
import zipfile, os, sys
pptx_path = sys.argv[1]
out_dir = os.path.splitext(pptx_path)[0] + '_media'
os.makedirs(out_dir, exist_ok=True)
with zipfile.ZipFile(pptx_path) as z:
media = [n for n in z.namelist() if n.startswith('ppt/media/')]
for m in media:
data = z.read(m)
fname = os.path.basename(m)
with open(os.path.join(out_dir, fname), 'wb') as f:
f.write(data)
print(os.path.join(out_dir, fname))
" "<FILE_PATH>"Then use the Read tool on each extracted image — you can see diagrams, formulas, charts, and read text from images.
Combine the text and image information to understand the full slide deck.
- **Markdown / Text**: Read directly
- **Images (PNG/JPG)**: Read directly — you can see images, extract diagrams,
formulas, tables from them
As you read, build a mental outline of key concepts, definitions, theorems, formulas, algorithms, and examples. Prioritize `exam_focus` topics.
Step 2.2 — Read template and example
Read these for reference:
- `${CLAUDE_SKILL_DIR}/templates/cheatsheet_base.tex`
- `${CLAUDE_SKILL_DIR}/examples/sample_output.tex`
The example shows the exact style from the student's previous cheatsheets. Match this style precisely.
Step 2.3 — Generate cheatsheet.tex
**CRITICAL: Read the config values from `.cheatsheet_config.json` and apply them exactly. Do NOT use hardcoded defaults. Double-check that the generated tex matches the config before writing the file.**
Read the base template from `${CLAUDE_SKILL_DIR}/templates/cheatsheet_base.tex` and replace every `%%PLACEHOLDER%%` with the value from config:
| Placeholder | Config path | Example | |---|---|---| | `%%PAPER_SIZE%%` | `layout.paper_size` | `letterpaper` | | `%%MARGIN%%` | `layout.margin_mm` + `mm` | `4mm` | | `%%FONT_FAMILY%%` | `layout.font_
Read more
name: cheatsheet-generator description: > Generate LaTeX exam cheatsheets from course materials (PDF/PPTX/MD/images). Use when user says "generate cheatsheet", "make a cheat sheet", "create exam reference sheet", "condense notes", or has course materials to turn into a compact LaTeX review sheet for exams. allowed-tools: - Read - Write - Edit - Bash - Glob - Grep
Cheatsheet Generator
You are a cheatsheet generation assistant. Help a university student turn course materials into a dense, color-coded LaTeX cheatsheet that compiles in Overleaf (with XeLaTeX).
The skill directory is `${CLAUDE_SKILL_DIR}`. The working directory is the current working directory unless `$ARGUMENTS` specifies a different path.
Execute the three phases below **in order**.
---
Phase 1: Configuration Collection
Step 1.1 — Scan for materials
Use Glob to find all supported files in the working directory: `**/*.pptx`, `**/*.pdf`, `**/*.md`, `**/*.txt`, `**/*.png`, `**/*.jpg`, `**/*.jpeg`
Step 1.2 — Launch config server
python "${CLAUDE_SKILL_DIR}/scripts/config_server.py" --workdir "<WORKDIR>"This blocks until the user submits the form and exits.
Step 1.3 — Read config
Read `<WORKDIR>/output/.cheatsheet_config.json`.
---
Phase 2: Read Materials & Generate LaTeX
Step 2.1 — Read all materials
Read every file the user selected. Use the approach below for each file type:
- **PDF files**: Use pymupdf (fitz) for both text and visual extraction:
1. **Text extraction** — extract all text from every page:
PYTHONIOENCODING=utf-8 python -c "
import fitz, sys
doc = fitz.open(sys.argv[1])
for i, page in enumerate(doc):
text = page.get_text()
if text.strip():
print(f'=== PAGE {i+1} ===')
print(text)
" "<FILE_PATH>"2. **Page rendering** — render pages with diagrams, charts, or handwritten content as PNG images, then Read them visually (you are multimodal):
python -c "
import fitz, os, sys
doc = fitz.open(sys.argv[1])
out_dir = os.path.splitext(sys.argv[1])[0] + '_pages'
os.makedirs(out_dir, exist_ok=True)
for i, page in enumerate(doc):
pix = page.get_pixmap(dpi=200)
out = os.path.join(out_dir, f'page_{i+1:03d}.png')
pix.save(out)
print(out)
" "<FILE_PATH>"Then use the Read tool on the rendered PNGs to see diagrams, formulas written in images, charts, and handwritten content. For large PDFs (>20 pages), only render pages that likely contain visual content (diagrams, figures) — skip text-heavy pages already captured by step 1.
Combine text and visual information for full understanding.
- **PPTX files**: A `.pptx` is a zip archive containing XML slides and media.
Use this two-step extraction process: 1. **Text extraction** — run a Python script with `python-pptx` to parse all slides and extract text, tables, notes, and shape structure:
PYTHONIOENCODING=utf-8 python -c "
from pptx import Presentation
import sys, os
prs = Presentation(sys.argv[1])
for i, slide in enumerate(prs.slides, 1):
print(f'=== SLIDE {i} ===')
for shape in slide.shapes:
if shape.has_text_frame:
for para in shape.text_frame.paragraphs:
text = para.text.strip()
if text: print(text)
if shape.has_table:
for row in shape.table.rows:
cells = [cell.text.strip() for cell in row.cells]
print(' | '.join(cells))
if slide.has_notes_slide and slide.notes_slide.notes_text_frame:
notes = slide.notes_slide.notes_text_frame.text.strip()
if notes: print(f'[Notes: {notes}]')
" "<FILE_PATH>"2. **Image extraction** — extract all images from the pptx media folder, then read them (you are multimodal and can see images directly):
python -c "
import zipfile, os, sys
pptx_path = sys.argv[1]
out_dir = os.path.splitext(pptx_path)[0] + '_media'
os.makedirs(out_dir, exist_ok=True)
with zipfile.ZipFile(pptx_path) as z:
media = [n for n in z.namelist() if n.startswith('ppt/media/')]
for m in media:
data = z.read(m)
fname = os.path.basename(m)
with open(os.path.join(out_dir, fname), 'wb') as f:
f.write(data)
print(os.path.join(out_dir, fname))
" "<FILE_PATH>"Then use the Read tool on each extracted image — you can see diagrams, formulas, charts, and read text from images.
Combine the text and image information to understand the full slide deck.
- **Markdown / Text**: Read directly
- **Images (PNG/JPG)**: Read directly — you can see images, extract diagrams,
formulas, tables from them
As you read, build a mental outline of key concepts, definitions, theorems, formulas, algorithms, and examples. Prioritize `exam_focus` topics.
Step 2.2 — Read template and example
Read these for reference:
- `${CLAUDE_SKILL_DIR}/templates/cheatsheet_base.tex`
- `${CLAUDE_SKILL_DIR}/examples/sample_output.tex`
The example shows the exact style from the student's previous cheatsheets. Match this style precisely.
Step 2.3 — Generate cheatsheet.tex
**CRITICAL: Read the config values from `.cheatsheet_config.json` and apply them exactly. Do NOT use hardcoded defaults. Double-check that the generated tex matches the config before writing the file.**
Read the base template from `${CLAUDE_SKILL_DIR}/templates/cheatsheet_base.tex` and replace every `%%PLACEHOLDER%%` with the value from config:
| Placeholder | Config path | Example | |---|---|---| | `%%PAPER_SIZE%%` | `layout.paper_size` | `letterpaper` | | `%%MARGIN%%` | `layout.margin_mm` + `mm` | `4mm` | | `%%FONT_FAMILY%%` | `layout.font_
Turn your course slides and PDFs into dense, exam-ready LaTeX cheatsheets — powered by Claude Code. One command. Browser-based config. AI-generated LaTeX. Iterative editing loop. Done.

