4个版本

0.11.1 2024年5月17日
0.11.0 2024年3月15日
0.11.0-rc12024年3月9日
0.1.0 2023年11月8日

#483 in 编程语言

Download history 208/week @ 2024-05-02 166/week @ 2024-05-09 735/week @ 2024-05-16 430/week @ 2024-05-23 502/week @ 2024-05-30 563/week @ 2024-06-06 470/week @ 2024-06-13 584/week @ 2024-06-20 395/week @ 2024-06-27 502/week @ 2024-07-04 535/week @ 2024-07-11 440/week @ 2024-07-18 418/week @ 2024-07-25 480/week @ 2024-08-01 550/week @ 2024-08-08 511/week @ 2024-08-15

2,013 每月下载量
5 crates 中使用

Apache-2.0

2.5MB
47K SLoC

Typst

Documentation Typst App Discord Server Apache-2 License Jobs at Typst

Typst是一个新的基于标记的排版系统,旨在提供与LaTeX相当的强大功能,同时更容易学习和使用。Typst具有

  • 内置的标记用于最常见的格式化任务
  • 灵活的功能用于其他所有任务
  • 紧密集成的脚本系统
  • 数学排版、参考文献管理以及更多功能
  • 由于增量编译而具有快速的编译时间
  • 在出错时提供友好的错误消息

此仓库包含Typst编译器和其CLI,这是您在本地编译Typst文档所需的一切。为了获得最佳的写作体验,请考虑免费注册我们的协作在线编辑器。它目前处于公共测试版。

示例

我们的文档中提供了对Typst的温和介绍。但是,如果您想通过一张图片看到Typst的强大功能,这里就是

Example

让我们来分析一下正在发生的事情

  • 我们使用设置规则来配置元素属性,例如页面大小或标题的编号。通过将页面高度设置为auto,它将根据内容进行缩放。设置规则适用于最常见的配置。如果您需要完全控制,您还可以使用显示规则来完全重新定义元素的外观。

  • 我们使用= Heading语法插入标题。一个等于号创建顶级标题,两个创建子标题,依此类推。Typst具有更多类似这样的轻量级标记,请参阅语法参考以获取完整列表。

  • 数学方程式用美元符号包围。通过在方程内容周围添加额外空格,我们可以将其放入单独的块中。多字母标识符被解释为Typst定义和函数,除非用引号括起来。这样,我们不需要为像 floorsqrt 这样的内容使用反斜杠。并且 phi.altalt 修饰符应用于 phi 以选择特定的符号变体。

  • 现在,我们来了解一下 脚本。要将代码输入到Typst文档中,我们可以在表达式前写一个井号。我们定义了两个变量和一个递归函数来计算第n个斐波那契数。然后,我们在居中对齐的表中显示结果。表格函数按行接收其单元格。因此,我们首先将公式 $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可以从不同的来源获得

  • 您可以从 发布页面 获取Typst的最新发布版本的源代码和预构建的二进制文件。下载适合您平台的存档并将其放置在您的 PATH 中的目录中。要了解未来的发布情况,您可以简单地运行 typst update

  • 您可以通过不同的包管理器安装Typst。请注意,包管理器中的版本可能落后于最新版本。

    • Linux:查看 Typst on Repology
    • macOS:brew install typst
    • Windows:winget install --id Typst.Typst
  • 如果您已安装了 Rust 工具链,您也可以使用 cargo install --git https://github.com/typst/typst --locked typst-cli 安装最新开发版本。请注意,这将是一个“夜间”版本,可能存在损坏或尚未正确记录的情况。

  • Nix用户可以使用 typst 软件包,通过 nix-shell --p typst 或使用 nix run github:typst/typst -- --version 构建和运行最新的版本。

  • Docker用户可以使用 docker run -it ghcr.io/typst/typst:latest 运行预构建的镜像。

使用

安装Typst后,您可以像这样使用它

# Creates `file.pdf` in working directory.
typst compile file.typ

# Creates PDF file at the desired path.
typst compile path/to/source.typ path/to/output.pdf

您还可以监视源文件,并在更改时自动重新编译。这比每次从头开始编译要快,因为Typst具有增量编译。

# Watches source files and recompiles on changes.
typst watch file.typ

Typst还允许您为您的项目添加自定义字体路径,并列出它发现的全部字体

# Adds additional directories to search for fonts.
typst compile --font-path path/to/fonts file.typ

# Lists all of the discovered fonts in the system and the given directory.
typst fonts --font-path path/to/fonts

# Or via environment variable (Linux syntax).
TYPST_FONT_PATHS=path/to/fonts typst fonts

有关其他CLI子命令和选项,请参见以下内容

# Prints available subcommands and options.
typst help

# Prints detailed usage of a subcommand.
typst help watch

如果您更喜欢集成IDE般的体验,包括自动完成和即时预览,您还可以检查一下Typst网页应用,它目前正在公开测试中。

社区

社区聚集的主要地方是我们Discord服务器。您可以自由地加入那里提问、帮助他人、分享您用Typst创建的酷东西,或者仅仅是聊天。

除此之外,还有一些地方您可以找到社区创建的内容

如果您在我们的社区中遇到了不好的体验,请联系我们

贡献

我们非常希望看到来自社区的贡献。如果您遇到了bug,请自由地提交一个问题。如果您想实现一个新功能或修复一个bug,请按照贡献指南中的步骤操作。

要自己构建Typst,首先确保您已安装了最新的稳定版RustRust。然后,克隆此存储库,并使用以下命令构建CLI:

git clone https://github.com/typst/typst
cd typst
cargo build --release

优化后的二进制文件将保存在target/release/

另一种贡献的好方法是与社区分享包

发音和拼写

IPA: /taɪpst/。"Ty"类似于单词Typesetting中的"Ty","pst"类似于单词Hipster中的"pst"。在撰写关于Typst的文章时,应将其名称作为专有名词首字母大写,即首字母大写的"T"。

设计原则

Typst的所有设计都考虑了三个主要目标:力量、简洁性和性能。我们认为是时候有一个既能匹配LaTeX的力量,又易于学习和使用,同时足够快以实现即时预览的系统了。为了实现这些目标,我们遵循三个核心设计原则

  • 通过一致性实现简洁:如果您知道如何在Typst中做一件事,您应该能够将这种知识转移到其他事物上。如果有多种方法可以完成同一件事,其中一种方法应该比另一种方法在抽象级别上不同。例如,= Introduction#heading[Introduction]做同样的事情是可以接受的,因为前者是后者的语法糖。

  • 通过组合性实现力量:有两种方法可以使某物灵活:为每件事都提供一个旋钮,或者提供一些您可以以多种方式组合的旋钮。Typst的设计考虑了第二种方式。我们提供了您可以组合的方式,甚至是我们从未想过的方式。TeX也属于第二类,但它有点底层,因此人们使用LaTeX。但是,在那里,我们没有太多的组合性。相反,每件事都有一个包(\usepackage{knob})。

  • 通过增量实现性能:Typst的所有语言特性都必须适应增量编译。幸运的是,我们有一个comemo系统,用于增量编译,它在后台做了大部分艰苦的工作。

依赖关系

~62MB
~825K SLoC