LuaLaTeX 和 XeLaTeX 的字体名称是如何选择的?

LuaLaTeX 和 XeLaTeX 的字体名称是如何选择的?

ttf我使用 Font Book 应用程序在我的计算机(Mac)上安装了 Adob​​e Garamond Pro 的一个版本。字体文件位于 中/Library/Fonts/。我想知道 XeLaTeX 和 LuaLaTeX 最终如何选择您可以引用字体的名称。以下 MWE 将使用 XeLaTeX 进行编译,但不会使用 LuaLaTeX 进行编译:

\documentclass{article}

\usepackage{fontspec}
\setmainfont
  [
    Ligatures={
      TeX,
      Common
    },
    BoldFont={* Semibold}
  ]
  {Adobe Garamond Pro} 

\begin{document}

asdf \textbf{asdf}

\end{document}

如果我尝试使用 LuaLaTeX 进行编译,我会收到以下错误:

Users/adamliter/Library/texlive/2017/texmf-var/luatex-cache/generic/fonts/otl/adobe-garamond-pro-italic-2009.luc)
luaotfload | resolve : sequence of 3 lookups yielded nothing appropriate.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! fontspec error: "font-not-found"
! 
! The font "AdobeGaramondProSemibold" cannot be found.
! 
! See the fontspec documentation for further information.
! 
! For immediate help type H <return>.
!...............................................  

l.20   {Adobe Garamond Pro}

(但是,我相信在某个时间点 - 也许是使用 TeX Live 2015 或 2016 - 我可以根据.tex我计算机上的旧文档使用 LuaLaTeX 编译该 MWE。)

然而,以下 MWE使用 LuaLaTeX(以及 XeLaTeX)进行编译:

\documentclass{article}

\usepackage{fontspec}
\setmainfont
  [
    Ligatures={
      TeX,
      Common
    },
    BoldFont={AGaramondPro-Semibold}
  ]
  {AGaramondPro-Regular}

\begin{document}

asdf \textbf{asdf}

\end{document}

虽然这不是什么大问题,但我确实觉得这有点烦人。我希望能够利用 的fontspec功能来指定变体*。但是,至少在 LuaLaTeX 中,我似乎只能将 Adob​​e Garamond Pro 的 Semibold 变体引用为AGaramondPro-Semibold,这使我无法使用 将粗体变体指定为 Semibold *

(奇怪的是,我似乎可以在使用 LuaLaTeX 时引用AGaramondPro-RegularAdobe Garamond Pro换句话说,如果我删除BoldFont第一个 MWE 中的键值对,它可以很好地与 LuaLaTeX 一起编译。)

因此,我想知道 LuaLaTeX 究竟是如何选择我可以引用字体的名称的。这与文件有关吗.ttf?我能做些什么才能让第一个 MWE 用 LuaLaTeX 进行编译?

答案1

字体可以通过其符号名称或文件名找到。仅当字体保存在系统将搜索字体的字体目录中时,才可以使用符号名称,例如/Library/fonts/。符号名称可以借助以下方法列出otfinfo

voss@shania:~/.fonts/GaramondPro$ otfinfo -i AGaramondPro-Regular.otf 
Family:              Adobe Garamond Pro
Subfamily:           Regular
Full name:           AGaramondPro-Regular
PostScript name:     AGaramondPro-Regular
[...]

或者

voss@shania:~/.fonts/GaramondPro$ otfinfo -i AGaramondPro-Semibold.otf 
Family:              Adobe Garamond Pro
Subfamily:           Bold
Full name:           AGaramondPro-Semibold
PostScript name:     AGaramondPro-Semibold
Preferred subfamily: Semibold
Mac font menu name:  Adobe Garamond Pro Sb
[...]

以下示例使用这些符号名称:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{AGaramondPro}[
  UprightFont = *-Regular,
  BoldFont = *-Semibold]
\begin{document}

    asdf \textbf{asdf}

\end{document}

也可以使用文件名。

\setmainfont{Adobe-Garamond-Pro}[
  Extension=.ttf,
  Path=..., % only for non system font directories needed
  UprightFont = *-Regular_2008,
  BoldFont = *-Bold_2008,
  [...]]

如果一个系列的所有符号字体名称都是一致的,那么

\setmainfont{AGaramondPro}

应该足够了;fontspec将找到所有其他子系列,如常规、粗体、斜体、aso

答案2

您可以在示例中使用(与 lualatex 一起):

\documentclass{article}

\usepackage{fontspec}
\setmainfont
  [
    Ligatures={
      TeX,
      Common
    },
    UprightFont={*regular},
    BoldFont={*semibold}
  ]
  {agaramondpro}

\begin{document}

asdf \textbf{asdf}

\end{document}

但我认为 * 版本不值得花时间。每个字体系列似乎都有自己的系统。写下完整的字体名称会更快。

相关内容