据我所知,它latex
只是一个宏包tex
,就像tex
程序一样,而不是格式。(同样,很奇怪,但我理解 LaTeX 是一种格式TeX。
这是否意味着 LaTeX 格式可以应用于任何 TeX 引擎?
从积极的方面假设,XeLaTeX 和 LuaLaTeX 与 LaTeX 有何关系,因为它们建立在各自的引擎 XeTeX 和 LuaTeX 上?
如果有人要建造其他 tex
,假设它通过了 TRIP 测试,那么 LaTeX 可以应用于它吗?
答案1
当前的 LaTeX2e 内核 ( latex.ltx
) 不包含任何除 Knuth 在 TeX 中提供的原语之外的原语。事实上,如果你阅读代码,你会发现已经采取了明确的步骤来支持 TeX 2(7 位版本),即使 TeX 3(“TeX90”)于 1990 年发布。因此,内核本身可以与通过 TRIP 测试的任何 TeX 实现兼容。
但是,这有一个重要的条件。构建格式需要的不仅仅是latex.ltx
,特别是它需要连字模式。在我的系统(TeX Live 2013)上,尝试构建没有 e-TeX 扩展的格式文件会失败,因为至少一个连字文件使用了\numexpr
( texmf-dist/tex/generic/hyph-utf8/patterns/tex/hyph-ka.tex
)。由于连字模式不是格式的一部分,因此您可以绕过这个问题。
就 XeLaTeX 和 LuaLaTeX 而言,它们非常接近“标准”LaTeX 格式。由于这些引擎使用 UTF-8 输入,因此在设置方面需要进行一些或多或少必要的调整(类别代码、ETC。),因此这是在格式构建过程中完成的。LuaLaTeX 的格式设置还启用了它提供的额外原语(它们不会“开箱即用”)。在这两种情况下,这些调整都是必要的,就像在latex.ltx
XeTeX 或 LuaTeX 发布之前设计的那样,将调整作为格式构建系统的一部分是最明智的。
值得注意的是,LaTeX3 软件包(expl3
,ETC。) 有更严格的要求。以及 e-TeX 扩展,\pdfstrcmp
或同等功能是必需的。目前,满足这些要求的引擎是
- pdfTeX v1.30 或更高版本
- XeTeX v0.9994 或更高版本
- LuaTeX v0.40 或更高版本
答案2
虽然目前 latex.ltx(用于构建 LaTeX2e 格式的文件)不依赖于除通过 TRIP 测试的 vanilla TeX 引擎之外的任何原语,但 LaTeX 项目几年前就宣布,预期 LaTeX(2e) 将在启用 e-TeX 扩展的系统上运行。此声明位于列出所有重要发布更改的 ltnews 文档之一中。
正如约瑟夫在他的回答中提到的那样,显示这一点的一个领域是连字文件,但也有 LaTeX 包开始使用这些扩展。
因此,问题的答案是,是的,LaTeX 可以在任何原始 TeX 引擎上运行,但如果它是少数不支持 e-TeX 或默认情况下未启用 e-TeX 扩展的系统之一,则可能会有一些限制。