诺托 CJKfont 是 Google 和 Adobe 开发的 OpenType CJK 字体。
在 ConTeXt 中,如果我写
\definefontfamily [myfamily] [serif] [Noto Serif CJK SC]
然后context
会在加载 Noto 字体时挂起。它会抱怨:
loading of table 'vorg' skipped
invalid index in single format 1: 64605 -> 67219 (max 65535)
rule 1 in gsub lookup 's_s_5' has empty lookups
然后它什么都不打印。内存使用量迅速上升到几 GB。我不得不手动终止该程序。
但是该字体单独使用 XeTeX 或 LuaTeX 效果很好。如何才能让它与 ConTeXt 配合使用?
答案1
对我来说,它运行起来没有问题。但是,构建缓存占用了我 50% 的 RAM,即 8 GB!
这是汉斯的官方声明关于情况
这些字体非常大……当需要更多字体时,lua 中的内存使用量可能会很大,因为分配量会增加一倍,但最终字体会非常高效地存储在缓存中,因此这只是一次性的内存使用
我正在使用mtxrun
构建字体缓存:
$ mtxrun --script font --convert NotoSerifCJKsc-Regular.otf
otf reader | loading of table 'vorg' skipped
otf reader | invalid index in single format 1: 64605 -> 67219 (max 65535)
otf reader | rule 1 in gsub lookup 's_s_5' has empty lookups
otf reader | merging 3 steps of 'gpos_single' lookup 'p_s_2'
otf reader | merging 4 steps of 'gpos_pair' lookup 'p_s_3'
otf reader | turning pairs of step 1 of 'gpos_pair' lookup 'p_s_3' into kerns
otf reader | merging 7 steps of 'gpos_single' lookup 'p_s_4'
otf reader | merging 3 steps of 'gpos_single' lookup 'p_s_5'
otf reader | merging 2 steps of 'gpos_pair' lookup 'p_s_6'
otf reader | merging 5 steps of 'gpos_single' lookup 'p_s_7'
otf reader | 18 steps of 343 removed due to merging
otf reader | 1 steps of 343 steps turned from pairs into kerns
otf reader | adding soft hyphen
otf reader | duplicates: 1 : (U+02003) @ I00574 (U+03000)
[...snip...]
otf reader | duplicates: 1 : ➡ (U+027A1) @ I0053A ⮕ (U+02B95)
mtx-fonts | font: 'NotoSerifCJKsc-Regular.otf' saved as 'noto serif cjk sc.lua'
使用 ConTeXt 运行也很好。以下是 MWE:
\definefont[noto][file:NotoSerifCJKsc-Regular.otf]
\starttext
\noto 樂
\stoptext
第一次运行花费 50 秒并占用 8GB RAM,但后续运行只需不到 2 秒并且仅占用几 MB RAM。
如果你没有足够的内存,请尝试下载更多 RAM。