看看计算机在呈现图形时能做什么(想想游戏、图形用户界面等等),我几乎感到惊讶的是,我经常需要等待几分钟才能编译包含大量表格和图形的复杂 LaTeX 文件。
为什么 LaTeX 编译速度不快?排版系统是否存在理论上的瓶颈?它是否依赖于旧代码,如果不完全重写,就无法使其运行得更快?优化不是开发团队的重点吗?
答案1
TeX 编译速度“慢”主要有两个原因:
- 它无法并行化。游戏、GUI 等(您指的)确实使用多线程来加速执行。由于 TeX 会逐渐构建页面(使用计数器等),因此这不是一个选项,网站上有一些关于这方面的问题(例如,参见这里),除了那些询问使用 GPU 的问题(例如参见这里)。
- TeX 是一种宏扩展语言。这种“编程”不一定是最快的,但开发人员(不是从引擎角度,而是从格式角度)努力不在这里造成任何减速。这就是为什么一些内核代码看起来有点神秘。而关于引擎的优化是主要关注点之一。
只是为了支持第二点:编译缓慢的主要原因是一般理解 TeX 应该为您做什么。每当您加载 PGF/TikZ 或 pstricks 或类似的东西时,您实际上都会将 TeX 用于它并非设计用于的事情。TeX 应该进行数学和文本排版(而且它做得很好),它不应该生成带有阴影、绘制鸭子、绘图函数或类似内容的复杂图形。TikZ 支持外部化是有原因的,因为这减少了宏层在每次运行时必须进行的计算。
在历史上的某个时候,曾有人尝试编写一个现代的 TeX 引擎(NTS、ExTeX 等)——这两个引擎都是用 Java 编写的——它们应该速度快且易于维护。但即使是这些“现代”引擎也是单线程的,在性能方面无法与 Web/C 驱动的引擎相媲美。即使 LuaLaTeX 作为“现代现实世界”引擎,也无法在简单文档上与 pdflatex 相媲美。