如何找出为什么 xetex 在无辜的页面上挂起几秒钟?

如何找出为什么 xetex 在无辜的页面上挂起几秒钟?

使用 xelatex 编译一份长达 130 页的报告,我的电脑大约需要 4 秒钟,其中至少 1 秒钟花在某一特定页面上,又花一些时间在后面的页面上。

花费时间最多的页面是一系列非常相似的页面中的一个,所有页面都以命令结尾\clearpage;因此不存在换行符/分页符或浮动位置的问题。该页面包含公式和图表,但前后许多其他页面也是如此。当然,我已经检查了图表的大小:与其他页面上的图表没有区别。当然,我已经查看了日志文件:与其他许多类似页面没有什么不同。

当注释掉页面的一部分时,xelatex 不再挂在该页面上,而是挂在下一个页面上。这强烈表明问题与特定页面内容无关,而是由于在读取和消化一定量的输入时设置的一些内部操作。Xosview 表明 xetex 远未耗尽我的 8GB RAM。

我怎样才能找出导致 xelatex 挂在奇怪的、不显眼的页面上的原因?

我对“大图”这个答案不满意。我想彻底了解为什么xetex 可以顺利地消化 11 张大图像,但在第 12 位就挂起了。

我对“有时无法避免”这个答案并不满意。最多,xelatex 的官方版本无法避免这种情况。但是,如果问题与有限的堆栈大小有关,为什么不使用更大的堆栈重新编译 xelatex。

所以这个问题实际上是关于理解当观察到上述行为时,xelatex 内部具体发生了什么。尽可能深入地了解,以思考可能的对策(不是解决方法)。

我坦率地承认,每轮编译节省几秒钟可能不值得付出这样的努力。再说一遍,这不是关于实用性,而是关于理解: 我只是好奇的

答案1

在我看来,最大的罪魁祸首是大文件大小的图像,例如包含太多数据点的图形或分辨率远高于您需要的位图。(我以前有一位朋友从以 40 kHz 采样的原始数据生成了几秒钟信号的 Matlab 图表;生成的 EPS 有数百千字节,并引起了类似的问题。)

速度减慢可能不会发生在您在编译过程中遇到文件的确切位置,因为 XeTeX(通常)在并行线程中运行 xdvipdfmx。尝试先编译文档,xelatex -no-pdf看看速度是否仍然减慢。(然后尝试xdvipdfmx生成输出,看看那个输出也会发生什么。)

相关内容