4 个版本
0.11.1 | 2024 年 5 月 17 日 |
---|---|
0.11.0 | 2024 年 3 月 15 日 |
0.11.0-rc1 | 2024 年 3 月 9 日 |
0.1.0 | 2023 年 10 月 21 日 |
#104 在 编程语言
每月 752 次下载
2.5MB
51K SLoC
Typst 是一种新的基于标记的排版系统,旨在提供与 LaTeX 相当的功能,同时学习和使用更加容易。Typst 具有如下特点:
- 内置的标记用于最常见的格式化任务
- 灵活的函数用于其他一切
- 紧密集成的脚本系统
- 数学排版、参考文献管理以及更多
- 得益于增量编译,编译速度非常快
- 如果出现问题,会提供友好的错误消息
此存储库包含 Typst 编译器和其 CLI,这是您在本地编译 Typst 文档所需的一切。为了获得最佳的写作体验,请考虑免费注册我们的 协作在线编辑器。目前它处于公开测试阶段。
示例
我们文档中的 Typst 入门指南 可供参考。但是,如果您想通过一张图片看到 Typst 的强大功能,请看这里
让我们来分析一下发生了什么
-
我们使用 设置规则 来配置元素属性,如页面大小或标题编号。通过将页面高度设置为
auto
,它会根据内容进行缩放。设置规则适应了最常见的配置。如果您需要完全控制,您还可以使用 显示规则 来完全重新定义元素的显示外观。 -
我们使用
= Heading
语法插入标题。一个等号创建顶级标题,两个等号创建子标题,依此类推。Typst 有更多轻量级的标记,请参阅 语法参考 了解完整列表。 -
数学公式用美元符号包围。通过在方程内容周围添加额外的空格,我们可以将其放入一个单独的块中。除非用引号括起来,否则多字母标识符被视为Typst定义和函数。这样,我们就不需要反斜杠来表示诸如
floor
和sqrt
之类的元素。而且phi.alt
将alt
修饰符应用于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创建的酷炫事物,或者只是聊天。
除此之外,您还可以在其他一些地方找到社区创建的内容
- 官方包列表
- Awesome 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的内容时,请将其名称作为专有名词大写,即以“T”开头。
设计原则
Typst的所有设计都基于三个关键目标:力量、简单性和性能。我们认为是时候有一个系统,其功能与LaTeX相匹配,易于学习和使用,同时足够快,可以实现即时预览。为了实现这些目标,我们遵循以下三个核心设计原则
-
通过一致性实现简单性:如果您知道如何在Typst中完成一项任务,您应该能够将这项知识转移到其他任务上。如果有多种方式完成同一任务,其中一种方式应该比另一种方式具有不同的抽象级别。例如,
= Introduction
和#heading[Introduction]
做的是同一件事,因为前者只是后者的语法糖。 -
通过可组合性实现力量:有两种方法可以使事物具有灵活性:为每件事都提供一个旋钮,或者有少数旋钮,您可以以许多不同的方式组合它们。Typst的设计就是基于第二种方式。我们提供了一些系统,您可以用我们从未想到的方式组合它们。TeX也属于第二类,但它比较底层,因此人们使用LaTeX。但在那里,我们并没有那么多的可组合性。相反,为每件事都提供了一个包(
\usepackage{knob}
)。 -
通过增量实现性能:所有Typst语言特性必须适应增量编译。幸运的是,我们拥有
comemo
,这是一个增量编译的系统,它可以在后台完成大部分繁重的工作。
依赖项
~69MB
~1M SLoC