为什么 LuaLaTeX 加载字体需要这么长时间,我可以加快速度吗?

为什么 LuaLaTeX 加载字体需要这么长时间,我可以加快速度吗?

为了测试 Mico 即将推出的selnolig软件包,我试用了 LuaLaTeX。虽然作为 pdfLaTeX 最终用户,我的整体体验非常相似,但我注意到 LuaLaTeX 需要很长时间才能加载字体。这是我编译过几次的示例文档 ( lualatex foo.tex),用时钟不科学地测量编译时间,在每次编译之间删除辅助文件 ( latexmk -c foo.tex),并尝试不同的fontspec配置。

\documentclass{article}

                           % the following lines were included in:
\usepackage{fontspec}      % A, B, C
  \setmainfont{Minion Pro} %    B, C
  \setsansfont{Myriad Pro} %       C

\usepackage{lipsum}

\begin{document}
\lipsum
\end{document}

我的计时结果在三次运行中都是相同的±1s,所以我认为它们是可靠的:

A(仅字体规范)10 秒
B (+ Minion Pro) 33 秒
C (+ Myriad Pro) 39s
C (使用 XeLaTeX) 7s(仅作为比较)

关闭我知道可以安全关闭的所有进程,包括但不限于在 TeXing 时倾向于打开的编辑器和浏览器等进程,将配置 C 的编译时间缩短到 26 秒(LuaLaTeX)和 4 秒(XeLaTeX)。(参见我对 topskip 的评论

当编译变慢时,命令行输出中会显示以下几行(日志文件包含相同的信息,但中间包含更多信息):

luaotfload | 字体名称数据库已加载:C:/Users/doncherry/AppData/Local/MiKTeX/2。
9/luatex-cache/generic/names/otfl-names.lua(加载:C:/Users/doncherry/AppData/Local/
MiKTeX/2.9/luatex-cache/generic/fonts/otf/temp-minionpro-regular.lua)(加载:C:/
用户/doncherry/AppData/Local/MiKTeX/2.9/luatex-cache/generic/fonts/otf/temp-minion
pro-bold.lua)(加载:C:/Users/doncherry/AppData/Local/MiKTeX/2.9/luatex-cache/generi
c/fonts/otf/temp-minionpro-it.lua)(加载:C:/Users/doncherry/AppData/Local/MiKTeX/2。
9/luatex-cache/generic/fonts/otf/temp-minionpro-boldit.lua)(加载:C:/Users/doncher
ry/应用程序数据/本地/MiKTeX/2.9/luatex-cache/通用/字体/otf/temp-myriadpro-regula
r.lua)(加载:C:/Users/doncherry/AppData/Local/MiKTeX/2.9/luatex-cache/generic/fonts
/otf/temp-myriadpro-bold.lua)(加载:C:/Users/doncherry/AppData/Local/MiKTeX/2.9/lua
tex-cache/generic/fonts/otf/temp-myriadpro-it.lua)(加载:C:/Users/doncherry/AppData
/本地/MiKTeX/2.9/luatex-cache/通用/字体/otf/temp-myriadpro-boldit.lua)

这里出现的关键词cachetemp让我想到可能有某种方法可以永久存储这些信息,这样就不必每次都创建它?

我在 Windows 7 64 位上使用了 LuaTeX,版本 beta-0.70.2-2012060719 (MiKTeX 2.9) (format=lualatex 2012.9.9)。字体是通过 Adob​​e Reader X 提供的,由我手动安装C:\Windows\Fonts

我的问题是:为什么使用 LuaLaTeX 编译这么慢,我该怎么办?

答案1

这里有多种原因,但 39 秒似乎太多了。您的日志文件显示您的文件已经是缓存格式 ( temp-fontname.lua)。

  • fontspec 在启动时会加载大量实例 ( \setmainfont)。每个实例都需要时间。
  • 内存速度/限制会产生很大影响。这些 lua 表往往非常大,每次加载字体时都需要解析。如果可用内存有限,即使是分页也可能是一个问题(尽管我现在怀疑它不是)。

由于 XeTeX 非常快,我认为大部分时间都花在了第二个给定点上。

相关内容