任务
我正在用 (Xe)LaTeX 写论文,用于fontspec
字体定义。文档的主字体大小是12pt
,传递给 TeX通过一个\documentclass
选项。我想定义一个辅助字体,并指定10pt
其大小以用于某些用途。理想情况下,我希望在使用 定义辅助字体时直接输入该字体的大小\newfontfamily
。
跳到“问题”部分内容可以被称作‘太长,没法读’的摘要。
我知道的潜在解决方案
我立即注意到的一件事是,这\footnotesize
会将文本缩放到10pt
我想要的正确字体大小。我以两种不同的方式使用了它,稍后可以在 MWE 中看到。
另一个选择是使用fontspec
,SizeFeatures
如这个答案。
第三个是定义一个\fontsize
— 但是,这需要计算两个不同的值;我认为应该由 TeX 来做,而不是我来做。
最后,还可以将Scale
字体定义为这个答案建议。
我没有找到任何直接的方法来指定字体的大小通过命令\newfontfamily
fontspec
CTAN 文档。
数学家协会
\documentclass[12pt]{report} % see also note [1]
\usepackage{mathspec} % includes fontspec
\usepackage{polyglossia} % for languages — see note [2]
\setmainlanguage[babelshorthands=true,spelling=new]{german}
\usepackage{lipsum}
\setmainfont[Mapping=tex-text]{LiberationSerif} % my main font — see note [3].
\newfontfamily\antiquasans[Mapping=tex-text]{LiberationSans} % A secondary font for demonstration
\newfontfamily\overpicfont[Mapping=tex-text, SizeFeatures={Size=10}]{LiberationSans} % defining with SizeFeatures
\newfontfamily\overpicscale[Mapping=tex-text, Scale=0.83]{LiberationSans} % defining with Scale
\newcommand\overpiccommand[1]{{\antiquasans\footnotesize #1}} % defined as an environment.
\begin{document}
\lipsum[1] % a comparison paragraph
{\antiquasans \lipsum[1]} % a sans-serif paragraph with 12pt
\overpiccommand{\lipsum[1]} % the environment including \footnotesize
{\overpicfont\footnotesize\lipsum[1]} % font forced to 10pt by SizeFeatures and footnotesize
{\overpicfont\lipsum[1]} % font forced to 10pt by SizeFeatures
{\overpicscale\lipsum[1]} % font scaled
\lipsum[1] % 12pt comparison paragraph
\end{document}
渲染输出
12pt
由于存在分页符,因此呈现的文档字体大小的输出被分成两个图像。
从上到下:
- 标准(衬线)文本的最后一行
- 无衬线字体
\antiquasans
\overpiccommand
环境,包括\antiquasans\footnotesize
\overpicfont\footnotesize
变体 — 包括FontFeatures
和\footnotesize
。这是通过分页符分隔的段落。- 仅使用
FontFeatures
- 仅使用
Scale
- 衬线字体的比较文本
12pt
。
在该10pt
文档中,我们可以比较以下段落:
- 标准(衬线)文本的最后一行
- 无衬线字体
\antiquasans
\overpiccommand
环境,包括\antiquasans\footnotesize
\overpicfont\footnotesize
变体 — 包括FontFeatures
和\footnotesize
。请注意,这里\footnotesize
定义了8pt
,而FontFeatures
需要10pt
。- 仅使用
FontFeatures
测试结果
10pt
我注意到的第一件事是,在文档中定义不同的12pt
行高会导致两种不同的行高 - 参见附图。字体(Liberation 和 LiberationSans)的标准12pt
行高约为 5 毫米。使用SizeFeature
强制和Scale
因子,即使字体尺寸较小,行高仍保持不变。任何包含的内容\footnotesize
(环境和额外的\footnotesize
强制)都会使行高约为 4.2 毫米,与文档的标准行高一致10pt
。
因此,使用SizeFeatures
或Scale
选项不是一个选择,因为它会导致不正确(太大)的行距。
对该10pt
文档进行进一步测试表明,这SizeFeatures
根本不影响行高:包括\footnotesize
缩放SizeFeatures
字体的段落的行高为 c. 3 毫米 - 与8pt
脚注一致 - 而字体大小显然符合10pt
要求SizeFeatures
。
结论
正如我之前所说,我不想使用。我想以某种方式告诉 TeX在我的文档中
\fontsize
使用字体大小,并让引擎进行所需的缩放。10pt
12pt
出于同样的原因,我不喜欢使用
SizeFeatures
。这些会使字体大小变小,但不调整行高。使用
Scale
参数也会带来这个问题,但还有一个额外的缺点,那10/12
就是数字是有限的。因此,10pt
我不得不使用某种近似值,而不是输入明确的。这是一个非常糟糕的解决方案。如果我只有内联示例,使用环境可能会有效,但我怀疑它不会达到我的预期用途。然而,考虑到环境定义工作,我很可能会为自己定义一个可以扩展为相同内容的命令。
\footnotesize
最不理想的选择就是在每次出现 时附加\overpicfont
。
问题
在定义新字体系列时,是否存在某种添加谨慎、不可变的字体大小选项的方法,以便 TeX 自动选择合适的行高并相应地调整所有其他大小?类似于:
\newfontfamily\tenpointfont[size=10pt, other options]{MyCrazyFontsName}
笔记
[1]:我也进行了不带该选项的比较运行12pt
,即使用 TeX 的标准字体大小10pt
。
[2]:由于某种原因,当我没有包含语言定义时,出现了错误polyglossia
,因此我将其留在了文档中。不过,我认为它并不重要。
[3]:我读过,Mapping=tex-text
两者Ligatures=TeX
完全相同,但后者确保与 LuaLaTeX 兼容。由于我只使用 XeLaTeX,因此从上一篇论文中复制时我没有更改这一点。
答案1
主要的误解似乎是
正如我之前所说,我不想使用 \fontsize。我想以某种方式告诉 TeX 在我的 12pt 文档中使用 10pt 的字体大小,并让引擎进行所需的缩放。
字体本身(以及fontspec
字体加载命令)不指定基线间距。基线间距需要在文档类中指定(或在序言中调整)。类需要指定行距以及所有其他间距,这就是该\fontsize
命令需要两个参数的原因,由文档设计者来指定每种字体大小的基线。
因此,在 12pt 基线上指定 10pt 使用的字体的自然方法是,\antiquasans\footnotesize
理论上可以降至稍低的水平并避免选择中间字体,就像\fontseries{bx}\fontshape{it}\selectfont
避免做两件事一样\selectfont
,这将通过直接选择粗体斜体而不先选择粗体或斜体来暗示\bfseries\itshape
,然而,与加载 opentype 字体所做的其余工作相比,收益可能是无法衡量的。