根据本网站的其他答案和 TeX 用户组的常见问题解答,我的理解是:
- TeX 是最初的排版程序,由 Knuth 编写
- Omega、eTeX、pdfTeX、XeTeX、LuaTeX 是引擎它们是原始 TeX 程序的变体,用不同的语言编写,旨在针对与原始 TeX 相同的输入提供几乎相同的输出,但内部工作原理有很大差异,界面略有不同,使用户能够访问内部工作原理
- LaTeX 和 ConTeXt宏包。它们就像 TeX 宏库。虽然 LaTeX 适用于所有引擎,但 ConTeXt 的最新版本(Mark IV)仅适用于 LuaTex,因为它使用了许多该引擎独有的功能。
我不明白为什么 LaTeX 和 ConTeXt 都需要自己的可执行文件。难道不能在希望使用 LaTeX 的 TeX 源文件中只包含 LaTeX 宏的定义(可能带有指令\include
)吗?
答案1
当然可以将 LaTeX 用作 TeX 读取的文件,但这并不常见。至少有几个原因。TeX 的设计允许读取一组宏(“格式”),然后由“IniTeX”按原样转储。当你这样做时
tex <file>
你正在使用 Knuth 的纯格式运行 TeX 程序,而不是完全未初始化的“VirTeX”(“virgin TeX”)。一旦任何其他格式都已存在,则无法加载 LaTeX,因为名称之间存在重叠,而且并不总是兼容。你可以使用 IniTeX 运行 TeX 并加载 LaTeX 内核
tex -ini "\input latex.ltx"
(至少在我的系统上是这样:细节略有不同)。但是,这样做意味着 TeX 必须先处理所有 LaTeX 内核,然后才能执行任何“有用的”操作。因此,加载预建格式(内存转储)更容易:
tex "&latex"
(&
语法是通用的:tex "&<format-name>"
加载所请求的任何格式。)
您在现代 TeX 系统上看到的二进制文件非常像这个过程的包装器,尽管它们运行的是 pdfTeX 而不是 Knuth 的 TeX。这其中有一些“细节”,但基本思想是一样的。
ConTeXt 有点不同,因为与 LaTeX 不同,它本身可以执行多个 TeX 运行操作。因此,它context
不仅仅是一个包装器:它是一个复杂的脚本。您可以像运行 LaTeX 一样以格式运行 ConTeX,但这比在 LaTeX 中更不实用。
答案2
让我详细阐述一下 Joseph 对 ConTeXt 包装器脚本的评论。排版的许多方面都不是 TeX 程序可以处理的。其中包括从 bib 文件中提取书目信息、对词汇表、索引进行排序等。
在 LaTeX 中,每个任务都有一个单独的执行:bibtex
、makeidx
及其变体。在 ConTeXt 中,所有这些都由context
脚本处理 — 该脚本还负责编译文档适当次数以获得正确的引用。因此,您可以将脚本视为context
相当于rubber
或latexmk
LaTeX 的脚本,它们处理运行bibtex
、makeidx
等,并负责多次运行。