我非常喜欢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
等选项下(这是关键部分),参见UprightFeatures
ItalicFeatures
fontspec 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}