使用 XeLaTeX 缩放字体

使用 XeLaTeX 缩放字体

我见过的关于使用 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}

问题:

  1. 确实需要吗Ligatures=TeX,或者这已经是默认的了fontspec
  2. 这个选项到底Scale=MatchLowercase起什么作用?如果我省略它,输出结果不会有任何变化。
  3. Scale=1.0为什么需要选项\setmainfont?我确实看到省略它会缩小文本字体(见下面的输出)。但为什么 TeX Gyre Termes 和 TeX Gyre Termes Math 尚未设计为大小兼容?

输出:

包括 Scale=1.0 选项

省略 Scale=1.0 选项

答案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功能还接受选项MatchLowercaseMatchUppercase,将缩放所选字体以分别匹配当前默认罗马字体的小写或大写字母的高度;...

对于问题 3:我猜它是用来覆盖默认的Scale=MatchLowercase。否则,新设置的罗马字体(通过使用\setmainfont)将缩放以匹配默认罗马字体 Latin Modern Roman。(不确定,需要检查。)

相关内容