2 个版本

0.1.1 2019年12月17日
0.1.0 2019年12月17日

#1647 in 文本处理

MIT 许可证

10KB
190 代码行

νTeX

TeX 排版引擎的现代实现

基本内容

νTeX 是另一个 Rust 工具包,它雄心勃勃地旨在在 Rust 中重新发明 Knuth 经验丰富的 TeX 排版系统。

具体而言,项目的目标是引入一个排版引擎和标记语言,完全摒弃基于宏的语言,转而使用干净、灵活、易于脚本化和提供有用错误信息的标记。

梦想

想法是定义一种基于三个关键机制的新标记语言:

  1. 格式
  2. 函数
  3. @环境

这三个机制中的每一个在排版过程中都扮演着明确的角色。

格式

格式由 \ 表示,用于在给定作用域内切换设置。这些作用域可以是两种类型中的一种:内联作用域(由 {} 分隔),以及块作用域(使用 Python 的缩进分隔)。

使格式独特的关键是“切换”一词。格式化是通过将修饰符应用于随后的文本来完成的,直到它“放松”(撤销)。一旦切换,格式可以在调用它的作用域结束时自动放松,或者可以使用特殊的 \relax 格式手动放松。

例如,\italics something like this 将渲染 “something like this”,而 \italics something like\relax this 将渲染 “something like this”。

格式存储在堆栈上,这意味着您也可以通过在内部作用域内部调用 \relax 临时放松格式。这样,\bold\italics something {\relax(bold) like} this 将渲染 “something like this”。

函数

简而言之,函数可以被视为一个脚本调用,将某些内容插入到您的文档中。然而,通常,函数可以通过向 νTeX 排版器发送信号(例如,指示它结束页面)来完成许多特殊操作。

环境

环境是标记语法的真正怪物。本质上,环境改变了特定范围内的文本解析方式。这意味着环境允许创建一个自定义的迷你语言,以渲染脚本设计者认为合适的任何内容。

环境的一个基本示例是 @math 环境

@math:
    x = {-b $pm $sqrt(b^2 - 4ac)} // {2a}

它将在段落中单独的一行上渲染二次方程。

虽然环境只能在特定范围内操作,但使用哪个范围并不重要。这意味着你可以创建内联数学,例如 @math:{y = mx + b}

依赖项

~5MB
~104K SLoC