也许我在这里忽略了一些显而易见的东西,但我有点困惑,因此提出了这个问题。
我想将默认的“Latin Modern”字体更改为其他字体。目前,将其更改为我所拥有的 TeX 发行版附带的内置字体之一。
我前往usr/local/texlive/2021/texmf-dist/fonts
Mac OS 上的字体目录查看我可以使用哪些字体(除了从互联网上下载字体并使用它们)。
例如,我可能安装了字体“EB Garamond”,因为我可以在上面的目录中看到以下文件:
fonts/
|- opentype/public/ebgaramond/EBGaramond-Regular.otf
|- opentype/public/ebgaramond/EBGaramond-Italic.otf
|- opentype/public/ebgaramond/EBGaramond-Bold.otf
等等。其他 EB Garamond 文件位于该tfm
目录中。
现在考虑以下代码:
% !TEX TS-program = XeLaTeX
\documentclass[a4paper]{article}
\usepackage{fontspec}
\setmainfont{EB Garamond}
\begin{document}
Regular text. \textbf{Bold} text.
\end{document}
我使用 XeLaTeX 编译该文件并收到以下消息:
! Package fontspec Error: The font "EB Garamond" cannot be found.
For immediate help type H <return>.
现在,如果我将上面的行更改为,\setmainfont{EBGaramond-Regular.otf}
则会收到以下消息:
LaTeX Font Warning: Font shape `TU/EBGaramond-Bold.otf(0)/b/n' undefined
(Font) using `TU/EBGaramond-Bold.otf(0)/m/n' instead on input line 9.
我以为我所做的只是遵循了这个答案。
那么我的字体规范有什么问题?
此外,我如何系统地检查此字体或其他字体是否已安装,以及如何(系统地)找到它的“家族名称”(在本例中为 EB Garamond)并传递到命令中\setmainfont{THE FONT FAMILY NAME}
?
答案1
如果您不想更改 fontconfig 文件,您可以Path
向参数添加一个显式选项,\setmainfont
以便在您通过字体的(隐式)名称而不是 otf 或 ttf 文件名来引用字体时,让您的文档在 XeLaTeX 下进行编译。
由于 EB Garamond OpenType 字体系列具有 2 种“常规”字体粗细——“常规”和“中等”——以及 3 种“粗体”字体重量-- 'Semibold'、'Bold' 和 'ExtraBold' -- 正体和斜体字体形状,最好从使用字体名称切换到使用文件名,以便通过为选项UprightFont
、ItalicFont
和设定显式文件名值来告知 LaTeX 应该在文档中使用哪些字体。如果您使用文件名而不是字体名称,BoldFont
则BoldItalicFont
不再需要Path
在 XeLaTeX 下设置该选项。
以下代码在 XeLaTeX 和 LuaLaTeX 下运行。
% !TEX TS-program = XeLaTeX
\documentclass{article}
\usepackage{fontspec}
\begin{document}
\setmainfont{EBGaramond}[%
%Path=/usr/local/texlive/2021/texmf-dist/fonts/opentype/public/ebgaramond/,
Extension = .otf ,
UprightFont = *-Regular,
ItalicFont = *-Italic,
BoldFont = *-SemiBold,
BoldItalicFont = *-SemiBoldItalic]
Regular. \textit{Italic.} \textbf{Semibold.} \textit{\textbf{Semibold-italic.}}
\setmainfont{EBGaramond}[%
%Path=/usr/local/texlive/2021/texmf-dist/fonts/opentype/public/ebgaramond/,
Extension = .otf ,
UprightFont = *-Medium,
ItalicFont = *-MediumItalic,
BoldFont = *-ExtraBold,
BoldItalicFont = *-ExtraBoldItalic]
Medium. \textit{Medium-italic.} \textbf{Extrabold.} \textit{\textbf{Extrabold-italic.}}
\end{document}
答案2
除非您让 fontconfig 知道它们,否则 xetex 将不会通过内部字体名称找到 texlive 字体。
texlive 附带一个字体配置文件,但默认情况下不会安装它,以避免更改系统。根据字体配置文件的设置,有多种方法可以添加它。
我有一个 /etc/fonts/local.conf
包含
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<dir>/usr/local/texlive/2021/texmf-dist/fonts/opentype</dir>
<dir>/usr/local/texlive/2021/texmf-dist/fonts/truetype</dir>
</fontconfig>
添加此运行后fc-cache -f
获取 fontconfig 来重新缓存字体列表。
看
第 3.4.4 节 XeTEX 和 LuaTEX 的系统字体配置
在 texlive 手册 ( texdoc texlive
) 中。