我读了LuaTeX、ConTeXt 和 XeTeX 之间的区别,但我心里仍然有一个问题想问一下。
我正在开发一个 LaTeX 包/类/东西,目的是让我能够用 LaTeX 编写任何我喜欢的文档,即使输出格式不是 PDF/DVI/PS(见将 LaTeX 引入 Web了解背景故事)。因为这对 TeX 有一点点颠覆,所以我最终不得不在引擎盖下做一些修修补补。因为我的 TeX 技能比较基础,所以我经常怀疑我是否做对了。让我举两个相关的例子。
有好几次,使用 catcode 更改来实现某些东西很方便。例如,使它处于
^
活动状态,以便我可以预处理即将上标的内容。但是,摆弄 catcode 是黑魔法的一部分,似乎无论我在哪里实际进行 catcode 更改,我都会陷入麻烦。最简单的麻烦之一是当读入宏参数但中间需要更改 catcode 时。当我到达这一点时,我发现自己在想:我可以通过狡猾的辅助宏和其他
\aftergroup
废话来做到这一点,或者......我可以说“塞进去,我会用\scantokens
”。最终的输出是文本,但它必须经过 PDF,然后经过 PDF 到文本转换器。我想要一些连字符,例如
--
尾号和引号,但不是大多数连字符。由于最终的输出是文本,因此实际字体并不重要,因此我可以创建适合自己的字体。当我到达这一点时,我发现自己在想:我可能会花很长时间整理所有的、、
.tfm
文件或者......我可以说“塞进去,我会用到”。.afm
.ttfn
fontspec
重点是,如果我坚持使用特定的引擎,我可以选择简单的选项。
现在,我的软件包的主要目的是方便我使用我熟悉的 LaTeX 来编写文档。不是 不是 不是用于将现有的 LaTeX 文档转换为其他格式。尽管如此,我还是想让其他人也能使用它,经验表明,大多数人使用它的第一个用途是将现有文档转换为其他格式(现在谁会看手册?)。
因此,假设我输入了一些关于添加或删除哪些包的说明(主要考虑字体),我的问题是:就不同引擎的基本编程功能而言,我需要注意什么吗?
更直接地说,如果我纯粹从基元角度考虑,引擎上是否存在一个总顺序:TeX < eTeX < XeTeX < LuaTeX?或者,TeX 能做而 LuaTeX 不能做的事情有哪些?
答案1
首先要说一些具体细节,
就不同引擎的基本编程功能而言,我需要注意什么吗?
除了 LuaTeX 之外,其他引擎都提供了更好的编程接口,具有几乎相同的功能或您可以模拟的功能。
TeX 能做哪些事情,而 LuaTeX 做不到?
无需使用其他外部程序即可自行运行!
现在来谈谈一些更一般性的评论。一般来说,总会有人在某些方面比我们强,可能是编码,可能是数学。我尝试做的是首先了解自己的局限性,然后采取......嘿,这有效。一旦我做到了这一点,我就会尝试改进到更好的东西或进行一些优化。所以如果你觉得对一个引擎比另一个引擎更有信心,那就从这个引擎开始吧。
就 TeX 编码而言,我个人非常钦佩我们的许多用户代码,尤其是 Oberdiek 的工作。据我所知,他的大多数软件包都可以在所有引擎中运行,而且他在维护这些软件包方面做得非常出色(intcalc
例如,请参阅)。他有不少模拟 LaTeX 命令的软件包,因此您可以在任何引擎中虚拟运行这些软件包。PGF 也是如此。如果您想要这种级别的可移植性,您需要为任何引擎提供后备例程 --- 后备字体引擎检测例程等。Dave 的软件包docstrip
是另一个很好的例子。
TeX 的大多数原则(例如能够在任何计算机上精确复制同一文档以及能够移植到任何计算机上)都是经过时间考验的优秀原则。如果您能够将它们融入到您的工作中,从长远来看,您一定会从中受益。
总而言之,我的建议是让它在你的能力和框架范围内工作,然后使它更具可移植性。
答案2
这是个好问题,第一个回答也很棒。不知为何,论坛机器人把这个帖子放在了我的登录结果中,我相信我可以提供一些建议。
我是文档类的开发人员novel
。它不是 LaTeX 标准之一,但可以安装。我写了它后我已经私下将它用于印刷(成纸质)书籍,以分享的方式。
由于缺乏 TeX 编程技能,我限制其使用仅有的lualatex,由于此文档类用于小说(而非学术),我禁用了许多标准 TeX 命令,这些命令对于知识渊博和不知识渊博的用户具有不同的含义。换句话说,我减少了编程功能,而不是添加它们。软件包文档非常清楚地告诉潜在用户,他们只能做他们需要做的事情,而不是做所有可能的事情。特别是,仅lualatex
支持。
其他人喜欢novel
,如果他们真的在写小说的话。而在 SE 这里,其他人问为什么novel
不做他们可以用book
或做的事情memoir
。(答案:接受它。)
那么,回到最初的问题:你的文档类或包是否针对特定目的,针对特定用户群?如果是,那么可能一个好主意限制编译器,也许还会限制其他方面,例如 LTR/RTL 语言、字体的使用等等。任何不能使用你的代码的人都有许多其他 TeX 选择,所以没有必要取悦所有人。