为了测试 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)
这里出现的关键词cache
和temp
让我想到可能有某种方法可以永久存储这些信息,这样就不必每次都创建它?
我在 Windows 7 64 位上使用了 LuaTeX,版本 beta-0.70.2-2012060719 (MiKTeX 2.9) (format=lualatex 2012.9.9)。字体是通过 Adobe Reader X 提供的,由我手动安装C:\Windows\Fonts
。
我的问题是:为什么使用 LuaLaTeX 编译这么慢,我该怎么办?
答案1
这里有多种原因,但 39 秒似乎太多了。您的日志文件显示您的文件已经是缓存格式 ( temp-fontname.lua
)。
- fontspec 在启动时会加载大量实例 (
\setmainfont
)。每个实例都需要时间。 - 内存速度/限制会产生很大影响。这些 lua 表往往非常大,每次加载字体时都需要解析。如果可用内存有限,即使是分页也可能是一个问题(尽管我现在怀疑它不是)。
由于 XeTeX 非常快,我认为大部分时间都花在了第二个给定点上。