加载字体时按名字,使用的搜索机制是什么?如何进行匹配?(在文档中标记为 TODO)
我遇到了很多问题,例如:“Hoefler Text Engraved”字体正在用粗体替换默认的“Hoefler Text” \fontspec{Hoefler Text} \textbf{...}
。fontforge 中的一些元数据:
PS 名称
Family Name: Hoefler Text
Weight: Normal
TTF 名称
Family: Hoefler Text Engraved
Styles (Subfamily): Regular
Preferred Family: Hoefler Text
Preferred Styles: Engraved
fontspec/fontconfig 在文件中读取什么来匹配请求的字体?(在本例中为“Hoefler Text/Bold”
答案1
细节取决于所使用的引擎(XeTeX 或 LuaTeX)以及所讨论的操作系统。但是,一般来说,答案是“fontspec
实际上不这样做”。更准确地说,fontspec
依靠引擎的功能来加载字体。XeTeX 和 LuaTeX 使用不同的字体加载方法。XeTeX 包含依赖于操作系统的代码,因此使用系统的功能(因为 Windows、Mac OS X 和 Linux 对字体管理有不同的方法)。另一方面,LuaTeX 方法是在 Lua 中实现的,使用 LuaTeX 引擎的功能。
除了这些因素之外,并非所有字体都一样。即使它们具有相同的名称,也可能不是来自同一供应商。有些字体的内部结构令人遗憾地存在“缺陷”,这往往会在使用 加载时显示出来fontspec
。
fontspec
因此,如果您在加载特定字体时遇到问题,那么这不仅仅是“找不到字体”的问题,而是“fontspec
在 <platform> 上使用 <engine> 无法从 <supplier> 加载字体 <name>”。