为什么ConTeXt和LaTeX是两种不同的排版系统而不是联合起来呢?

为什么ConTeXt和LaTeX是两种不同的排版系统而不是联合起来呢?

过去几天,我花了不少时间来了解 TeX 世界的最新发展。和我们所有人一样,我有时也会对 LaTeX 2e 的笨重和过时感到沮丧,所以我会把我的抱怨留到下次再说,但我的观察如下:

  • 标记、可访问性和形式与内容的分离是开发的关键领域。看来大家普遍认为,LaTeX 的未来版本应该遵循与 HTML/CSS 类似的范式。
  • ConTeXt 项目已经实现了这一点。ConTeXt 项目主要由 Hans Hagen 领导。LuaTeX 项目与 ConTeXt 紧密相关。ConTeXt 与荷兰商业公司 Pragma ADE 紧密相关
  • 目前,人们正在努力通过 L3 编程接口对 LaTeX 进行现代化改造。这一新管道的很大一部分旨在实现类似 HTML/CSS 的范式。

我实际上无法回避的一个明显问题是:

如果大家都在朝着类似的方向发展,那么 ConTeXt 和 LaTeX 究竟为什么是两种不同的东西呢?

我可以想到几种解释:

  • Pragma ADE 是一家商业公司,因此像 LaTeX 一样“开放”会损害他们的盈利能力。如果是这样,我不同意这种态度,但当然不是所有人都同意我的观点。
  • ConTeXt 开发人员决定不关心向后兼容性或破坏软件包,认为这是进步的必要步骤,也是 LaTeX 发展的障碍。所以他们就自己去做了。当然,结果之一是 ConTeXt 的模块生态系统远不如 LaTeX。它在其他领域很出色,但这不是我的观点。
  • 首席开发人员之间性格不匹配

有人知道真正的原因吗?是以上所有原因的结合吗?

答案1

这里有一些历史和哲学元素。LaTeX 最初由 Leslie Lamport 编写,旨在为 TeX 提供“用户”界面,从而抽象出排版的一些“裸机”。Lamport 在 20 世纪 80 年代末将团队移交给了现在的团队,那时 LaTeX 已经在某些学术圈流行起来。AMS-TeX 的思想与 的整合amsmath以及 (N)FSS 字体选择方案都发生在 20 世纪 90 年代中后期。这些发展帮助 LaTeX 吸引了大量学术界的受众。这也意味着 'LaTeX' ~ 'TeX' 被用作一种在排版之外描述数学模式标记的方式,例如MathJaX。

正如问题所述,ConTeXt 也是一个人(这里是 Hans Hagen)的原创产品。Hans 起初在某些方面不太想从 TeX 中抽象出来。例如,与 LaTeX 的文档类概念不同,ConTeXt 并不试图采用任何“必需”的方法来定义文档设计。ConTeXt 还以更丰富的界面设置开始,当然当时对性能有影响:这些不再是需要担心的问题。ConTeXt 是在 LaTeX 之后很久才开发的,并且没有在学术出版物中得到广泛采用。

LaTeX 吸引了大量第三方软件包作者。部分原因可能是因为内核的功能非常小,而且现在仍然如此。相比之下,ConTeXt 有很多由 Hans 和 Pragma 的其他人编写的模块,但第三方扩展相对较少。

这两种格式在稳定性方面历来有不同的做法。虽然 LaTeX 确实有所变化,但团队做了很多工作来尝试保持现有文档不变。此外,大量的第三方软件包意味着存在非常难以调整的(内部)接口。这意味着存在避免变化的倾向,或者至少非常谨慎地管理变化。ConTeXt 有一个小团队负责大部分代码,因此在变化方面可以更自由。同时,ConTeXt用户确实知道核心正在积极开发中,可能需要更积极的文档管理。这并不是说 ConTeXt 故意破坏文档 - ConTeXt 的基本语法在 Mark II、Mark IV 和 Mark XL 中是相同的。但例如,ConTeXt 已从 pdfTeX 转移到 LuaTeX 再转移到 LuaMetaTeX,这意味着直接在源代码中使用某些原语的用户必须更新它:如果同样的事情发生在 LaTeX 用户身上,他们可能会大声抱怨。

由于各种原因,LaTeX 团队在内核开发方面度过了一段相当沉寂的时期。其中一个原因是,在 LaTeX2e 发布后,他们的想法是完全冻结内核代码(为了稳定),并致力于编写一个新的 LaTeX(“LaTeX3”)来满足长期需求。然而,大量的用户和特定的软件包使得这成为一个非常具有挑战性的提议。毫无疑问,在那段时间里,ConTeXt 中开发的想法可以而且应该被 LaTeX 采纳:人们只能根据现在的情况进行工作,而不是事后看来。(例如,LaTeX 团队有类似 CSS 的东西在 CSS 发明之前,但在开发时它无法工作,现在必须在有 CSS 的世界中工作。)

目前,LaTeX 团队的工作重点是添加诸如标记之类的功能,正如问题所述,现在可以使用 ConTeXt 实现。LaTeX 的限制当然在某种意义上是自我强加的:用户根本不必更新他们的文档。还有一个关于详细引擎结果的问题。ConTeXt 使用 LuaMetaTeX,它像 LuaTeX 一样故意破坏了 TeX90/pdfTeX/XeTeX/... 的一些可预测结果。例如,连字符与字体无关,这可能会改变换行符,从而改变排版输出。同样,使用 LuaMetaTeX/LuaTeX 的 8 位字体并不是一件容易的事,而对于现有的 pdfTeX 文档,保持字体相同可能非常重要。

正如开头所述,LaTeX 和 ConTeXt 在理念上存在一些差异。例如,即使“LaTeX3”计划已经完全实施,LaTeX 仍会预先定义类或类似设计。ConTeXt 不会这样做,这是一个合理但又截然不同的立场。因此,有些地方很难“将两者结合起来”。

相关内容