Latex 测量文档特定部分的编译时间

Latex 测量文档特定部分的编译时间

由于复杂的 tex 文件的编译时间较长,我想测量此 tex 文件中的特定代码部分。我尝试使用 l3benchmark (https://ctan.math.washington.edu/tex-archive/macros/latex/contrib/l3experimental/l3benchmark.pdf),但我只能对整个文档运行它,而不能对特定部分运行它。

我已经尝试运行 \benchmark_once:n { 特定代码部分 } 和 \benchmark_silent:n { 特定代码部分 }。在文档顶部,我使用 \RequirePackage{l3benchmark} 包含一次 l3benchmark 包,并使用 \usepackage{l3benchmark} 包含一次每个方法。

我是否遗漏了什么或者怎么可能只测量部分代码的编译时间?

提前致谢!

答案1

这里有一些 lua 代码用于对代码的性能进行计时。该socket库内置于 LuaTeX 编译器中,请确保使用 --socket 选项启用。正如您所看到的,LaTeX 程序运行非常快速地。加载太多大字体、大图像和 tikz 图形会导致速度变慢。

\begin{filecontents*}[overwrite]{mytimer.lua}

-- table to hold time performance           
 M = M or {}
  local socket = require('socket')
  local time_stat = time_stat or {}
  local gettime = socket.gettime
   
-- start time measurement
time_stat["total"] = 0

-- @param done indicates timer was stopped
function start_time_measure(field)        
    time_stat[field] = {start = gettime(), done = false}
end

-- stop time measurement   
-- if two calls to stop will return wrong value
function stop_time_measure(field)         
    if not time_stat[field].done then 
       time_stat[field] = {total = gettime() - time_stat[field].start, done=true} 
    end   
end



 M.start = start_time_measure
 M.stop  = stop_time_measure 
 M.statistics = function(name) return time_stat[name].total end

-- M.start("document")
-- local s = 0
-- for i=1, 1 do s=s+1 end 
-- M.stop("document")

-- print(M.statistics("document"))
-- print(M.statistics("document"))
return M
\end{filecontents*}

\directlua{timer = require("mytimer")}
\def\timerstart#1{\directlua{timer.start("#1")}}
\def\timerstop#1{\directlua{timer.stop("#1")}}
\def\timerprint#1{
\directlua{
timer.stop("#1")
tex.print("elapsed time (#1):", timer.statistics("#1").." s")
}}
\timerstart{document}
\documentclass{article}
\timerstart{package}
\usepackage{fontspec}
\setmainfont{Arial Unicode MS}
\timerstop{package}
\usepackage{lipsum}
\usepackage{luacode}
\usepackage{microtype}
\begin{document}
Hello
\timerprint{package}
\begin{luacode}
z=0
for i=0,150000000,1 do
  i=i+1
  z=i
end
tex.print(z)
\end{luacode}

\timerstart{lipsum}
\lipsum[1-12]
\timerstop{lipsum}

\timerprint{package}

\timerprint{lipsum}

\timerprint{document}
\end{document}

在此处输入图片描述

相关内容