返回 Skill 列表
extension
分类: 开发与工程无需 API Key

typst

编写和创建Typst文档(.typ文件)。当用户要求创建、编写、编辑或将文档转换为Typst格式,书写Typst标记语言,使用Typst创建学术论文、报告或文档,将LaTeX转换为Typst,或处理.typ文件时使用。Typst是一种基于现代标记的排版系统,是LaTeX的替代品。

person作者: jakexiaohubgithub

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

  1. Forgetting # in markup: Function calls need # prefix in markup mode

    • Wrong: rect(...)
    • Right: #rect(...)
  2. Math block spacing: Block equations need spaces inside $

    • Inline: $x^2$
    • Block: $ x^2 $ (spaces required)
  3. Content vs strings: Use [content] for markup, "string" for plain text

    • #text(fill: red)[Hello] — content with markup
    • #lower("HELLO") — string manipulation
  4. Semicolons in expressions: End expression early with ;

    • #x; to prevent next char joining expression
  5. Multi-letter math variables: Wrap in quotes or they become function calls

    • Wrong: $error$ (looks for error function)
    • Right: $"error"$ or single letters $e$

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, alignment
  • references/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