有没有办法在 fontspec 中使用不同的本地字体文件来表示不同的字体大小?

有没有办法在 fontspec 中使用不同的本地字体文件来表示不同的字体大小?

我非常喜欢EB-Garamond 字体Georg Duffner 的。到目前为止,他已经制作了两套字体文件,分别为“设计尺寸 8pt”和“设计尺寸 12pt”。有没有办法让fontspec(也可能unicode-math)EB-Garamond-8 字体用于小尺寸,例如下标/上标、脚注……,EB-Garamond-12 字体用于常规尺寸使用本地字体文件时¹?

如果我只使用 EBGaramond12,则将 EBGaramond12-* .otf 文件放在 .tex² 同级的 fonts/ 目录中时,以下代码有效

\setmainfont[
    Path=fonts/,
    Extension=.otf,
    UprightFont=*-Regular,
    ItalicFont=*-Italic,
    BoldFont=*-Bold,
    RawFeature={+clig,+dlig,+cv11},]{EBGaramond12}

但如果我尝试调整它以使用SizeFeatures选项

\setmainfont[
    Path=fonts/,
    Extension=.otf,
    UprightFont=*-Regular,
    ItalicFont=*-Italic,
    BoldFont=*-Bold,
    RawFeature={+clig,+dlig,+cv11},
    SizeFeatures={
        {Size={-12}, UprightFont=EBGaramond8-Regular, ItalicFont=EBGaramond8-Italic},
        {Size={12-}, UprightFont=EBGaramond12-Regular, ItalicFont=EBGaramond12-Italic, BoldFont=EBGaramond12-Bold}
    }]{EBGaramond12}

然后文档将无法编译,并且会出现以下错误。使用完整名称而不是通配符不会改变任何事情。

The key 'fontspec/UprightFont' is unknown and is being ignored.

¹ 这意味着使用自动选择正确系统字体不是一个选项。

² 文件结构为

.
├── fonts
│   ├── EBGaramond08-Italic.otf
│   ├── EBGaramond08-Regular.otf
│   ├── EBGaramond12-Bold.otf
│   ├── EBGaramond12-Italic.otf
│   └── EBGaramond12-Regular.otf
└── paper.tex

答案1

自 2.4 版起fontspec,已经能够针对不同的光学尺寸使用不同的本地字体,参见README

诀窍是使用Font嵌入在 下的选项来指定不同的字体,而该选项又必须嵌入在、SizeFeatures等选项下(这是关键部分),参见UprightFeaturesItalicFeaturesfontspec manual根据第 节6.6

这是一个简单的例子:

\documentclass{article}
\usepackage{fontspec}
    \setmainfont{EBGaramond}[
        Path = ./fonts/,
        Extension = .otf,
        UprightFont = *12-Regular, % set EB Garamond 12 as default upright font
        UprightFeatures = {
            SizeFeatures = {
                {Size = -10.1,
                    Font = *08-Regular}, % use EB Garamond 08 for 10pt size and smaller
                {Size = 10.1-}}}, % use default upright font for larger than 10pt size
        ItalicFont = *12-Italic, % set EB Garamond 12 as default italic font
        ItalicFeatures = {
            SizeFeatures = {
                {Size = -10.1,
                    Font = *08-Italic}, % use EB Garamond 08 for 10pt size and smaller
                {Size = 10.1-}}}, % use default italic font for larger than 10pt size
        SmallCapsFeatures = {Letters = SmallCaps},
        Ligatures = {Common, TeX},
        Numbers = {Proportional, OldStyle}]
\begin{document}

EB Garamond 08: The quick brown fox jumps over the lazy dog 1234567890

\textit{EB Garamond 08: The quick brown fox jumps over the lazy dog 1234567890}

\large
EB Garamond 12: The quick brown fox jumps over the lazy dog 1234567890

\textit{EB Garamond 12: The quick brown fox jumps over the lazy dog 1234567890}

\end{document}

在此处输入图片描述

答案2

如果您从 Georg Duffner 的网站下载字体,则存档中包含一个名为 的文件。它会告诉您使用(而不是您的)README.xelualatex加载字体,并说明字体大小会自动调整。它还说明了如何关闭视觉尺寸(如果您愿意):。\setmainfont{EB Garamond}\setmainfont{EBGaramond12}\setmainfont[OpticalSize=0]{EB Garamond 12 Regular}

答案3

我仍然使用NFSS而不是fontspec。并且NFSS有字体大小的选项。我从未使用过此功能,因此无法提出确切的语法。

下面是我为 Univers 设置的私人 NFSS 示例。它使用私人编码EUT1,您应该将其更改为可能EU1

\DeclareFontFamily{EUT1}{univers}{}
\DeclareFontShape{EUT1}{univers}{m}{n}{ <-> "[UniversCom-55Roman.ttf]"}{}
\DeclareFontShape{EUT1}{univers}{m}{it}{ <-> "[UniversCom-55Oblique.ttf]"}{}
\DeclareFontShape{EUT1}{univers}{bx}{n}{ <-> "[UniversCom-65Bold.ttf]"}{}
\DeclareFontShape{EUT1}{univers}{bx}{it}{ <-> "[UniversCom-65Bold.ttf]:slant=0.2"}{}
\DeclareFontShape{EUT1}{univers}{bl}{n}{ <-> "[UniversCom-75Black.ttf]"}{}
\DeclareErrorFont{EUT1}{univers}{m}{n}{10}
\DeclareFontSubstitution{EUT1}{univers}{m}{n}

相关内容