如何衡量一个文档的编译时间?

如何衡量一个文档的编译时间?

我有一个长.tex文件,我想知道编译时间:持续时间、开始 - 结束。

我可以将此信息添加到 PDF 或将其显示在.log文件中吗?

答案1

有很多选择。以下是其中三种:

在 LaTeX 中,使用l3benchmark

将其添加到文档的最顶部:

\RequirePackage{l3benchmark}
\ExplSyntaxOn
\AtEndDocument { \benchmark_toc: }
\benchmark_tic:
\ExplSyntaxOff

\benchmark_tic:指令将启动一个计时器,\AtEndDocument相应的\benchmark_toc:将测量自 以来经过的时间\benchmark_tic:。这通常足以测量文档的执行时间:它只包含一个额外的代码\ExplSyntaxOff并排除一些\end{document}代码。如果你想真的精确,那么您可以加载etoolbox并替换它(包括测试文档):

\RequirePackage{etoolbox}
\RequirePackage{l3benchmark}
\ExplSyntaxOn
\AfterEndDocument { \benchmark_toc: }
\use:n
  {
    \ExplSyntaxOff
    \benchmark_tic:
  }
% Test document:
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\lipsum[1-150]
\end{document}

\benchmark_tic:在文档开始前立即开始,并且\benchmark_toc:是 TeX 在退出前要做的(几乎)最后一件事。但是,这段时间不包括 TeX 引擎的初始化(应该可以忽略不计),以及字体的最终包含处理(在 pdfTeX 和 LuaTeX 中)或从 DVI 文件转换为 PDF(在 XeTeX 中),这可能需要一点时间,具体取决于文档的大小和所包含的字体文件的数量。

运行该终端(和.log文件)(l3benchmark) + TIC时,开头会包含一个,而(l3benchmark) + TOC: 0.745 sTeX 引擎的最终消息之前会包含一个。

用于arara运行作业并计时

使用相同的示例文档,使用arara标题并运行它:

% arara: pdflatex
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\lipsum[1-150]
\end{document}

终端将显示:

phelype@oleinik ~/tex.sx> arara test.tex
  __ _ _ __ __ _ _ __ __ _ 
 / _` | '__/ _` | '__/ _` |
| (_| | | | (_| | | | (_| |
 \__,_|_|  \__,_|_|  \__,_|

Processing 'test.tex' (size: 60 KB, last modified: 08/26/2019
17:14:41), please wait.

(PDFLaTeX) PDFLaTeX engine .............................. SUCCESS

Total: 1.22 seconds
phelype@oleinik ~/tex.sx>

因此您必须记住这arara会增加一些开销时间,但在较大的作业中这并不重要。如果您arara使用-l( --log) 运行,它将创建一个arara.log文件,其最后一行将类似于:

26 ago 2019 17:20:20.548 INFO  - Total: 1.22 seconds

使用其他工具

如果您使用的是 Linux,则可以使用命令行工具time

phelype@oleinik ~/tex.sx> time pdflatex test.tex

处理后终端将如下所示:

Transcript written on test.log.

real    0m1.009s
user    0m0.984s
sys     0m0.024s

表示运行时间约为1秒。

其他系统可能有其他工具来执行相同的任务,例如measure-commandWindows Powershell。


结论?

我的系统中始终报告相同的文档(大致时间,但一次运行与下一次运行之间没有太大差别):

(l3benchmark) + TOC: 0.745 s
Total: 1.22 seconds
real    0m1.009s

这可能意味着 TeX 花了 0.745 秒来处理我的文档,又花了 0.264 秒(1.009 – 0.745)来添加字体并关闭 PDF 文件,最后又arara花了 0.220 秒来完成它的工作。因此,取决于确切地您想要测量,无论如何都会给出更好的结果,但是对于足够大的工作来说,所有结果都应该大致相等。

请注意,由于l3benchmark措施之内TeX 运行,它打印的时间只对应一次 TeX 运行。如果你的文档需要多次运行和/或外部工具,如 BibTeX、MakeIndex 等,那么araratime或任何工具打印的时间肯定会比 打印的时间大l3benchmark,因为它们加起来需要运行全部进程,而不是单个 TeX 运行。

再次强调,这取决于您想要测量什么:如果您对 TeX 代码的性能感兴趣,那么就选择l3benchmark,但如果您对运行作业实际所需的时间感兴趣,那么请使用其他方法。

答案2

基于 Phelype 的回答“使用其他工具“:

在 Windows 上,您可以使用Measure-CommandPowerShell 获得与timeLinux 类似的结果,例如:

measure-command {latexmk sample-document}

更多详情请点击此链接:https://stackoverflow.com/questions/3513650/timing-a-commands-execution-in-powershell

我有一份很长的文档(约 70 页,包含很长的参考书目和大量字体),第一次编译需要 1 分 43 秒,但文件l3benchmark中只记录了 21 秒.log

笔记measure-command无法与 的连续预览功能配合使用latexmk

相关内容