设置主字体时出现问题

设置主字体时出现问题

也许我在这里忽略了一些显而易见的东西,但我有点困惑,因此提出了这个问题。

我想将默认的“Latin Modern”字体更改为其他字体。目前,将其更改为我所拥有的 TeX 发行版附带的内置字体之一。

我前往usr/local/texlive/2021/texmf-dist/fontsMac 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' -- 正体和斜体字体形状,最好从使用字体名称切换到使用文件名,以便通过为选项UprightFontItalicFont和设定显式文件名值来告知 LaTeX 应该在文档中使用哪些字体。如果您使用文件名而不是字体名称,BoldFontBoldItalicFont不再需要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) 中。

相关内容