4 个版本

0.11.1 2024 年 5 月 17 日
0.11.0 2024 年 3 月 15 日
0.11.0-rc12024 年 3 月 9 日
0.1.0 2023 年 7 月 18 日

#241编程语言

Download history 355/week @ 2024-04-27 249/week @ 2024-05-04 404/week @ 2024-05-11 1153/week @ 2024-05-18 815/week @ 2024-05-25 632/week @ 2024-06-01 962/week @ 2024-06-08 920/week @ 2024-06-15 709/week @ 2024-06-22 674/week @ 2024-06-29 690/week @ 2024-07-06 756/week @ 2024-07-13 773/week @ 2024-07-20 693/week @ 2024-07-27 716/week @ 2024-08-03 750/week @ 2024-08-10

3,025 每月下载量
30 包(5 个直接使用)中使用

Apache-2.0

270KB
6.5K 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-like体验,包括自动补全和即时预览,您还可以查看Typst网络应用,目前处于公开测试阶段。

社区

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

除此之外,还有一些地方可以找到社区制作的成果

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

贡献

我们很高兴看到社区的贡献。如果您遇到错误,请自由地打开一个问题。如果您想实现一个新功能或修复错误,请按照贡献指南中概述的步骤进行。

要自行构建Typst,首先请确保您已安装最新稳定的Rust版本。然后,克隆此存储库,并使用以下命令构建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时,请将名称作为专有名词首字母大写。

设计原则

Typst的所有设计都考虑了三个关键目标:功能、简洁性和性能。我们认为现在是时候有一个与LaTeX一样强大的系统,易于学习和使用,同时足够快以实现即时预览。为了实现这些目标,我们遵循三个核心设计原则

  • 通过一致性实现简洁性:如果您知道如何在Typst中完成一项任务,您应该能够将这项知识应用到其他任务中。如果有多种方式来完成同一件事情,其中之一应该比另一个具有不同的抽象级别。例如,= Introduction#heading[Introduction]做的是同一件事情,因为前者只是后者的语法糖。

  • 通过可组合性实现功能:有两种方式可以使事物变得灵活:为每一件事都提供一个旋钮,或者提供几个旋钮,您可以以许多不同的方式组合它们。Typst的设计理念是后者。我们提供了您可以通过我们从未想过的方式组合的系统。TeX也属于这一类,但它有点低级,因此人们使用LaTeX。但是,在那里,我们并没有那么多的可组合性。相反,每件事都有一个包(\usepackage{旋钮})。

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

依赖项

~1.8–7.5MB
~51K SLoC