Typst 环境搭建 & 语法快速入门
最近看到一个新兴的标记语言 Typst,看到没有多少中文资料,遂整合了一下,发布此文。
什么是 Typst?
官网定义:
Typst is a new markup-based typesetting system for the sciences. It is designed to be an alternative both to advanced tools like LaTeX and simpler tools like Word and Google Docs. Our goal with Typst is to build a typesetting tool that is highly capable and a pleasure to use.
翻译一下:
Typst是一种面向科学领域的新型基于标记语言的排版系统。它旨在成为LaTeX等高级工具与Word及Google Docs等简易工具的替代方案。我们开发Typst的目标是打造一款功能强大且使用愉悦的排版工具。
为什么选择 Typst?
(以下对比由腾讯元宝提供)
| 维度 | Markdown | LaTeX | Typst |
|---|---|---|---|
| 定位 | 轻量级标记语言 | 专业排版系统 | 现代文档编排工具 |
| 学习曲线 | 极低(1小时上手) | 陡峭(几个月精通) | 中等(1周熟练) |
| 语法复杂度 | ⭐☆☆☆☆ 极简 | ⭐⭐⭐⭐⭐ 极复杂 | ⭐⭐☆☆☆ 适中 |
| 实时预览 | ✅ 优秀(所有编辑器) | ❌ 需编译 | ✅ 内置实时预览 |
| 编译速度 | 即时 | 慢(大型文档数分钟) | 快(毫秒级) |
| 数学公式 | 基础支持(KaTeX) | 行业金标准 | 强大(类似LaTeX) |
| 参考文献 | 需插件(如Pandoc) | BibTeX(强大但复杂) | 内置(简单易用) |
| 代码高亮 | 基础 | 需listings/minted包 | 内置(支持多种语言) |
| 图表绘制 | 需Mermaid等扩展 | pgfplots/tikz(强大难学) | 内置绘图功能 |
| 中文支持 | ✅ 好 | ⚠️ 需配置 | ✅ 开箱即用 |
| 模板生态 | 有限(主题样式) | 极丰富(期刊/学位论文) | 成长中(官方模板) |
| 协作友好 | ✅ 极好(纯文本) | ❌ 差(冲突难解决) | ✅ 好(类似Markdown) |
| 版本控制 | ✅ 完美(Git友好) | ⚠️ 可管理但复杂 | ✅ 好(文本格式) |
| 输出格式 | HTML/PDF(需转换) | PDF为主 | PDF为主(支持HTML) |
| 包管理 | ❌ 无 | 复杂(CTAN+TeX Live) | 简单(内置包管理器) |
| 错误提示 | 基本无 | 晦涩难懂 | 友好明确 |
| 编程能力 | 无 | 有限(宏系统复杂) | 完整(函数/变量/控制流) |
| 价格 | 免费 | 免费 | 免费(云服务付费) |
鉴于目前 Typst 的教程较少,笔者便自习了官网的教程,整合成这一篇入门教程。制作不易,还请点赞支持。
安装 Typst
根据 Typst 的 Github 地址 目前有几种方法安装 Typst
Github Releases
前往 Releases 界面安装即可
Linux
建议通过 Repology 或者 Snap Store 进行安装
macOS
终端运行:brew install typst
Windows
终端运行:winget install --id Typst.Typst
Rust
若你的系统环境已有Rust,则也可以终端运行:cargo install --locked typst-cli
另外 Github 还提供了 Nix 和 Docker 安装方法,此处不再赘述。笔者使用的是 WSL Ubuntu环境,使用的是 cargo 安装方法,实测有效。注意有个小坑,需要提前安装好 OpenSSL,否则会报错退出。
安装方法为终端执行命令:
sudo apt install libssl-dev pkg-config
安装成功检测
终端运行:typst --version,输出版本号即为成功。
字体配置
安装字体即可,我这边使用思源宋体和 Jetbrains Mono
sudo apt install -y fonts-noto-cjk fonts-noto-cjk-extra
sudo apt install -y fonts-jetbrains-mono
入门 Typst 语法
为了方便学习,我们写一份 Typst 文件从中学习。
#set bibliography(
style: "gb-7714-2015-numeric",
title: "参考文献"
)
#show link: underline
// 正文部分
#outline(title: "目录")
= 第一章:基础语法示例
这是正文段落。
你可以正常输入中文,系统会用安装的思源宋体渲染。
如果你需要*强调*或者_斜体_,用星号或下划线就行。
== 列表语法
- 无序列表项1
- 无序列表项2
- 嵌套列表(缩进两个空格)
- 继续嵌套
+ 有序列表项1
+ 有序列表项2
+ 嵌套有序列表
+ 继续
== 代码块示例
定义一个函数:
```python
def greet(name):
"""简单的问候函数"""
return f"你好,{name}!"
# 调用函数
print(greet("Typst"))
```
行内代码也可以用 `let x = 10` 这样写。
== 数学公式
这是行内公式:$E = m c^2$。
独立公式:
$
sum_(i=1)^n i = (n(n+1))/2
$
更复杂的积分公式:
$
integral_1^(e^(sqrt(2m))) (ln x)/x dif x = m
$
== 表格示例
#table(
columns: (1fr, 2fr, 1fr),
stroke: 0.5pt,
[*语言*], [*用途*], [*难度*],
[Python], [数据科学], [低],
[Rust], [系统编程], [高],
[JavaScript], [前端], [低],
)
== 图片插入
#figure(
image("1.png", width: 60%),
caption: [官网]
) <fig1>
如图 @fig1 所示,typst 是属于未来的标记语言。
== 自定义函数
#let note(content) = [
#block(
fill: rgb(95%, 95%, 100%),
stroke: 0.5pt + blue,
inset: 1em,
[*注意:* #content]
)
]
下面用一下这个函数:
#note[这里是可以自定义的提示框,用来强调重要信息。]
= 第二章:还会继续...
这里可以继续写你的内容。
== 链接
欲了解更多,请访问 https://typst.app/docs/ 或者 #link("https://juejin.cn")[自行搜索掘金]
== 引用
这是一段需要注释的文字。
如果需要引用参考文献,可以这样写 @typstsite。
#bibliography("1.bib")
= 术语表
/ Typst: 一种现代的标记语言,旨在提供一种 LaTeX 等标记语言的替代品。
/ LaTeX: 老牌标记语言,以功能强大著称。
/ GB/T 7714-2015: 国标,中国最常用的参考文献著录标准。
将其保存为 1.typ,并在同目录下的 1.bib下写入内容:
@misc{typstsite,
author = {Typst},
title = {Typst官网},
year = {2026},
url = {https://typst.app/docs},
urldate = {2026-02-28}
}
BibTeX不是本章重点,读者可以将其理解为一种用于管理文献和生成参考文献目录的工具。
终端运行:
typst watch 1.typ
会在同目录下生成 1.pdf,打开即可。如果只需要编译,可以使用 typst compile 1.typ。
接下来逐行解析该文件。
目录
#outline(title: "目录")
字如其名,这一行表示引入目录。标准 Markdown 中没有与之对应的语法,部分方言支持 [[TOC]] 语法。title 参数设置题目,否则会表示为 Contents。
标题
= 第一章:基础语法示例
这一行相当于 Markdown 中的 # 第一章:基础语法示例,表示一级标题。同理,也有== 二级标题,=== 三级标题……
强调 & 斜体
如果你需要*强调*或者_斜体_,用星号或下划线就行。
与 Markdown 的 **强调** 和 _斜体_ 相似,使用 *强调* 和 _斜体_ 语法。
列表
- 无序列表项1
- 无序列表项2
- 嵌套列表(缩进两个空格)
- 继续嵌套
+ 有序列表项1
+ 有序列表项2
+ 嵌套有序列表
+ 继续
使用 - 创建无序列表,+ 创建有序列表;缩进表示嵌套。
代码块 & 行内代码
```python
def greet(name):
"""简单的问候函数"""
return f"你好,{name}!"
# 调用函数
print(greet("Typst"))
```
行内代码也可以用 `let x = 10` 这样写。
与 Markdown 一模一样,使用一对 ``` 表示代码块和一对 ` 表示行内代码的语法。
公式 & 公式块
这是行内公式:$E = m c^2$。
独立公式:
$
sum_(i=1)^n i = (n(n+1))/2
$
更复杂的积分公式:
$
integral_1^(e^(sqrt(2m))) (ln x)/x dif x = m
$
乍一看有点像 LaTeX,但实际上 Typst 有自己的一套语法。比如 \sum \int \sqrt 这类被舍弃,你可以直接写 sum integral sqrt;{...} 被 (...) 取代,更符合直觉。需要注意的是,(ln x)/x 渲染成分数而不是除法形式;如果你希望使用类似 LaTeX 的显式分数风格,请使用 frac(1, 2)这样的形式。公式的语法比较重要,需要自行学习。
表格
#table(
columns: (1fr, 2fr, 1fr),
stroke: 0.5pt,
[*语言*], [*用途*], [*难度*],
[Python], [数据科学], [低],
[Rust], [系统编程], [高],
[JavaScript], [前端], [低],
)
通过 columns 规定各列宽度。学过前端的读者会觉得比较熟悉,这其实是类似 CSS Grid 的写法。1fr 表示 1份,columns: (1fr, 2fr, 1fr) 表示第二列的宽度是第一列的两倍,第三列与第一列相同。stroke 表示表格边框宽度。接下来即可写数据,一行一行录入即可,注意使用 [...] 包裹。
图片
#figure(
image("1.png", width: 60%),
caption: [官网]
) <fig1>
如图 @fig1 所示,typst 是属于未来的标记语言。
其实最简单的图片插入比这个还简单,是 #image("1.png", width: 60%) 即可(width 也可以不加)。而通过 figure 进行,会自动将图片居中,可以加 caption,并且通过 <fig1> 的语法,可以在文档其他地方使用 @fig1 进行引用。
自定义函数
#let note(content) = [
#block(
fill: rgb(95%, 95%, 100%),
stroke: 0.5pt + blue,
inset: 1em,
[*注意:* #content]
)
]
下面用一下这个函数:
#note[这里是可以自定义的提示框,用来强调重要信息。]
自定义函数是 Typst 的重头戏,你会注意到我们讲了 #outline #table #figure #image语句,这些都是以 # 开头的,表示这是一个函数。作为一个卓越的语言,Typst 是图灵完备并且支持自定义函数、变量等的。不是 LaTeX 的那种繁复的宏展开,而是一种真正的优雅的函数。这里的函数没有用到 Typst 的精髓,后面有时间我可能会讲讲。其实学过前端的读者,可以将其类比成 JSX。
链接
欲了解更多,请访问 https://typst.app/docs/ 或者 #link("https://juejin.cn")[自行搜索掘金]
注意:无需其他配置,只要有了网址,默认就是链接!这是第一种用法。
第二种,使用 #link 语法,这类似于 Markdown 的 [文字](链接网址) 语法。
由于我们在开头有一段 #show link: underline,渲染出来的链接会自带下划线,这是让别人知道这个词语可以被点击的好方法。
引用
这是一段需要注释的文字。
如果需要引用参考文献,可以这样写 @typstsite。
#bibliography("1.bib")
使用 @ 语法进行引入,并在文档最末使用 #bibliography(...)语法引入参考文献的 BibTeX 文件。由于我们在开头有一段:
#set bibliography(
style: "gb-7714-2015-numeric",
title: "参考文献"
)
故会按照 GB/T 7714-2015 标准渲染;title 规定了渲染的标题为 参考文献 而不是默认的 Bibliography。
术语表
/ Typst: 一种现代的标记语言,旨在提供一种 LaTeX 等标记语言的替代品。
/ LaTeX: 老牌标记语言,以功能强大著称。
/ GB/T 7714-2015: 国标,中国最常用的参考文献著录标准。
使用 / Term: Explanation 表示术语,简洁明了。
总结
Typst 是一种优雅的标记语言,在不舍弃源文件可读性的前提下大幅提升了功能,无论是学习曲线、效果还是可玩性都非常强。如果你在考虑写点什么,Typst绝对是你最值得试一试的选项。
全文结,觉得不错的话,点个赞吧!