我正在尝试将文档从使用 xelatex+polyglossia 转换为使用 luatex+babel (按照建议这里)。
相关代码为:
\usepackage[english, bidi=basic]{babel}
\usepackage{fontspec}
\babelprovide[import,main]{hebrew}
\babelfont[*hebrew]{rm}{David CLM}
lualatex 开始缓慢地运行,然后说:
luaotfload | db : Reload initiated (formats: otf,ttf,ttc); reason: "Font DavidCLM not found.".
luaotfload | resolve : sequence of 3 lookups yielded nothing appropriate.
! Package fontspec Error: The font "DavidCLM" cannot be found.
David CLM 是一种系统字体(在我的 Devuan GNU/Linux 3.0 Beowulf 系统上);并且 xelatex 可以使用它。为什么 lualatex 不能使用它?我该如何让 lualatex 识别并使用该字体?
答案1
如果 XeTeX 可以找到字体,fc-match
那么也应该可以。因此,你可以使用以下命令获取其索引下的所有名称
fc-match -v "David CLM"
在我的系统上,这告诉我文件名是DavidCLM-Medium.otf
,系列是“David CLM”,样式是“Medium”,全名是“David CLM Medium”。XeTeX 将“David CLM”与“David CLM Medium”匹配,而 LuaTeX 则没有。
推荐的加载字体系列的方式是通过其文件名:
\documentclass{article}
\usepackage[bidi=basic, layout=sectioning.tabular]{babel}
\usepackage{fontspec}
\babelprovide[import=he]{hebrew}
\defaultfontfeatures{ Scale = MatchUppercase,
Ligatures = TeX }
\defaultfontfeatures[DavidCLM]{
UprightFont = *-Medium,
BoldFont = *-Bold,
Ligatures = Discretionary,
Extension = .otf,
% For italics that slant right-to-left, use:
ItalicFont = *-MediumItalic,
BoldItalicFont = *-BoldItalic,
% For italics that slant left-to-right, instead use:
% AutoFakeSlant = 0.15
}
\babelfont{rm}
[Scale=1.0]{TeX Gyre Schola}
\babelfont[hebrew]{rm}
{David CLM}
\begin{document}
\begin{otherlanguage}{hebrew}
שָׁלוֹם חֲבֵרִים
\end{otherlanguage}
\end{document}
这样就消除了所有的猜测,并告诉fontspec
查找具有确切名称的文件DavidCLM-Medium.otf
,DavidCLM-Bold.otf
等等。
更简单的 MWE 将是
\documentclass{article}
\usepackage[bidi=basic, layout=sectioning.tabular]{babel}
\babelprovide[import, main]{hebrew}
\babelfont{rm}
[UprightFont=*-Medium]{DavidCLM}
\begin{document}
שָׁלוֹם חֲבֵרִים
\end{document}
请注意,我有安装了 Culmus Project 字体 1.33 版本。 如果您的系统上安装了不同的版本,您的文件可能会有不同的文件名。您还应该能够通过系列名称加样式来加载它UprightFont = {David CLM Medium}, BoldFont = {David CLM Bold}
(不用担心您不想要的倾斜面)。
答案2
也许有更聪明的解决方案,但这就是我所做的。这个问题的答案:
允许您列出所有可以使用 lualatex 的字体(用于“使用”的一些定义)。我查找了字体名称的基本部分“David”,但忽略了大写,因为列表中的所有项目似乎都是小写的。所以:
$ ./listluatexfonts | egrep -i "david.*clm" | sort -u
davidclmbold
davidclmbolditalic
davidclmmedium
davidclmmediumitalic
taameydavidclmbold
taameydavidclmboldoblique
taameydavidclmmedium
而我的情况的底线答案是davidclmmedium
我的{rm}
字体。也许我还需要发出粗体命令。
为了完整性,该listluatexfonts
文件的内容如下:
#!/usr/bin/env texlua
kpse.set_program_name("listluatexfonts")
cachefile = kpse.expand_var("$TEXMFVAR") .. "/luatex-cache/generic/names/luaotfload-names.luc"
fontlist = dofile(cachefile)
assert(fontlist,"Could not load font name database")
local tmp = {}
for _,font in ipairs(fontlist.mappings) do
tmp[#tmp + 1] = font.fontname
end
table.sort(tmp)
for _,fontname in ipairs(tmp) do
print(fontname)
end