Xe(La)TeX 中的字体功能选择

Xe(La)TeX 中的字体功能选择

我使用 XeTeX 引擎来编译基于我自己的类的文档,并使用包fontspec来选择字体系列和特征。虽然这与我的问题无关,但为了更具体,我要说的是,对于 sans 字体,我使用的是 Formata(来自 Adob​​e)。该系列来自不同的 .otf 文件,根名为 Formata,这样 *-Regular 文件(以及 *-Light,这只是关于重量系列)仅包含“非专家”类型,小型大写字母和文本图形包含在文件 *-RegularSC 甚至另一个 *-RegularExpert 中。

fontspec由于有 键,我对小写字母没有问题SmallCapsFont,但我想将文本数字作为数字的默认选择。当然,我已经Numbers=OldStyle在 中设置了\defaultfontfeatures,但这不行。有没有办法让我无需切换 即可获取“专家”文件中的数字\textsc

此外,Formata 系列在文件 *-Condensed 中包含一个压缩面(连同所有形状和重量系列)。是否有一个开关可以加载它而不必诉诸fontspec's\newfontfamily\newfontface

好吧,我的首要任务是解决与数字相关的问题,但是为了不再开另一篇文章,我认为后者在这里也适用。

答案1

许多工具可以让您检查 OTF 字体的功能(并且通常还附有文档)。

例如,您可以使用otfinfo

$ otfinfo -f /usr/local/share/fonts/EBGaramond12-Regular.otf 
c2sc    Small Capitals From Capitals
calt    Contextual Alternates
case    Case-Sensitive Forms
ccmp    Glyph Composition/Decomposition
cv01    <unknown feature>
cv02    <unknown feature>
cv03    <unknown feature>
cv06    <unknown feature>
cv11    <unknown feature>
cv21    <unknown feature>
cv80    <unknown feature>
cv81    <unknown feature>
cv90    <unknown feature>
cv91    <unknown feature>
dlig    Discretionary Ligatures
dnom    Denominators
frac    Fractions
hlig    Historical Ligatures
kern    Kerning
liga    Standard Ligatures
lnum    Lining Figures
mark    Mark Positioning
mkmk    Mark to Mark Positioning
numr    Numerators
onum    Oldstyle Figures
ordn    Ordinals
pnum    Proportional Figures
sinf    Scientific Inferiors
size    Optical Size
smcp    Small Capitals
ss01    Stylistic Set 1
ss02    Stylistic Set 2
ss05    Stylistic Set 5
ss06    Stylistic Set 6
ss20    Stylistic Set 20
subs    Subscript
sups    Superscript
tnum    Tabular Figures

该字体具有与数字相关的特征,即dnomfrac、、、等。lnumnumronumordn

手册fontspec将为您提供使用它们的密钥,或者您也可以直接使用密钥来使用它们RawFeatures

答案2

虽然你的字体看起来很奇怪,但可以让 XeTeX 自动从其他字体中选择某些字形。你可以这样做

\documentclass{article}

\usepackage{fontspec}

\setmainfont{Verdana}
\newfontfamily{\numfont}{Times New Roman}

\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\NumSubst

\XeTeXcharclass`\1=\NumSubst
\XeTeXcharclass`\2=\NumSubst
\XeTeXcharclass`\3=\NumSubst
\XeTeXcharclass`\4=\NumSubst
\XeTeXcharclass`\5=\NumSubst
\XeTeXcharclass`\6=\NumSubst
\XeTeXcharclass`\7=\NumSubst
\XeTeXcharclass`\8=\NumSubst
\XeTeXcharclass`\9=\NumSubst
\XeTeXcharclass`\0=\NumSubst

\XeTeXinterchartoks 0 \NumSubst = {\begingroup\numfont}
\XeTeXinterchartoks 255 \NumSubst = {\begingroup\numfont}
\XeTeXinterchartoks \NumSubst 0 = {\endgroup}
\XeTeXinterchartoks \NumSubst 255 = {\endgroup}

\begin{document}

abc123

\end{document}

相关内容