如何使用 fontspec 加速 LuaLaTeX 启动?

如何使用 fontspec 加速 LuaLaTeX 启动?

作为 lualatex 和 fontspec 的新手用户,我发现在我的 Linux 系统上加载速度非常慢(>1.3 秒):

% This is file compact.tex
\documentclass[a4paper]{article}
% This is needed only for old (non-fontspec) fonts.
%\usepackage[utf8]{luainputenc}
\usepackage{fontspec}
\newfontfamily\myverdana{Verdana.ttf}[]
% 1.38s user time up to this point.
% \makeatletter\@@end
\begin{document}
\hrule
{\Huge Helló, Wörld, árvíztűrő}
\hrule
{\Huge Helló, Wörld, árvízt\H{u}r\H{o}}
\hrule
{\myverdana\Huge Helló, Wörld, árvíztűrő}
\hrule
\end{document}
% 1.44s user time up to this point.

我的时间测量:

  • pdflatex(不含 fontspec):总共需要 0.04 秒来生成 .pdf 文件
  • 不使用 fontspec 的 lualatex:需要 0.25 秒才能达到\begin{document},然后需要额外 0.01 秒才能生成 .pdf 文件
  • lualatex 和 fontspec:需要 1.38 秒才能达到\begin{document},然后需要额外 0.06 秒才能生成 .pdf 文件。请参阅上面的示例文件。
  • lualatex 与 fontspec,expl3.sty预加载lualatex --ini:0.50 秒到达\begin{document},然后额外 0.05 秒生成 .pdf 文件。请参阅下面的示例文件。
  • lualatex 与 fontspec,mylatex格式.ltx:0.28秒到达\begin{document},然后0.07秒生成.pdf文件。

有没有办法让 lualatex 使用 fontspec 和已加载字体的启动速度快于 1.38 秒?

\dump之前尝试过调用\begin{document},但是当我尝试加载.fmt 文件时,出现错误,提示某些 Lua 代码不可用。

(也许我可以尝试转储并恢复整个 Linux 进程。)

我之所以问这个问题,是因为我们正在实施一项将短篇(1-2 页)LaTeX 文档编译为 PDF 的 Web 服务,并且我们希望有一个快速的解决方案(可以快速完成并且服务器上占用的 CPU 很少)。从 pdflatex 升级到 lualatex 会使我们的短篇文档处理速度慢 10 倍左右,这太慢了。

仅供参考这是我使用的方式mylatex格式.ltx。我生成了luaheader.fmt(应该适用于 Linux 和 Windows):

$ luatex -interaction=nonstopmode -ini -jobname=luaheader "&lualatex" mylatexformat.ltx compact.tex

然后我编译了紧凑型.tex使用下列任一方法将文档转换为 .pdf:

$ luatex "&luaheader" compact
$ lualatex --fmt luaheader compact

仅供参考这是我手动使用的源文件lualatex --ini

% This is half1.tex, compile it with:
% $ lualatex --ini half1.tex
\let\OLDdump\dump
\let\dump\relax
\input lualatex.ini
\let\dump\OLDdump
\let\OLDselectfont\selectfont
% \selectfont called by \normalsize defined and called by size10.clo loaded
% by article.cls. If we don't change \selectfont here, we get an error
% message: ! Font \TU/lmr/m/n/10=[lmroman10-regular]:+tlig; at 10pt not
% loadable: metric data not found or bad.
\def\selectfont{\baselineskip12pt }
\documentclass[a4paper]{article}
\let\selectfont\OLDselectfont
\usepackage{expl3}
\usepackage{xparse}
% This fails in initex with: [\directlua]:1: attempt to index global
% 'luatexbase' (a nil value)
%\usepackage{luatexbase}
% This fails in initex with:
% ...ive/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua:176: attempt
% to index global 'luatexbase' (a nil value)
%\usepackage{luaotfload}  % Needs luaotfload to work.
% This needs luaotfload.
%\usepackage{fontspec}  % Needs luaotfload to work.
% This needs luatexbase.
%\usepackage[utf8]{luainputenc}
\dump

% This is half2.tex, compile it with:
% $ lualatex --fmt half1 half2
\normalsize
% This is needed only for old (non-fontspec) fonts.
%\usepackage[utf8]{luainputenc}
\usepackage{fontspec}
\newfontfamily\myverdana{Verdana.ttf}[]
% 0.50s user time up to this point.
% \makeatletter\@@end
\begin{document}
\hrule
{\Huge Helló, Wörld, árvíztűrő}
\hrule
{\Huge Helló, Wörld, árvízt\H{u}r\H{o}}
\hrule
{\myverdana\Huge Helló, Wörld, árvíztűrő}
\hrule
\end{document}
% 0.55s user time for half2.tex up to this point.

答案1

如果您的文档使用相同的序言,也许您可​​以使用预建格式来节省时间。

我制作了一个预构建格式并测试了(texlive 2018,已更新)你的文件:

  1. 假设文件名为 myjob.tex。然后在命令行上使用以下命令生成格式(Peter,据我所知,您使用的是 Linux,我在 Windows 上进行了测试):

    luatex -interaction=nonstopmode -ini -jobname="luaheader" "&lualatex" mylatexformat.ltx ""myjob.tex""

  2. 将此文本作为要编译的文件的第一行:%&luaheader

好的,可能您有许多不同的文件名,而我不知道如何使此处的代码适应这些文件名。

更重要的是,我不确定您是否真的节省了很多时间,因为我不知道如何正确测量编译时间。

顺便说一句:非常感谢 pdfsizeopt,它这么多年来确实很有帮助,而且仍然是不可或缺的!

相关内容