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
