提示:本教程存在过时问题,更详细教程请阅读 小蓝书Typst 中文社区导航 FAQ
注意:该中文文档为社区驱动的非官网文档,可能存在错译、漏译或过时等问题,请以官网文档 Documentation 为准,如发现错漏,也欢迎 您的贡献镜像)。Typst 非官方中文交流 QQ 群:793548390
Warning: the Chinese document is a community-driven non-official document, there may be mistranslation, omission or outdated problems, please refer to the official website documentation.
Typst 中文文档

语法

Typst 是一种标记语言。 这意味着,使用简单的语法就可以进行常用的布局操作, 再辅以 set 和 show 规则,格式化文档更加简单,更加自动化, 这些均是基于紧密集成在 Typst 内的脚本语言, 其内置大量常用函数,用户亦可根据需求自定义函数。

标记模式

Typst 为常用文档元素内置了语法标记。 这些语法标记大多只是相关函数的快捷表达方式, 下表列出了所有语法标记,以及它们的详细使用的链接地址。

名称示例详情链接
段落中断空行parbreak
着重强调*strong*strong
强调_emphasis_emph
代码段`print(1)`raw
链接https://typst.app/link
标签<intro>label
引用@introref
标题= Headingheading
无序列表- itemlist
有序列表+ itemenum
术语列表/ Term: descriptionterms
数学公式$x^2$Math
行中断\linebreak
智能引号'single' or "double"smartquote
快捷符号~, ---Symbols
代码表达式#rect(width: 1cm)Scripting
转义字符Tweet at us \#adBelow
注释/* block */, // lineBelow

数学模式

数学模式是一种特殊的语法标记模式,专门用来输入数学公式。 通过 $ 字符包裹一个数学公式, 如果这个公式头尾都至少一个空格(例如$ x^2 $),这个公式将会形成一个文档块,单独占用一行, 如果头尾没有空格(例如$x^2$),这个公式将会排版在行内, 下面是针对数学模式的语法概述:

名称示例详情链接
行内数学公式$x^2$Math
块级数学公式$ x^2 $Math
底部附缀$x_1$attach
顶部附缀$x^2$attach
分数$1 + (a+b)/5$frac
行中断$x \ y$linebreak
对齐点$x &= 2 \ &= 3$Math
变量访问$#x$, $pi$Math
字段访问$arrow.r.long$Scripting
隐式乘积$x y$Math
快捷符号$->, !=$Symbols
数学公式内字符串$a "is natural"$Math
数学函数调用$floor(x)$Math
代码表达式$#rect(width: 1cm)$Scripting
转义字符$x\^2$Below
注释$/* comment */$Below

代码模式

在代码块和表达式中,新的表达式不再前缀 # 字符。 许多代码语法元素是表达式特有的, 下面列出了代码模式下所有可用的语法:

名称示例详情链接
变量访问xScripting
字面常量1pt, "hey"Scripting
代码块{ let x = 1; x + 2 }Scripting
文档内容块[*Hello*]Scripting
括号表达式(1 + 2)Scripting
数组(1, 2, 3)Array
字典(a: "hi", b: 2)Dictionary
一元运算符-xScripting
二元运算符x + yScripting
赋值x = 1Scripting
字段访问x.yScripting
方法调用x.flatten()Scripting
函数调用min(x, y)Function
匿名函数(x, y) => x + yFunction
let 绑定let x = 1Scripting
命名函数let f(x) = 2 * xFunction
set 规则set text(14pt)Styling
set-if 规则set text(..) if .. Styling
show-set 规则show par: set block(..)Styling
函数式 show 规则show raw: it => {..}Styling
show-everything 规则show: columns.with(2)Styling
条件表语句if x == 1 {..} else {..}Scripting
for 循环for x in (1, 2, 3) {..}Scripting
while 循环while x < 10 {..}Scripting
循环流程控制break, continueScripting
函数返回return xFunction
include 模块include "bar.typ"Scripting
import 模块import "bar.typ"Scripting
从模块内 import 条目import "bar.typ": a, b, cScripting
注释/* block */, // lineBelow

注释

Typst 会忽略注释,最终生成的文档不会包含它们。 它们通常被用于剔除旧版本,或者添加标注说明。 如果一行开头是 //,这行就会被认为是注释:

// our data barely supports
// this claim

We show with $p < 0.05$
that the difference is
significant.
Preview

也可以通过 /**/ 来包裹注释,这种方式,注释可以分布于多行:

Our study design is as follows:
/* Somebody write this up:
   - 1000 participants.
   - 2x2 data design. */
Preview

转义序列

转义序列可以用来插入难于输入的特殊字符,或者 Typst 内有特殊含义的字符。 前缀一个反斜杠转义一个字符,转移序列如果是十六进制, 比如 \u{1f600},就会插入一个 Unicode 码点。 这些类型的转义序列也作用于字符串中。

I got an ice cream for
\$1.50! \u{1f600}
Preview