2 个版本
0.1.1 | 2019年12月17日 |
---|---|
0.1.0 | 2019年12月17日 |
#1647 in 文本处理
10KB
190 代码行
νTeX
TeX 排版引擎的现代实现
基本内容
νTeX 是另一个 Rust 工具包,它雄心勃勃地旨在在 Rust 中重新发明 Knuth 经验丰富的 TeX 排版系统。
具体而言,项目的目标是引入一个排版引擎和标记语言,完全摒弃基于宏的语言,转而使用干净、灵活、易于脚本化和提供有用错误信息的标记。
梦想
想法是定义一种基于三个关键机制的新标记语言:
格式
函数
@环境
这三个机制中的每一个在排版过程中都扮演着明确的角色。
格式
格式由 \
表示,用于在给定作用域内切换设置。这些作用域可以是两种类型中的一种:内联作用域(由 {}
分隔),以及块作用域(使用 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