/extract-tikz¶
figuresMITpaper-draftingExtract TikZ Diagrams to SVG¶
Extract TikZ diagrams from the Beamer source, compile to multi-page PDF, and convert each page to SVG for use in Quarto slides.
Creating a brand-new diagram instead of extracting? Use
/new-diagram— it scaffolds fromtemplates/tikz-snippets/with the prevention rules pre-applied.
Steps¶
Step 0: Freshness Check (MANDATORY)¶
Before compiling, verify that extract_tikz.tex matches the current Beamer source.
- Find the Beamer source:
ls Slides/$ARGUMENTS*.tex - Extract all
\begin{tikzpicture}blocks from Beamer - Compare with
Figures/$ARGUMENTS/extract_tikz.tex - If ANY difference exists: update extract_tikz.tex from the Beamer source
- If extract_tikz.tex doesn't exist: create it from scratch
Step 1: Prevention pre-check (MANDATORY — halt on violation)¶
Before compiling, verify every \begin{tikzpicture} block in Figures/$ARGUMENTS/extract_tikz.tex satisfies the prevention rules in .claude/rules/tikz-prevention.md. The pre-check is a small Python script shared with /new-diagram so both skills enforce identical behavior:
What it checks:
- P3 —
scale=Xwithout node scaling. Barescale=shrinks coordinates but not text. Allowed forms:scale=X, every node/.style={scale=X}orscale=X, transform shape. The checker parses the full\begin{tikzpicture}[...]options block even when it spans multiple lines. - P4 — Directional keyword on edge labels. Every edge label (
nodeinside a\draw) must carryabove,below,left,right, or a compound (e.g.above left).midwayalone is a path position, not a direction. The checker scans the full\draw ...;statement so\drawon one line andnode[...]{...}on the next line are still linked.
Note what the pre-check does NOT enforce: P1 (boxed-node explicit dimensions) and P2 (coordinate-map comment) are structural and get flagged by tikz-reviewer in Step 8, not here.
Exit codes: 0 = all files pass, 1 = one or more P3/P4 violations (stderr lists file, line, snippet, rule), 2 = usage error.
If exit is non-zero: halt, report the offending lines, and ask the user to fix the Beamer source (single source of truth). Do NOT compile.
Step 2: Navigate to the lecture's Figures directory¶
Step 3: Compile the extract_tikz.tex file¶
Step 4: Count the number of pages¶
Step 5: Convert each page to SVG using 0-BASED INDEXING¶
CRITICAL: PDF pages are 1-indexed, but output SVG files are 0-indexed!
PAGES=$(pdfinfo extract_tikz.pdf | grep "Pages:" | awk '{print $2}')
for i in $(seq 1 $PAGES); do
idx=$(printf "%02d" $((i-1)))
pdf2svg extract_tikz.pdf tikz_exact_$idx.svg $i
done
Step 6: Sync to docs/ for deployment¶
Step 7: Verify SVG files¶
- Read 2-3 SVG files to confirm they contain valid SVG markup
- Confirm file sizes are reasonable (not 0 bytes)
Step 8: Visual Quality Review (tikz-reviewer)¶
Spawn the tikz-reviewer agent (via Task with subagent_type=tikz-reviewer) on the TikZ source blocks to catch label overlaps, geometric errors, and visual inconsistencies. The reviewer cites specific passes and formulas from .claude/rules/tikz-measurement.md. If it returns NEEDS REVISION or REJECTED, loop:
- Apply the recommended fixes to the Beamer
.texsource (single source of truth). - Re-copy the updated block to
extract_tikz.tex. - Re-run the prevention pre-check (Step 1) and compile.
- Regenerate SVGs, re-sync.
- Re-invoke tikz-reviewer.
Stop when tikz-reviewer returns APPROVED (max 5 rounds).
Step 9: Report results¶
Source of Truth Reminder¶
TikZ diagrams MUST be edited in the Beamer .tex file first, then copied verbatim to extract_tikz.tex. See .claude/rules/single-source-of-truth.md.