Typst 是一个全新的基于标记的排版系统,旨在拥有与 LaTeX 同等强大功能的同时,更加易于学习和使用。Typst 具备:
- 内置标记语法,覆盖最常见的排版任务
- 灵活的函数,满足其他一切需求
- 紧密集成的脚本系统
- 数学公式排版、参考文献管理等功能
- 增量编译带来的快速编译速度
- 出错时提供友好的错误提示信息
本仓库包含 Typst 编译器及其命令行界面(CLI),这是在本地编译 Typst 文档所需的全部内容。如需最佳写作体验,可以免费注册我们的协作在线编辑器。
我们的文档中提供了一份简明入门教程。如果你想通过一张图感受 Typst 的强大之处,请看下面:
我们来解析一下这段代码:
-
使用 设置规则(set rules) 来配置元素属性,例如页面大小或标题编号。将页面高度设为
auto可使页面自适应内容高度。设置规则涵盖了最常见的配置需求。如需完全控制,也可以使用展示规则(show rules)来彻底重定义元素的外观。 -
使用
= 标题语法插入标题。一个等号表示一级标题,两个表示二级标题,以此类推。Typst 还有更多类似的轻量级标记语法;完整列表请参阅语法参考文档。 -
数学公式用美元符号包裹。在公式内容两侧添加额外空格,可将其放入独立块中。多字母标识符会被解释为 Typst 定义和函数,除非用引号包裹。因此,像
floor和sqrt这样的命令无需反斜杠。phi.alt则对phi应用alt修饰符,以选择特定的符号变体。 -
接下来是[脚本]。要在 Typst 文档中输入代码,可以写一个井号后跟表达式。我们定义了两个变量和一个递归函数来计算第 n 个斐波那契数,然后将结果展示在一个居中对齐的表格中。表格函数按行接收单元格内容,因此我们先传入公式
$F_1$到$F_8$,再传入计算出的斐波那契数。我们对两者都应用了展开运算符(..),因为它们都是数组,而我们希望将数组项作为独立参数传入。
代码示例的文本版本。
#set page(width: 10cm, height: auto)
#set heading(numbering: "1.")
= 斐波那契数列
斐波那契数列通过递推关系
$F_n = F_(n-1) + F_(n-2)$ 定义。
它也可以用 _闭式表达式_ 表示:
$ F_n = round(1 / sqrt(5) phi.alt^n), quad
phi.alt = (1 + sqrt(5)) / 2 $
#let count = 8
#let nums = range(1, count + 1)
#let fib(n) = (
if n <= 2 { 1 }
else { fib(n - 1) + fib(n - 2) }
)
该数列的前 #count 个数字为:
#align(center, table(
columns: count,
..nums.map(n => $F_#n$),
..nums.map(n => str(fib(n))),
))Typst 的命令行界面(CLI)可通过以下多种方式获取:
-
从发布页面获取 Typst 最新版本的源码和预编译二进制文件。下载适合你平台的压缩包,并将其解压到
PATH环境变量包含的目录中。要持续跟进后续更新,可直接运行typst update。 -
通过不同的包管理器安装 Typst。请注意,包管理器中的版本可能略滞后于最新发布版本。
- Linux:
- macOS:
brew install typst - Windows:
winget install --id Typst.Typst
-
如果你已安装 Rust 工具链,可以通过以下命令安装:
- 最新发布的 Typst 版本:
cargo install --locked typst-cli - 开发版本:
cargo install --git https://github.com/typst/typst --locked typst-cli
- 最新发布的 Typst 版本:
-
Nix 用户可以:
- 使用
nix-shell -p typst安装typst包 - 使用
nix run github:typst/typst-flake -- --version构建并运行 Typst flake
- 使用
-
Docker 用户可以运行预构建镜像:
docker run ghcr.io/typst/typst:latest --help
安装 Typst 后,可按如下方式使用:
# 在工作目录中创建 `file.pdf`。
typst compile file.typ
# 在指定路径创建 PDF 文件。
typst compile path/to/source.typ path/to/output.pdf你还可以监视源文件并在更改时自动重新编译。这比每次都从头编译更快,因为 Typst 支持增量编译。
# 监视源文件并在更改时重新编译。
typst watch file.typTypst 还允许你为项目添加自定义字体路径,并列出它发现的所有字体:
# 添加额外的字体搜索目录。
typst compile --font-path path/to/fonts file.typ
# 列出系统及指定目录中发现的所有字体。
typst fonts --font-path path/to/fonts
# 或通过环境变量设置(Linux 语法)。
TYPST_FONT_PATHS=path/to/fonts typst fonts其他 CLI 子命令和选项请见下方:
# 打印可用的子命令和选项。
typst help
# 打印某个子命令的详细用法。
typst help watch如果你更喜欢集成 IDE 般的体验,支持自动补全和即时预览,可以查看我们的免费网页应用。此外,还有一个社区创建的语言服务器 Tinymist,已集成到各种编辑器扩展中。
社区主要聚集在论坛和 Discord 服务器。论坛是提问、帮助他人和分享 Typst 作品的绝佳场所。Discord 服务器更适合快速提问、讨论贡献事宜或随意聊天。期待你的加入!
Typst Universe 是社区分享模板和包的地方。如果你想分享自己的作品,可以提交到我们的包仓库。
如果你在社区中有不愉快的经历,请联系我们。
我们非常欢迎社区的贡献。如果你遇到 bug,欢迎提交 issue。如果你想实现新功能或修复 bug,请按照贡献指南中的步骤操作。
要自行构建 Typst,首先确保你已安装最新稳定版 Rust。然后克隆本仓库并使用以下命令构建 CLI:
git clone https://github.com/typst/typst
cd typst
cargo build --release优化后的二进制文件将存放在 target/release/ 目录中。
另一种贡献方式是向社区分享包。
本分支在上游 Typst 编译器的基础上增加了图片生成增强功能和字符级标注功能。
- 新增光栅格式:除 PNG 外,新增 JPEG 和 BMP 导出。
- DPI 控制:
--ppi/--dpi参数控制所有光栅格式的分辨率。 - 格式自动识别:根据文件扩展名自动推断输出格式(
.png、.jpg/.jpeg、.bmp)。
- X-AnyLabeling JSON 导出:
--label-json生成包含逐字符边界框的 JSON 文件。shape_type固定为"rotation"。imageData包含 base64 嵌入的光栅图片(不使用imagePath)。points=[[x1, y1], [x2, y2], [x3, y3], [x4, y4]],为定向边界框的四个角点像素坐标 (顺序:左上 → 右上 → 右下 → 左下)。direction固定为0。
- 可视化叠加:
--label-viz生成额外图片,在每个字符上绘制红色定向边界框。 - 支持 Typst 帧树中累积的任意变换(旋转、缩放等)。
# 以 300 DPI 导出 JPEG
typst compile input.typ output.jpg --dpi 300
# 导出 BMP + 标注 JSON + 可视化图
typst compile input.typ output.bmp --label-json --label-viz --ppi 150
# 仅导出 PNG 及标注
typst compile input.typ output.png --label-json本项目提供了 build-timestamp 工具,可在编译完成后自动将二进制文件复制一份并附加 yyyyMMddHHmmss 时间戳后缀:
# 使用 cargo alias 编译 release 版本
cargo build-ts --release
# 编译后的二进制文件会同时存在于:
# target/release/typst # 原始文件名
# target/release/typst_20260520211708 # 带时间戳后缀的副本也可以直接运行构建脚本:
./build_with_timestamp.sh --release在 Apple Silicon Mac 上交叉编译 Windows 可执行文件(typst.exe)的步骤:
1. 安装 rustup 工具链及目标
# 确保使用 rustup 而非 Homebrew Rust
rustup target add x86_64-pc-windows-gnu --toolchain stable-aarch64-apple-darwin2. 安装 MinGW 交叉编译器
brew install mingw-w643. 编译
CARGO_BUILD_RUSTC="$HOME/.rustup/toolchains/stable-aarch64-apple-darwin/bin/rustc" \
CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER="/opt/homebrew/bin/x86_64-w64-mingw32-gcc" \
cargo build --release --target x86_64-pc-windows-gnu -p typst-cli4. 输出
编译产物位于 target/x86_64-pc-windows-gnu/release/typst.exe(约 42 MB,PE32+ x86-64)。
注意:macOS 上 Homebrew 安装的 Rust 不含 Windows 交叉编译 sysroot,必须使用 rustup 的
rustc(通过CARGO_BUILD_RUSTC指定)。MSVC 目标(x86_64-pc-windows-msvc)需要 Windows 链接器lib.exe,在 macOS 上不可用,因此改用 GNU 目标(x86_64-pc-windows-gnu)配合 MinGW 链接器。
IPA: /taɪpst/。"Ty" 发音同 Typesetting(排版)中的 "Ty","pst" 发音同 Hipster(潮人)中的 "pst"。书写 Typst 时,请将其作为专有名词,首字母 "T" 大写。
Typst 的所有设计都围绕三个核心目标:强大、简洁、高性能。我们认为是时候拥有一个能匹敌 LaTeX 强大功能、易于学习和使用、同时快到足以实现即时预览的系统了。为实现这些目标,我们遵循三项核心设计原则:
-
通过一致性实现简洁: 如果你知道如何在 Typst 中做一件事,你应该能将这种知识迁移到其他事情上。如果同一件事有多种做法,那么其中一种应该与另一种处于不同的抽象层次。例如,
= 引言和#heading[引言]功能相同是可以接受的,因为前者只是后者的语法糖。 -
通过可组合性实现强大: 让事物变得灵活有两种方式:为所有功能提供独立开关,或者提供少量可多种组合使用的开关。Typst 的设计遵循后者。我们提供可组合的系统,其组合方式甚至可能超出我们的想象。TeX 也属于后者,但它有点底层,因此人们转而使用 LaTeX。但在 LaTeX 中,可组合性并不强,取而代之的是"一个功能一个包"(
\usepackage{开关})。 -
通过增量性实现性能: 所有 Typst 语言特性都必须支持增量编译。幸运的是,我们有
comemo,一个在后台完成大部分繁重工作的增量编译系统。
我们要感谢所有支持 Typst 开发的人,无论是通过 GitHub 赞助者 还是其他方式。特别感谢1:
- Posit 资助了一名全职编译器工程师
- NLnet 通过 NGI Zero Core 基金的多项资助支持 Typst 的工作:
- Science & Startups 通过柏林创业奖学金在 2023 年 1 月至 6 月期间资助了 Typst 的开发
- Zerodha 提供了一次性慷慨赞助
Footnotes
-
此列表仅包含对我们开源工作贡献超过或预计超过 1 万欧元的资助。 ↩

