Skip to content

qsbye/typst-plus

Repository files navigation

Typst

文档 Typst 应用 Discord 服务器 Apache-2 许可证 Typst 招聘

Typst 是一个全新的基于标记的排版系统,旨在拥有与 LaTeX 同等强大功能的同时,更加易于学习和使用。Typst 具备:

  • 内置标记语法,覆盖最常见的排版任务
  • 灵活的函数,满足其他一切需求
  • 紧密集成的脚本系统
  • 数学公式排版、参考文献管理等功能
  • 增量编译带来的快速编译速度
  • 出错时提供友好的错误提示信息

本仓库包含 Typst 编译器及其命令行界面(CLI),这是在本地编译 Typst 文档所需的全部内容。如需最佳写作体验,可以免费注册我们的协作在线编辑器

示例

我们的文档中提供了一份简明入门教程。如果你想通过一张图感受 Typst 的强大之处,请看下面:

示例

我们来解析一下这段代码:

  • 使用 设置规则(set rules) 来配置元素属性,例如页面大小或标题编号。将页面高度设为 auto 可使页面自适应内容高度。设置规则涵盖了最常见的配置需求。如需完全控制,也可以使用展示规则(show rules)来彻底重定义元素的外观。

  • 使用 = 标题 语法插入标题。一个等号表示一级标题,两个表示二级标题,以此类推。Typst 还有更多类似的轻量级标记语法;完整列表请参阅语法参考文档。

  • 数学公式用美元符号包裹。在公式内容两侧添加额外空格,可将其放入独立块中。多字母标识符会被解释为 Typst 定义和函数,除非用引号包裹。因此,像 floorsqrt 这样的命令无需反斜杠。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。请注意,包管理器中的版本可能略滞后于最新发布版本。

  • 如果你已安装 Rust 工具链,可以通过以下命令安装:

    • 最新发布的 Typst 版本: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-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.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 般的体验,支持自动补全和即时预览,可以查看我们的免费网页应用。此外,还有一个社区创建的语言服务器 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_plus 扩展(2025-05-20)

本分支在上游 Typst 编译器的基础上增加了图片生成增强功能和字符级标注功能。

图片导出(typst-render

  • 新增光栅格式:除 PNG 外,新增 JPEG 和 BMP 导出。
  • DPI 控制--ppi / --dpi 参数控制所有光栅格式的分辨率。
  • 格式自动识别:根据文件扩展名自动推断输出格式(.png.jpg/.jpeg.bmp)。

字符级标注(typst-label

  • 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 帧树中累积的任意变换(旋转、缩放等)。

CLI 使用示例

# 以 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

交叉编译(macOS → Windows)

在 Apple Silicon Mac 上交叉编译 Windows 可执行文件(typst.exe)的步骤:

1. 安装 rustup 工具链及目标

# 确保使用 rustup 而非 Homebrew Rust
rustup target add x86_64-pc-windows-gnu --toolchain stable-aarch64-apple-darwin

2. 安装 MinGW 交叉编译器

brew install mingw-w64

3. 编译

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-cli

4. 输出

编译产物位于 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

Footnotes

  1. 此列表仅包含对我们开源工作贡献超过或预计超过 1 万欧元的资助。

About

本分支在上游 Typst 编译器的基础上增加了图片生成增强功能和字符级标注功能。

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors