typst/typst
GitHub: typst/typst
Typst 是一款基于 Rust 开发的现代化排版系统,旨在通过简洁的语法和极快的编译速度替代 LaTeX,适用于学术论著与技术文档编写。
Stars: 51792 | Forks: 1491
Typst 是一个全新的基于标记的排版系统,其设计宗旨是像 LaTeX 一样强大,同时更易于学习和使用。Typst 具有:
- 用于最常见格式化任务的内置标记
- 用于其他所有事情的灵活函数
- 紧密集成的脚本系统
- 数学排版、参考文献管理等
- 得益于增量编译,编译速度极快
- 出错时提供友好的错误信息
本仓库包含 Typst 编译器及其 CLI,这是在本地编译 Typst 文档所需的一切。为了获得最佳的编写体验,可以考虑免费注册我们的[协作在线编辑器][app]。
## 示例
我们的文档中提供了 Typst 的[入门指南][tutorial]。不过,如果您想通过一张图片直观地了解 Typst 的强大功能,请看这里:
让我们来剖析一下发生了什么:
- 我们使用 _set rules_(设置规则)来配置元素属性,例如页面大小或标题编号。通过将页面高度设置为 `auto`,它会自动缩放以适应内容。Set rules 适应最常见的配置。如果您需要完全控制,也可以使用 [show rules][show] 来完全重新定义元素的外观。
- 我们使用 `= Heading` 语法插入一个标题。一个等号创建顶级标题,两个创建副标题,以此类推。Typst 有更多像这样的轻量级标记;请参阅 [syntax] 参考以获取完整列表。
- [数学公式][math] 包含在美元符号中。通过在公式内容周围添加额外的空格,我们可以将其放入单独的块中。多字母标识符被解释为 Typst 定义和函数,除非放在引号中。这样,我们就不需要为 `floor` 和 `sqrt` 之类的东西使用反斜杠。而 `phi.alt` 将 `alt` 修饰符应用于 `phi`,以选择特定的符号变体。
- 现在,我们进入一些 [scripting](脚本编写)。要将代码输入 Typst 文档,我们可以编写一个哈希符号,后跟一个表达式。我们定义了两个变量和一个递归函数来计算第 n 个斐波那契数。然后,我们在居中对齐的表格中显示结果。table 函数逐行接收其单元格。因此,我们首先传递公式 `$F_1$` 到 `$F_8$`,然后传递计算出的斐波那契数。我们对两者都应用展开运算符 (`..`),因为它们是数组,我们希望将数组的项作为单独的参数传递。
代码示例的文本版本。
```
#set page(width: 10cm, height: auto)
#set heading(numbering: "1.")
= Fibonacci sequence
The Fibonacci sequence is defined through the
recurrence relation $F_n = F_(n-1) + F_(n-2)$.
It can also be expressed in _closed form:_
$ 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) }
)
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:
- 查看 [Typst on Repology][repology]
- 查看 [Typst's Snap][snap]
- macOS: `brew install typst`
- Windows: `winget install --id Typst.Typst`
- 如果您安装了 [Rust][rust] 工具链,您可以使用
- 以下命令安装最新发布的 Typst 版本
`cargo install --locked typst-cli`
- 以下命令安装开发版本
`cargo install --git https://github.com/typst/typst --locked typst-cli`
- Nix 用户可以
- 使用 `nix-shell -p typst` 运行 `typst` 包
- 使用以下命令构建并运行 [Typst flake](https://github.com/typst/typst-flake)
`nix run github:typst/typst-flake -- --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
```
如果您更喜欢具有自动完成和即时预览功能的集成 IDE 体验,也可以查看我们的 [免费网络应用][app]。或者,还有一个名为 [Tinymist](https://myriad-dreamin.github.io/tinymist/) 的社区创建的语言服务器,它已集成到各种编辑器扩展中。
## 发音和拼写
IPA: /taɪpst/。"Ty" 的发音像 **Ty**pesetting 中的 Ty,"pst" 像 Hi**pst**er 中的 pst。在撰写关于 Typst 的内容时,请将其名称作为专有名词大写,首字母为 "T"。
## 设计原则
Typst 的所有设计都遵循三个关键目标:强大、简单和高性能。我们认为现在是时候建立一个匹配 LaTeX 强大功能、易于学习和使用的系统,同时速度足够快以实现即时预览。为了实现这些目标,我们遵循三个核心设计原则:
- **通过一致性实现简单性:**
如果您知道如何在 Typst 中做一件事,您应该能够将该知识转移到其他事情上。如果做同一件事有多种方法,其中一种应该处于与另一种不同的抽象级别。例如,`= Introduction` 和 `#heading[Introduction]` 做同样的事情是可以的,因为前者只是后者的语法糖。
- **通过可组合性实现强大:**
有两种方法可以使某物变得灵活:为所有事情提供一个旋钮,或者拥有几个可以以多种方式组合的旋钮。Typst 的设计考虑到了第二种方式。我们提供的系统可以以我们甚至从未想过的方式进行组合。TeX 也属于第二类,但它有点低级,因此人们改用 LaTeX。但是在那里,我们并没有真正的那么多可组合性。相反,每个功能都有一个包(`\usepackage{knob}`)。
- **通过增量性实现性能:**
所有 Typst 语言功能都必须适应增量编译。幸运的是,我们有 [`comemo`],一个增量编译系统,它在后台完成了大部分艰苦的工作。
## 致谢
我们要感谢所有支持 Typst 开发的人,无论是通过 [GitHub sponsors] 还是其他方式。特别要感谢[^1]:
- [Posit](https://posit.co/blog/posit-and-typst/) 资助了一名全职编译器工程师
- [NLnet](https://nlnet.nl/) 通过 [NGI Zero Core](https://nlnet.nl/core) 基金提供多项赠款支持 Typst 的工作:
- [HTML 导出](https://nlnet.nl/project/Typst-HTML/) 相关工作
- [PDF 无障碍功能](https://nlnet.nl/project/Typst-Accessibility/) 相关工作
- [Science & Startups](https://www.science-startups.berlin/) 通过柏林创业奖学金 (Berlin Startup Scholarship) 资助了 2023 年 1 月至 6 月的 Typst 开发
- [Zerodha](https://zerodha.tech/blog/1-5-million-pdfs-in-25-minutes/) 慷慨的一次性赞助
[^1]: 此列表仅包括对我们开源工作的贡献超过或预计超过 €10K 的部分。
标签:LaTeX替代, Rust, Typst, 公式排版, 可视化界面, 增量编译, 学术写作, 排版系统, 文档生成, 标记语言, 科技文档, 编译器, 网络流量审计, 脚本语言, 自动化排版, 通知系统, 通知系统