我有一个长.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 s
TeX 引擎的最终消息之前会包含一个。
用于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-command
Windows 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 等,那么arara
或time
或任何工具打印的时间肯定会比 打印的时间大l3benchmark
,因为它们加起来需要运行全部进程,而不是单个 TeX 运行。
再次强调,这取决于您想要测量什么:如果您对 TeX 代码的性能感兴趣,那么就选择l3benchmark
,但如果您对运行作业实际所需的时间感兴趣,那么请使用其他方法。
答案2
基于 Phelype 的回答“使用其他工具“:
在 Windows 上,您可以使用Measure-Command
PowerShell 获得与time
Linux 类似的结果,例如:
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
。