XeTeX 和 LuaTeX 的开发人员如何确保他们的引擎不会与早期 TeX 引擎产生的输出有太大偏差?(我读到 LuaTeX 的开发人员往往不太关心这一点,所以这个问题更倾向于 XeTeX,其文档具体指出某些功能 / 选项会导致文档的编译方式不同或换行符与在旧 TeX 引擎下不同。)有没有可以自动执行此操作的程序?
答案1
我认为,实践中最好的测试(尤其是在 luatex 的情况下)是 LaTeX 维护者定期使用所有三个引擎(以及 expl3 的情况下的 ptex 变体)运行 LaTeX2e 和 expl3 测试套件。l3build 测试格式在一定程度上规范了日志输出以消除已知差异(允许存储基础日志文件的特定于引擎的版本)。
因此,虽然我们没有直接参与 luatex 或 xetex 的开发,但我们可以(并且确实:-) 向引擎开发人员报告任何问题,通常使用 texlive 的测试版本,以便在完整 texlive 版本发布之前解决问题。
并非所有差异都是错误(尤其是 luatex 显然不是完全兼容的),但拥有测试套件意味着更容易记录预期的差异并确保 latex 宏在这三种情况下都能正常工作,格式本身和几个包根据所使用的引擎有不同的定义。值得注意的是,\showhyphens
分配宏和\newcount
字符属性的初始化(例如\lccode
小写设置)都依赖于引擎。
答案2
引用优秀TeX 常见问题解答
TeX(以及 MetaFont 和 MetaPost)是用一种名为 Web 的“文学”编程语言编写的,该语言旨在在各种计算机系统上移植。那么,如何检查 TeX 的新版本呢?
当然,任何明智的软件实现者都会有自己的一套测试来检查他的软件是否运行:那些将 TeX 及其朋友移植到其他平台的人确实执行了这样的测试。
然而,Knuth 为 TeX(trip)和 MetaFont(trap)提供了“一致性测试”。他将这些测试描述为“折磨测试”:它们的设计目的不是检查普通排版文档或字体设计会用到的明显的东西,而是探索 TeX 代码中偏离主路径的小巷。对于普通读者来说,这些测试相当难以理解!
一旦 TeX 的实现通过了它的 trip 测试,或者 MetaFont 的实现通过了它的 trap 测试,那么原则上就可以将其作为工作版本进行分发。(实际上,任何分发者也会针对“真实”文档或字体测试新版本;虽然 trip 和 trap 测试程序中的路径部分,但它们实际上并不测试任何现实世界的问题。)
以下是跳闸测试