librebaskerville 的字体名称是什么?

librebaskerville 的字体名称是什么?

我可以加载包“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-toolfc-match但是fc-search以上通常是您想要的。

此时,您需要使用LibreBaskerville.fontspec文件名搜索或来查找名为 的文件kpsewhich LibreBaskerville.fontspec。如果该文件存在,则系统会为您完成所有配置并\setmainfont{LibreBaskerville}加载该文件。但是,在本例中,系统不会加载该文件。

获得路径后,搜索目录将为您提供该系列字体的文件名。在本例中:LibreBaskerville-Bold.ttfLibreBaskerville-Italic.ttf和。推荐的加载此系列的方法是通过文件名,如 egreg 的回答中所述,尽管我通常会略微不同地进行操作LibreBaskerville-Regular.ttfLibreBskvl-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

相关内容