我可以加载包“librebaskerville”,但似乎无法在采用字体名称的命令中引用它。
这是一个简短的 .tex 文件用于演示:
\documentclass{article}
\usepackage{librebaskerville}
% All of these fail
%\newfontfamily{\smallcaps}[RawFeature={+c2sc,+scmp}]{librebaskerville}
\newfontfamily{\smallcaps}[RawFeature={+c2sc,+scmp}]{Libre Baskerville}
%\newfontfamily{\smallcaps}[RawFeature={+c2sc,+scmp}]{LibreBaskerville}
\begin{document}
Some text.
\end{document}
运行时latexmk -xelatex
(在 Ubuntu 18.04 和 OSX 12.4 上),会生成如下错误消息:
(/usr/local/texlive/2020/texmf-dist/tex/latex/base/textcomp.sty))kpathsea:make_tex: Invalid filename `Libre Baskerville', contains ' '
! Package fontspec Error: The font "Libre Baskerville" cannot be found.
\newfontfamily
在、\setmathsfont
和等命令中,需要什么名称来引用 librebaskerville 字体\setmathrm
?或者我如何才能找到?(我已经在 Google 上搜索了很多次。)
更新:上述 .tex 文件可在 Overleaf 上运行。
答案1
尽管独一无二的@egreg 给出了触及问题根源的答案,但是还没有人给出完全字面意义上的答案,而通过搜索找到此页面的人可能正在寻找该答案。
从命令行按名称查找字体的一个好方法是
luaotfload-tool --find "Libre Baskerville" --fuzzy
如果名称正确,这将显示文件的完整路径。
如果这没有让你找到精确匹配项(如果你只记得它是 Baskerville 的某个版本),--fuzzy
它会告诉你最接近的匹配项是BaskervilleF
。如果它找到了错误的字体,你可以告诉它显示前几个匹配项。所以,
luaotfload-tool --find "Baskerville" --fuzzy --limit=4
我的盒子上给了我
luaotfload | db : Reload initiated (formats: otf,ttf,ttc); reason: Font "Baskerville" not found.
luaotfload | resolve : sequence of 3 lookups yielded nothing appropriate.
luaotfload | resolve : Cannot find "Baskerville" in index.
luaotfload | resolve : Looking for close matches, this may take a while ...
luaotfload | query : Distance from "baskerville": 1
BaskervilleF
luaotfload | query : Distance from "baskerville": 3
ADFBaskerville
GFSBaskerville-Regular
luaotfload | query : Distance from "baskerville": 5
BaskervilleF Bold
Libre Baskerville
luaotfload | query : Distance from "baskerville": 6
QTBasker-Bold
也可以对 或 进行更复杂的查询luaotfload-tool
,fc-match
但是fc-search
以上通常是您想要的。
此时,您需要使用LibreBaskerville.fontspec
文件名搜索或来查找名为 的文件kpsewhich LibreBaskerville.fontspec
。如果该文件存在,则系统会为您完成所有配置并\setmainfont{LibreBaskerville}
加载该文件。但是,在本例中,系统不会加载该文件。
获得路径后,搜索目录将为您提供该系列字体的文件名。在本例中:LibreBaskerville-Bold.ttf
、LibreBaskerville-Italic.ttf
和。推荐的加载此系列的方法是通过文件名,如 egreg 的回答中所述,尽管我通常会略微不同地进行操作LibreBaskerville-Regular.ttf
,LibreBskvl-BoldItalic.ttf
以防我需要重复使用相同的字体系列:
\defaultfontfeatures{Scale=MatchLowercase}
\defaultfontfeatures[LibreBaskerville]{
Extension=.ttf,
UprightFont = *-Regular,
ItalicFont = *-Italic,
BoldFont = *-Bold,
BoldItalicFont = LibreBskvl-BoldItalic,
SmallCapsFont = BaskervilleF-Regular.otf,
SmallCapsFeatures={Letters=SmallCaps},
Ligatures={Common,Discretionary,TeX}
}
% I don’t want to repeat all of the above multiple times when I select the
% same font more than once, and probably introduce inconsistencies.
\setmainfont{LibreBaskerville}
\newfontfamily\baskerville{LibreBaskerville}
但是,还有另一种方法。如果你指定luaotfload-tool
显示字体信息而不仅仅是文件名,它将为你提供所有字体的内部名称。所以,
luaotfload-tool --find "Libre Baskerville" -i
会给你一个大垃圾,包括
compatiblename: Libre Baskerville
family: Libre Baskerville
fontname: LibreBaskerville-Regular
以及其他一些名称。通常,fontspec
应该能够通过这些名称之一找到字体,但这并不总是有效。
答案2
如果我查找与 TeX Live 一起分发的 LibreBaskerville 字体的功能
.../texmf-dist/fonts/truetype/impallari/librebaskerville/
通过做
otfinfo -f $(kpsewhich LibreBaskerville-Regular.ttf)
我明白了
dlig Discretionary Ligatures
frac Fractions
kern Kerning
liga Standard Ligatures
ordn Ordinals
sinf Scientific Inferiors
sups Superscript
这表明不支持小型大写字母。
相反,BaskervilleF 确实支持他们。
\documentclass{article}
\usepackage{fontspec}
\setmainfont{LibreBaskerville}[
Extension=.ttf,
UprightFont = *-Regular,
ItalicFont = *-Italic,
BoldFont = *-Bold,
BoldItalicFont = LibreBskvl-BoldItalic,
SmallCapsFont = BaskervilleF-Regular.otf,
SmallCapsFeatures={Letters=SmallCaps,Scale=1.10791},
]
\begin{document}
Baskerville \textsc{Baskerville}
\end{document}
然而,BaskervilleF 似乎只是缩小了大写字母。:-(
答案3
如果您使用 lualatex 运行测试文档,它将确认您拥有该字体,并在日志末尾显示其完整路径。您可以使用fontspec
比内部字体名称更容易与 xetex 配合使用的文件名。在这种情况下LibreBaskerville-Regular.otf