我见过的关于使用 XeLaTeX 的各种帖子都建议对字体进行如下设置:
\documentclass{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\usepackage{unicode-math}
\setdefaultlanguage[variant=american]{english}
\setotherlanguages{french,german}
\defaultfontfeatures{Scale=MatchLowercase, Ligatures=TeX}
\setmainfont{TeX Gyre Termes}[Scale=1.0]
\setmathfont{TeX Gyre Termes Math}
\usepackage[math]{blindtext}
\begin{document}
\blindtext[1]
\end{document}
问题:
- 确实需要吗
Ligatures=TeX
,或者这已经是默认的了fontspec
? - 这个选项到底
Scale=MatchLowercase
起什么作用?如果我省略它,输出结果不会有任何变化。 Scale=1.0
为什么需要选项\setmainfont
?我确实看到省略它会缩小文本字体(见下面的输出)。但为什么 TeX Gyre Termes 和 TeX Gyre Termes Math 尚未设计为大小兼容?
输出:
答案1
所有用和Ligatures=TeX
声明的字体都默认使用该选项。如何使用?\setmainfont
\setsansfont
fontspec
加载时,它fontspec.cfg
会按照通常的优先规则查找文件。如果未找到本地文件,则输入全局文件,其中包含
\defaultfontfeatures
[\rmfamily,\sffamily]
{Ligatures=TeX}
\defaultfontfeatures
[\ttfamily]
{WordSpace={1,0,0},
HyphenChar=None,
PunctuationSpace=WordSpace}
声明\defaultfontfeatures{Ligatures=TeX}
可用于使用\newfontfamily
或声明其他字体\newfontface
。注意不要对等宽字体系列进行此操作。在加载任何字体之前声明它会覆盖默认字体并将其应用于\setmonofont
,这通常是不必要的。
在声明主字体之前,选项Scale=MatchUppercase
或没有任何意义,因为它们会根据 Latin Modern 缩放主字体。它们在内部也没有什么意义,因为字体对于 x 高度与字形全高之间的比较通常有着截然不同的想法,因此必须对每种字体进行判断。Scale=MatchLowercase
\defaultfontfeatures
当然,Scale=1.0
如果您事先不应用缩放,则不需要。
答案2
问题 1 的答案:是的。请参阅文件fontspec
第 II 部分第 1 节,
...字体加载的默认设置会自动添加和命令
Ligatures=TeX
的功能。\setmainfont
\setsansfont
对于问题 2:请参阅文件fontspec
第二部分第 6.2 节,
...该
Scale
功能还接受选项MatchLowercase
和MatchUppercase
,将缩放所选字体以分别匹配当前默认罗马字体的小写或大写字母的高度;...
对于问题 3:我猜它是用来覆盖默认的Scale=MatchLowercase
。否则,新设置的罗马字体(通过使用\setmainfont
)将缩放以匹配默认罗马字体 Latin Modern Roman。(不确定,需要检查。)