![Xe(La)TeX 中的字体功能选择](https://linux22.com/image/253515/Xe(La)TeX%20%E4%B8%AD%E7%9A%84%E5%AD%97%E4%BD%93%E5%8A%9F%E8%83%BD%E9%80%89%E6%8B%A9.png)
我使用 XeTeX 引擎来编译基于我自己的类的文档,并使用包fontspec
来选择字体系列和特征。虽然这与我的问题无关,但为了更具体,我要说的是,对于 sans 字体,我使用的是 Formata(来自 Adobe)。该系列来自不同的 .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
该字体具有与数字相关的特征,即dnom
、frac
、、、等。lnum
numr
onum
ordn
手册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}