typst
Typst Document Writing
Typst is a markup-based typesetting system. Files use .typ extension. No boilerplate required—just start writing.
Three Modes
Typst has three syntactical modes:
| Mode | Default In | Enter Via | Exit Via |
|---|---|---|---|
| Markup | .typ files |
[..] from code |
# for code |
| Code | After # |
#expr or { } |
[..] for markup |
| Math | Never | $..$ |
End $ |
Essential Syntax
Markup Mode (default)
= Heading 1
== Heading 2
*bold* _italic_ `code`
- bullet list
+ numbered list
/ Term: definition
@label-ref
<my-label>
Code Mode (prefix with #)
#let x = 5
#if x > 3 [larger] else [smaller]
#for i in range(3) [Item #i. ]
#rect(width: 2cm, fill: blue)
#image("photo.png", width: 50%)
Math Mode (wrap in $)
Inline $x^2 + y^2 = z^2$ math.
Block math (note spaces inside dollars):
$ sum_(k=1)^n k = (n(n+1))/2 $
Critical Patterns
Set Rules (configure defaults)
#set page(margin: 2cm)
#set text(font: "New Computer Modern", size: 11pt)
#set par(justify: true)
#set heading(numbering: "1.1")
Show Rules (restyle elements)
// Show-set: apply set rule to specific element
#show heading: set text(navy)
// Transform: completely redefine
#show heading: it => [
#text(blue)[#it.body]
]
Function Calls
// Named arguments after positional
#rect(width: 2cm, height: 1cm, fill: aqua)
// Trailing content block (common pattern)
#figure(
image("chart.png", width: 80%),
caption: [Analysis results],
) <fig-results>
Tables
#table(
columns: (auto, 1fr, 1fr),
[Header 1], [Header 2], [Header 3],
[Row 1], [Data], [Data],
[Row 2], [Data], [Data],
)
Grids (layout, not semantic)
#grid(
columns: (1fr, 1fr),
gutter: 1em,
[Left column],
[Right column],
)
Math Mode Details
Key Differences from LaTeX
| LaTeX | Typst |
|---|---|
\frac{a}{b} |
a/b or frac(a,b) |
\sqrt{x} |
sqrt(x) |
\sum_{i=1}^{n} |
sum_(i=1)^n |
\alpha, \beta |
alpha, beta |
\mathbf{x} |
bold(x) |
\text{word} |
"word" |
\left( \right) |
Auto-scales, or lr(( )) |
\begin{pmatrix} |
mat(1, 2; 3, 4) |
\begin{cases} |
cases(a "if" x, b "else") |
\vec{v} |
arrow(v) or vec(a, b, c) |
Math Syntax
$ x^2 $ // superscript
$ x_n $ // subscript
$ x_(i+1) $ // grouped subscript
$ (a+b)/c $ // fraction
$ sqrt(x) $ // square root
$ root(3, x) $ // nth root
$ sum_(i=0)^n $ // sum with limits
$ integral_a^b $ // integral
$ mat(1, 2; 3, 4) $ // matrix (semicolon = row break)
$ vec(x, y, z) $ // column vector
$ cases(1 "if" x > 0, 0 "else") $
Multi-letter Names
$ "error" = x - hat(x) $ // quotes for text
$ pi r^2 $ // single letters = variables
$ A B $ // space = multiplication
Common Pitfalls
-
Forgetting
#in markup: Function calls need#prefix in markup mode- Wrong:
rect(...) - Right:
#rect(...)
- Wrong:
-
Math block spacing: Block equations need spaces inside
$- Inline:
$x^2$ - Block:
$ x^2 $(spaces required)
- Inline:
-
Content vs strings: Use
[content]for markup,"string"for plain text#text(fill: red)[Hello]— content with markup#lower("HELLO")— string manipulation
-
Semicolons in expressions: End expression early with
;#x;to prevent next char joining expression
-
Multi-letter math variables: Wrap in quotes or they become function calls
- Wrong:
$error$(looks forerrorfunction) - Right:
$"error"$or single letters$e$
- Wrong:
Document Templates
Academic Paper
#set document(title: [Paper Title], author: "Author")
#set page(margin: 2.5cm, numbering: "1")
#set text(font: "New Computer Modern", size: 11pt)
#set par(justify: true, leading: 0.65em)
#set heading(numbering: "1.1")
#align(center)[
#text(17pt, weight: "bold")[Paper Title]
#v(1em)
Author Name \
Institution \
#link("mailto:email@example.com")
]
#outline()
= Introduction
#lorem(50)
= Methods
#lorem(50)
Report with Figures
#set page(header: [Report Title #h(1fr) #counter(page).display()])
= Results
#figure(
table(
columns: 3,
[A], [B], [C],
[1], [2], [3],
),
caption: [Sample data],
) <tab-data>
As shown in @tab-data, ...
Symbol Reference
Common symbols: => (⇒), -> (→), <- (←), != (≠), <= (≤), >= (≥), ... (…), ~ (non-breaking space)
Greek: alpha, beta, gamma, delta, epsilon, theta, lambda, mu, pi, sigma, omega
Variants: arrow.r, arrow.l.double, plus.circle — append modifiers with dots
See full list: https://typst.app/docs/reference/symbols/
Additional References
For complex tasks, consult these reference files:
references/math.md: Comprehensive math mode syntax, symbols, matrices, alignmentreferences/advanced.md: Scripting, templates, page layout, bibliography, imports
Compilation
typst compile document.typ # → document.pdf
typst compile document.typ out.pdf # custom output
typst watch document.typ # auto-recompile on save
More from diegosouzapw/awesome-omni-skill
music-assistant
Control Home Assistant Music Assistant - browse library, search, play, manage preferences and moods.
12agent-code-generator
Generates Agent definitions (.md files) based on user intent and standard templates.
6terragrunt-generator
Comprehensive toolkit for generating best practice Terragrunt configurations (HCL files) following current standards and conventions. Use this skill when creating new Terragrunt resources (root configs, child modules, stacks, environment setups), or building multi-environment Terragrunt projects.
6api contract sync manager
Validate OpenAPI, Swagger, and GraphQL schemas match backend implementation. Detect breaking changes, generate TypeScript clients, and ensure API documentation stays synchronized. Use when working with API spec files (.yaml, .json, .graphql), reviewing API changes, generating frontend types, or validating endpoint implementations.
5upstash/workflow typescript sdk skill
Lightweight guidance for using the Upstash Workflow SDK to define, trigger, and manage workflows. Use this Skill whenever a user wants to create workflow endpoints, run steps, or interact with the Upstash Workflow client.
5upstash/search typescript sdk
Entry point for documentation skills covering Upstash Search quick starts, core concepts, and TypeScript SDK usage. Use when a user asks how to get started, how indexing works, or how to use the TS client.
5