我的系统上已经有好几年使用 TrueType 版本的(免费)字体(福尔科恩) 在我的texmf-local
。
我现在已经下载了较新的版本,它具有更多变体,并且使 OpenType 文件可以在系统范围内使用(更准确地说,它们在我的~/Library/Fonts
Mac OS X 上)。
有了xelatex
,没问题
\setmainfont{Vollkorn}[ItalicFont={* Italic},
BoldFont={* Bold}, BoldItalicFont={* Bold Italic}]
使用新的 (OpenType) 字体。完整代码:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Vollkorn}[%
%Numbers=Lining,
ItalicFont={* Italic},BoldFont={* Bold}, BoldItalicFont={* Bold Italic}]
\begin{document}
1234567890
\bfseries 1234567890
\itshape 1234567890
\mdseries 1234567890
\end{document}
但是lualatex
,一开始我不知道如何使用luaotfload-tool
(它似乎mkluatexfontdb
已经消失了? 没有这样的链接texbin
)但无论如何今天的 TL 更新有一个 luatex 更新,并且编译上面的文档lualatex
触发了数据库重建:
luaotfload | db : Font names database loaded from /usr/local/texlive/2015/texmf-
var/luatex-cache/generic/names/luaotfload-names.luc
luaotfload | db : Version mismatch; expected 2.600, got 2.510.
luaotfload | db : Force rebuild.(load luc: /usr/lo
但是我的文档仅对常规变体使用了新的 OpenType:
luaotfload | load : Lookup/name: "Vollkorn" -> "Vollkorn-Regular.otf"
luaotfload | load : Lookup/name: "VollkornBold" -> "Vollkorn-Bold.ttf"
luaotfload | load : Lookup/name: "VollkornBoldItalic" -> "Vollkorn-BoldItalic.tt
f"
luaotfload | load : Lookup/name: "VollkornItalic" -> "Vollkorn-Italic.ttf"
我去查看了一下相关文件,
file /usr/local/texlive/2015/texmf-var/luatex-cache/generic/names/luaotfload-lookup-cache.lua
我懂了:
return {
["Vollkorn##655360"]={ "Vollkorn-Regular.otf", false },
["Vollkorn:mode=node;script=latn;language=DFLT;+tlig;+trep;##655360"]={ "Vollkorn-Regular.otf", false },
["VollkornBold##655360"]={ "Vollkorn-Bold.ttf", false },
["VollkornBold:mode=node;script=latn;language=DFLT;+tlig;+trep;##655360"]={ "Vollkorn-Bold.ttf", false },
["VollkornBoldItalic##655360"]={ "Vollkorn-BoldItalic.ttf", false },
["VollkornBoldItalic:mode=node;script=latn;language=DFLT;+tlig;+trep;##655360"]={ "Vollkorn-BoldItalic.ttf", false },
["VollkornItalic##655360"]={ "Vollkorn-Italic.ttf", false },
["VollkornItalic:mode=node;script=latn;language=DFLT;+tlig;+trep;##655360"]={ "Vollkorn-Italic.ttf", false },
}
但在
/usr/local/texlive/2015/texmf-var/luatex-cache/generic/names/luaotfload-names.lua.gz
我确实发现例如:
["base"]={
["local"]={},
["system"]={
lines skipped
["Vollkorn-Bold.otf"]=1287,
["Vollkorn-BoldItalic.otf"]=1288,
["Vollkorn-Italic.otf"]=1289,
["Vollkorn-Medium.otf"]=1290,
["Vollkorn-MediumItalic.otf"]=1291,
["Vollkorn-Regular.otf"]=1292,
["Vollkorn-Semibold.otf"]=1293,
["Vollkorn-SemiboldItalic.otf"]=1294,
lines skipped
["texmf"]={
["Vollkorn-Bold.ttf"]=973,
["Vollkorn-BoldItalic.ttf"]=974,
["Vollkorn-Italic.ttf"]=975,
["Vollkorn-Regular.ttf"]=976,
因此所有文件似乎都已正确索引和识别。那么为什么只选择 Vollkorn Regular 作为新的 OpenType 字体,而对于 Bold、Italic 和 Bold Italic,文档使用旧ttf
文件?
</usr/local/texlive/2015/texmf-local/fonts/truetype/friedrichalthausen/vollkorn/
Vollkorn-Italic.ttf></usr/local/texlive/2015/texmf-local/fonts/truetype/friedric
halthausen/vollkorn/Vollkorn-BoldItalic.ttf></usr/local/texlive/2015/texmf-local
/fonts/truetype/friedrichalthausen/vollkorn/Vollkorn-Bold.ttf></Users/XXXXXXXX/Librar
y/Fonts/Vollkorn-Regular.otf>
Output written on testvollkorn.pdf (1 page, 26788 bytes).
Ulrike Fischer 在她的文章中给出了一个解决方法回答我接受。
然而,天真的用户直觉认为,lualatex
在这种情况下,字体加载时会发生一些不连贯的事情。因此,如果后面的答案解决或反驳了我的直觉,我会考虑验证它。
我在按照 的评论进行额外测试后添加了一些信息@phg
。我将我的(这是 Mac OS)otf
中较新的文件与中子目录位置中的较旧文件进行了交换。执行了和。此后,我观察到了完全相同的现象$HOME/Library/Fonts/
ttf
texmf-local
texhash
luaotfload-tool --update
\setmainfont{Vollkorn}[ItalicFont={* Italic},
BoldFont={* Bold}, BoldItalicFont={* Bold Italic}]
与之前一样:文档中使用的直立字体最终是来自 的字体$HOME/Library/Fonts/
,其他字体来自texmf-local
。
我当时想,解释是,只有当系统库中存在 文件名为 的字体时,才能Vollkorn-Regular.{otf,ttf}
通过 找到该字体。但这种解释完全是错误的:luaotfload
\setmainfont
Vollkorn
如果我只是otf
从系统库中删除字体,请执行luaotfload-tool --update
并重试:
\usepackage{fontspec}
\setmainfont{Vollkorn}[%
ItalicFont={* Italic},BoldFont={* Bold}, BoldItalicFont={* Bold Italic}]
则编译成功,日志显示:
</usr/local/texlive/2015/texmf-local/fonts/truetype/friedrichalthausen/vollkorn/
Vollkorn-Italic.ttf></usr/local/texlive/2015/texmf-local/fonts/truetype/friedric
halthausen/vollkorn/Vollkorn-BoldItalic.ttf></usr/local/texlive/2015/texmf-local
/fonts/truetype/friedrichalthausen/vollkorn/Vollkorn-Bold.ttf></usr/local/texliv
e/2015/texmf-local/fonts/truetype/friedrichalthausen/vollkorn/Vollkorn-Regular.t
tf>
Output written on testluaotfload.pdf (1 page, 25202 bytes).
Transcript written on testluaotfload.log.
所有文件均在 中找到texmf-local
。
otf
如果我把文件移回~/Library/Fonts
系统用户位置,它就会被使用。在这种情况下,奇怪的是这种情况只发生在直立形状上。对于粗体、斜体和粗体斜体,找到texmf-local
的文件优先于中的字体文件~/Library/Fonts
。
答案1
提供多种字体版本并不是一个好主意(xelatex 也是如此)。要按名称查找字体,fontspec 和 lualatex 必须检查各种变体(和各种扩展),并且搜索必须是“模糊的”,因此很容易找到错误的字体。
您可以尝试\setmainfont{...}[Extension=.otf]
使用文件名而不是字体名来强制使用正确的扩展名。