为新字体生成 luatex 字体缓存的资源最密集的方法是什么?

为新字体生成 luatex 字体缓存的资源最密集的方法是什么?

当字体第一次与一起使用时lualatexluaotfload会发挥一些神奇的作用来生成字体缓存文件。

对于大字体(例如,Noto Sans CJK) 这会耗费大量时间和内存。

我有一台旧电脑(5 年前的 MacBook Air,4GB RAM),运行 Linux,交换分区为 4GB。此字体的初始缓存生成可能需要 15 分钟以上,导致我的电脑无法使用。有时我会耗尽内存,然后进程就会终止。

假设我想使用这样的字体:

\documentclass{article}
\usepackage{fontspec}
\setmainfont[Script=CJK,Language=Chinese Simplified]{Noto Sans CJK SC}
\begin{document}
中文
\end{document}

生成所需缓存文件的最耗资源方式和/或最快方式是什么?

目前,我退出所有内容(甚至 X11)并lualatex从控制台运行,但仍然需要很长时间,并且退出所有内容有点麻烦。

答案1

您可以按照第 9.2.1 节“修剪字体”中的建议进行操作ConTeXt 之外的字体并删除字体中的所有字形名称。

在此处输入图片描述

适应 LaTeX 和您的示例:

\documentclass{article}
\usepackage{fontspec,luacode}
\begin{luacode*}
fonts.handlers.otf.readers.registerextender {
    name   = "remove names from Noto Sans CJK SC",
    action = function(fontdata)
        if string.match(fontdata.metadata.fullname, "Noto Sans CJK SC") then
            texio.write_nl("Trimming font " .. fontdata.metadata.fullname)
            for k, v in next, fontdata.descriptions do
                v.name = nil
            end
        end
    end
}
\end{luacode*}
\setmainfont[Script=CJK,Language=Chinese Simplified]{Noto Sans CJK SC}
\begin{document}
中文
\end{document}

相关内容