使用 \fontspec{ 时,普通数字会以上标显示}

使用 \fontspec{ 时,普通数字会以上标显示}

这个 MWE 在我的 Windows 机器上生成上标数字。

\documentclass{article}
\usepackage{fontspec}
\begin{document}
\noindent
\fontspec{Times New Roman}[Fractions=On]
Should not be superscript: 0123456789, normal period:.\\
\fontspec{Adobe Garamond Pro}[Fractions=On]
Punctuation is superscripted, as well as 123 numbers! E.\,g.~the period.\ldots
\end{document}

其结果如下:

在此处输入图片描述

如您所见,所有数字都是上标。使用 Adob​​e Garamond Pro 时,我的标点符号也会凸起。是什么导致了这个问题?

答案1

当您打开该frac功能时,您是在告诉fontspec它您想要创建一个分数。它会做出有用的反应:它会使用分子字形(如果字体中存在),直到您输入斜线,它会将斜线替换为U+2044(分数斜线),并继续使用分母字形,直到您关闭该frac功能。除非您告诉它,否则它无法知道您是否打算输入分数(例如,428/427 是分数吗,还是柏拉图出生的年份,这表明古代和现代日历无法轻易对齐?)。因此,您不应将该功能作为文档中所有字体或文档主字体的默认功能打开;相反,只在需要分数的地方添加它。

如果您确实全局启用了该功能,则结果将是无害的,或者或多或少明显是错误的,具体取决于字体。 这与字体文件是否以.ttf或结尾无关.otf:有 TrueType“风格”和 PostScript“风格”的 OpenType 字体(前者使用二次贝塞尔曲线,后者使用三次贝塞尔曲线)。 您的 Times New Roman 版本是 OpenType,否则它会忽略您对 OpenType 功能的调用。 那么为什么结果会有所不同,比如您的 Times New Roman 和 Adob​​e Garamond Pro 之间? 这是因为该frac功能并非在所有字体中都可用,而在具有该功能的字体中,有些字体的版本比其他字体更丰富:

  1. 有些仅提供一些预组合字形(例如,键入{\addfontfeature{Fractions=On}1/2}会产生代码点为 的字符U+00BD)。
  2. 其他人允许用任何数字制作分数(例如,256/243,字体不太可能为其提供预制字形,因为这个分数虽然对毕达哥拉斯学派来说很重要,但在 UTF-8 中没有代码点)。
  3. 还有一些允许在分数中包含一些标点和符号(例如,$126,963.54/$1,750.18)。

如果字体不具备此frac功能,则启用此功能将在日志中产生警告,并且编译后的文档将不会有吸引人的分数,但也不会有偏离基线的杂散字形。如果您frac使用第一种字体全局启用此功能,那么近似日期(例如 231/232)可能会显示为 23½32。如果您使用第二种或第三种字体全局启用此功能,结果将与问题中所示的一样显眼。

那么,为什么一个frac功能是可取的呢?我不是数学家,所以我不会评论数学家是否以及如何受益,但让我们将使用xfracOpenType 功能的文本与相同的文本进行比较。(xfrac确实为高级用户提供了一个界面,但它比使用 OpenType 的工作量更大,所以让我们将它留给非 OpenType 字体,只尝试提供的基本宏xfrac。)

\documentclass[12pt,a5paper]{book}
\usepackage{fontspec,microtype,xfrac}
\setmainfont{EB Garamond}[
  Contextuals=Alternate,
  ItalicFeatures={Ligatures=Contextual}]
\linespread{1.10344}
\AtBeginDocument{\setlength{\parindent}{1em}}
\setcounter{secnumdepth}{0}
\usepackage[it,md,small]{titlesec}
% shortcut; name the macro as you like, if the name isn’t already defined:
\def\frc#1{{\addfontfeature{Fractions=On}#1}}
\begin{document}
\section{xfrac}
In Plato’s \textit{Timaeus,} the demiurge gives the world-soul a
structure based on two geometrical proportions, their arithmetic
means, and their harmonic means: 1, \sfrac{4}{3}, \sfrac{3}{2}, 2,
\sfrac{8}{3}, 3, 4, \sfrac{9}{2}, \sfrac{16}{3}, 6, 8, 9,
\sfrac{27}{3}, 18, and 27. Why do you suppose he did that?

\section{font feature}
In Plato’s \textit{Timaeus,} the demiurge gives the world-soul a
structure based on two geometrical proportions, their arithmetic
means, and their harmonic means: 1, \frc{4/3}, \frc{3/2}, 2,
\frc{8/3}, 3, 4, \frc{9/2}, \frc{16/3}, 6, 8, 9, \frc{27/3}, 18, and
27. Why do you suppose he did that?
\end{document}

上述代码的输出

注意差异:带有 的分子和分母xfrac比实际分子和分母小:更适合示例文本的第三行。带有 的分数xfrac看起来太小,不适合后面的逗号,而 OpenType 分数的粗细和大小适合逗号和周围的文本。此外,带有 的xfrac分子 4 和 3 尤其靠近斜线。总体而言,OpenType 分数更清晰,眼睛疲劳时更容易看清。

xfrac即使没有其高级界面,我们也可以通过打开衬线数字(这不是 EB Garamond 的默认设置)来提高一点性能:

\documentclass[12pt,a5paper]{book}
\usepackage{fontspec,microtype,xfrac}
\setmainfont{EB Garamond}[
  Contextuals=Alternate,
  ItalicFeatures={Ligatures=Contextual}]
\linespread{1.10344}
\AtBeginDocument{\setlength{\parindent}{1em}}
\setcounter{secnumdepth}{0}
\usepackage[it,md,small]{titlesec}
\def\frc#1{{\addfontfeature{Fractions=On}#1}}
\begin{document}
\section{xfrac with lining figures}
{\addfontfeatures{Numbers=Lining}
In Plato’s \textit{Timaeus,} the demiurge gives the world-soul a
structure based on two geometrical proportions, their arithmetic
means, and their harmonic means: 1, \sfrac{4}{3}, \sfrac{3}{2}, 2,
\sfrac{8}{3}, 3, 4, \sfrac{9}{2}, \sfrac{16}{3}, 6, 8, 9,
\sfrac{27}{3}, 18, and 27. Why do you suppose he did that?}

\section{font feature}
In Plato’s \textit{Timaeus,} the demiurge gives the world-soul a
structure based on two geometrical proportions, their arithmetic
means, and their harmonic means: 1, \frc{4/3}, \frc{3/2}, 2,
\frc{8/3}, 3, 4, \frc{9/2}, \frc{16/3}, 6, 8, 9, \frc{27/3}, 18, and
27. Why do you suppose he did that?
\end{document}

第二个样本的输出

现在分子 3 不会碰到斜线,但分子 4 比以前更糟糕了。分数不再悬在基线以下那么远,但它们仍然以逗号中间结束,而不是像 OpenType 分数那样在基线上。而且与 OpenType 分数相比,它们看起来仍然很拥挤。

故事寓意:OpenType 字体功能强大,让我们能够相对轻松地实现排版改进,如果没有它们,这些改进至少会很困难。但是,如果不小心处理,这种功能可能会造成混乱,如果没有它们,这些改进很难“实现”。因此,虽然始终需要检查您使用的字体,但对于 OpenType 字体,您需要花费更多时间研究其功能,尤其是在 Garamond Pro 等大型复杂字体系列的情况下。

顺便说一句,不仅用户需要格外注意,OpenType 字体的制作者也需要格外注意。我最近获得了一个字体,其功能文件包含规则sub \three \slash \four by \onehalf;。这种错误很容易理解,因为制作功能文件很繁琐,因此您会从以前的工作中复制粘贴,也许会忘记进行所有必要的更改。我指出错误后,铸造厂立即制作了一个更正版本,但如果我在排版食谱时不注意,结果可能是晚餐被搞砸了。热金属有不便之处,但这种特殊的错误在 Monotype 机器上很难想象。

答案2

Fractions功能可对所有文本启用分数样式数字,直到选择不同的功能或字体。所展示的行为不是错误,而是实际功能。

此外,各种字体的表现也不同(可能是因为 Times New Roman 是 TrueType,而我的系统上是 Adob​​e Garamond Pro OpenType?)。解决方案是创建一个宏,例如\newcommand*{\fraction}[1]{{\addfontfeature{Fractions=On}#1}}用于分数,然后让您的 OpenType 字体发挥其魔力。根据问题下评论中的 Thérèse 的说法,这比软件包产生的分数更好xfrac

相关内容