使用 fontspec 和 xelatex 进行类似 NFSS 的字体粗细选择

使用 fontspec 和 xelatex 进行类似 NFSS 的字体粗细选择

好的,我已经掌握了 fontspec,我可以说

\setromanfont[Mapping=tex-text,Ligatures=Common,Numbers=OldStyle]{Sabon LT Std}

事实上,为了达到效果,我可以这样说

\newfontfamily{\ultrablack}[UprightFont={Syntax LT Std Ultra Black}]{Syntax LT Std}

瞧!我可以相对轻松地在字体和粗细之间切换。相对而言。

但说我希望能够做正确的 nfss 事情:

\fontfamily{pxt}\fontseries{c}\fontshape{n}\fontsize{12pt}{14.4pt}\selectfont

确实有选择器可以指定UprightFontBoldBoldItalicItalic但不能指定SemiBoldUltraBlackLight Condensed。除非我遗漏了什么。

欢迎任何指点或建议。

谢谢。

答案1

如果您想设置一个具有比使用 fontspec 的标准选项更多的形状/粗细的系列,我认为最好编写合适的 .fd 文件。您可以在 euenc 包中找到示例(针对 lmr/lmss/lmtt 系列)。对于 xelatex,您应该编写 eu1XXX.fd 文件。eu2 适用于 lualatex。–

编辑2017

fontspec现在可以选择FontFace添加更多形状和重量,因此不再需要 .fd 文件。

但是如果有人想这样做:在当前的 texsystems 中,lualatex 和 xelatex 的标准编码名称现在是 TU,所以应该写 TUxxx.fd-files。

答案2

Ulrike Fischer 的回答很好,但我举一个例子EB Garamond 的 GitHub 版本

\newfontfamily\ebgaramond{EBGaramond}[
  UprightFont = *-Regular ,
  ItalicFont = *-Italic ,
  BoldFont = *-Bold ,
  ItalicFont = *-Italic ,
  FontFace = {mb}{n}{*-Medium},
  FontFace = {mb}{it}{*-MediumItalic},
  FontFace = {sb}{n}{*-SemiBold},
  FontFace = {sb}{it}{*-SemiBoldItalic},
  FontFace = {eb}{n}{*-ExtraBold},
  FontFace = {eb}{it}{*-ExtraBoldItalic},
  Extension = .otf ]

字体系列的缩写,如sbeb,取自LaTeX 字体安装指南。请注意,mbdb在许多其他列表中均不存在(例如LaTeX 伴侣)。Medium ( {mb}) 介于 Regular 和 Semibold 之间,Demibold ( {db}) 介于 Semibold 和 Bold 之间。如果 Regular 和 Bold 之间只有一种粗细,我建议将其设置为{sb},例如 Computer Modern Demi 就是这样的。

您可能还会发现定义如下命令很方便:

\DeclareRobustCommand\sbseries{\fontseries{sb}\selectfont}
\DeclareTextFontCommand{\textsb}{\sbseries}

这声明\textsb{...}\sbseries命令类似于\textbf{}\bfseries

相关内容