一个基于标记语言的全新排版系统,既强大又易学。
Typst 是一个全新的基于标记语言的排版系统,目标是在功能上媲美 LaTeX,同时更加易于学习和使用。Typst 拥有以下特性:
- 内建的标记语法,处理常见格式化任务轻而易举
- 灵活的函数,满足各种定制化需求
- 紧密集成的脚本系统
- 数学公式排版、参考文献管理等高级功能
- 得益于增量编译机制的快速编译速度
- 若出错,提供友好的错误信息提示
本代码仓库包含 Typst 编译器及其 CLI(命令行界面),这就是你在本地编译 Typst 文档所需的一切。若想获得最佳写作体验,建议免费注册使用我们的 [在线协作编辑器][app]。
示例
我们在文档中提供了一份 [简单入门教程][tutorial]。但如果你希望通过一张图快速了解 Typst 的强大功能,可以看下面这张示例图:
我们来拆解一下这段示例中发生了什么:
使用 set rules(设置规则)配置元素属性,比如页面大小或标题编号。设置页面高度为
auto
,可以使其根据内容自动调整。Set 规则覆盖了大多数常见配置。如果你需要完全自定义,也可以使用 [show rules][show] 完全重定义某个元素的外观。使用
= Heading
语法插入标题。一个等号表示一级标题,两个等号表示二级标题,以此类推。Typst 提供了很多类似的轻量级标记语法,完整列表请参见 [syntax] 语法参考。[数学公式][math] 使用美元符号括起来。通过在公式内容两边加上空格,可以将其放入独立的区块中。多字母标识符默认会被解析为 Typst 的定义或函数,除非用引号括起来。这样我们就不需要像 LaTeX 那样写反斜杠了,比如
floor
和sqrt
可以直接用。phi.alt
表示对phi
应用了alt
修饰符,从而选择该符号的某个变体。接下来我们进入 [脚本][scripting] 部分。要在 Typst 文档中写代码,只需输入一个井号(
#
)加上表达式。这里我们定义了两个变量和一个递归函数来计算第 n 个 Fibonacci 数。然后我们把结果放入一个居中的表格中显示。表格函数的参数按行传入,因此我们先传入公式$F_1$
到$F_8$
,再传入计算出的 Fibonacci 数列值。由于这两个是数组,我们使用展开运算符..
,以将数组的每一项作为独立参数传入。
代码文本版本
#set page(width: 10cm, height: auto)
#set heading(numbering: “1.”)
= Fibonacci sequence
The Fibonacci sequence is defined through the
recurrence relation $Fn = F(n-1) + F(n-2)$.
It can also be expressed in _closed form:
$ Fn = 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) }
)
The first #count numbers of the sequence are:
#align(center, table(
columns: count,
..nums.map(n => $F#n$),
..nums.map(n => str(fib(n))),
))
安装方式
Typst 的 CLI(命令行工具)可以通过多种方式获取:
你可以从 [releases 页面][releases] 获取 Typst 的源代码和预编译好的二进制文件。下载与你的操作系统对应的压缩包,并将其放入一个包含在你
PATH
中的目录下。为了保持更新,你可以直接运行typst update
命令。你也可以通过不同的包管理器来安装 Typst。但请注意,包管理器中的版本可能会落后于最新的官方发布版本。
Linux:
- 查看 [Repology 上的 Typst][repology]
- 查看 [Typst 的 Snap 版本][snap]
- macOS:运行
brew install typst
- Windows:运行
winget install --id Typst.Typst
如果你已经安装了 [Rust][rust] 工具链,可以通过以下方式安装:
- 安装最新发布版本:
cargo install --locked typst-cli
- 安装开发版本:
cargo install --git https://github.com/typst/typst --locked typst-cli
- 安装最新发布版本:
如果你使用的是 Nix,可以:
- 使用
nix-shell -p typst
来使用typst
包 - 使用开发版本:
nix run github:typst/typst -- --version
- 使用
如果你是 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.typ
Typst 还允许你为项目添加自定义字体路径,并列出所有已发现的字体:
# 添加额外的字体目录进行搜索。
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
如果你希望使用带有自动补全和即时预览的集成式开发体验,也可以试试 [Typst 的免费 Web 应用][app]。
社区
主要的 Typst 社区交流平台是我们的 [论坛][forum] 和 [Discord 服务器][discord]。 论坛是提问、互相帮助以及展示你用 Typst 做出酷炫作品的好地方;而 Discord 更适合快速提问、讨论贡献事宜或是随便聊聊。欢迎你加入我们!
[Typst Universe][universe] 是一个社区共享模板和包的地方。 如果你也想分享自己的作品,可以提交到我们的 [包仓库][packages]。
如果你在社区中遇到了不愉快的体验,请 [联系我们][contact]。
贡献方式
我们非常欢迎来自社区的贡献。如果你遇到了 bug,欢迎提交 issue。 如果你想实现一个新功能或修复一个 bug,请按照 [贡献指南][contributing] 中的步骤进行。
如果你希望自己构建 Typst,请先确保安装了 [最新稳定版 Rust][rust]。然后克隆本仓库并构建 CLI:
git clone https://github.com/typst/typst
cd typst
cargo build --release
构建完成后,优化后的二进制文件会存储在 target/release/
目录下。
另一个不错的贡献方式是 [分享包][packages],让整个社区受益。
发音与拼写
IPA 音标:/taɪpst/。 “Ty” 的发音类似于 Typesetting 中的 “Ty”,而 “pst” 类似于 Hipster 中的结尾。 在书写中,请将 Typst 视作专有名词,首字母 “T” 要大写。
设计原则
Typst 的整体设计围绕三个核心目标:强大性、简洁性 和 高性能。 我们认为,现在是时候拥有一个既能与 LaTeX 匹敌、又易学易用,并且足够快速实现即时预览的系统。为此,我们遵循三大设计原则:
通过一致性实现简洁性: 如果你学会了 Typst 中的一种操作方式,那么你应该能够将它类推到其他地方。 如果有多种方式实现相同的效果,那它们之间应该存在抽象层次的差异。比如,
= Introduction
和#heading[Introduction]
实现的是同一个效果,而前者只是后者的语法糖(syntax sugar)。通过可组合性实现强大性: 提高灵活性的方法有两种:一种是为每个功能都提供一个开关,另一种是提供少量但可自由组合的模块。 Typst 采用的是第二种方式。我们提供的系统可以让你组合出我们都没想到的新用法。TeX 也是第二类的系统,但它过于底层,所以大家更倾向使用 LaTeX。但 LaTeX 的可组合性并不强,通常每个功能都得通过引入一个包来实现(例如
\usepackage{knob}
)。通过增量性实现高性能: 所有 Typst 的语言特性都必须支持增量编译。 幸运的是,我们有 [
comemo
] 这个系统,它在后台承担了大部分繁重的增量编译任务。