slides-convert-to-typst
Convert markdown slides to Typst-compatible format via pandoc
Files1
View on GitHubSKILL.md.claude/skills/slides.convert_to_typst/SKILL.md
GitHubGoal
- Convert a markdown slides file to Typst presentation format
- Preserve structure, content, and formatting
- Output clean, well-formatted markdown code suitable for conversion to Typst
Workflow
Read Input File
- Read the markdown slides file (e.g.,
lectures.md)
Apply Conversion Rules
- Systematically fix math, unicode, and formatting
Validate Output
- Verify no content loss and structure preserved
Output File
- Write converted markdown with same base name
- Say in the output file how it was generated, with this comment right after the
metadata-comment block:
// Generated by `.claude/skills/slides.convert_to_typst/SKILL.md`
Quality Checks
- All slide headers and hierarchy preserved
- No content deleted or truncated
- All math expressions wrapped (
$...$) - No unicode math characters remain
- Operators properly formatted with
op() - Code blocks and lists intact
- File is valid markdown
Conventions
LaTeX Custom Commands
- Replace presentation-specific commands with Typst equivalents:
$\EE$->$bb(E)$(blackboard E)$\VV$->$bb(V)$(blackboard V)$\Pr$->$Pr$(remove backslash)
Variables and Math Expressions
- Wrap all variables, parameters, and math expressions in
$...$:- Bad (unwrapped, renders as plain text):
Randomly permute the values of x_j across all samples - Good (wrapped in math mode):
Randomly permute the values of $x_j$ across all samples
- Bad (unwrapped, renders as plain text):
Unicode to LaTeX
- Replace unicode math characters with LaTeX:
Ω->$\Omega$→->$\to$≤->$\leq$×->$\times$
Subscripts and Superscripts
- Use math mode for all subscripts/superscripts:
- Bad (unicode subscript or bare caret, invalid Typst math): P₀ or P^n
- Good (math mode syntax):
$P_0$or$P^n$
Math Operators
- Use
op()for named operators in Typst:- Bad (named operator unwrapped, Typst renders it as variables):
$g^* = arg min_(g in G)$ - Good (wrapped with
op()):$g^* = op("arg min")_(g in G)$ - Also:
$max_i x_i$->$op("max")_i x_i$
- Bad (named operator unwrapped, Typst renders it as variables):
Plain Numbers and Currency
- Do NOT wrap pure numbers in math mode:
- Bad:
The house costs $50k because it has 4 bedrooms ($+\$30$k) - Good:
The house costs \$50k because it has 4 bedrooms (+\$30k)
- Bad:
Block Formulas
- Use Typst code blocks for complex multi-line formulas:
$ Pr(X_1 , ... , X_n) = product_(i = 1)^n Pr(X_i | "Parents"(X_i)) $
Verification
- Make sure that the converted slides render correctly, e.g.,
> gen_slides.py -i <FILE> --notes_to_pdf_args="--skip_action open_pdf" - The output file says that it was generated by
.claude/skills/slides.convert_to_typst/SKILL.md