使用 Script-size 和 Script-script-size 字形

使用 Script-size 和 Script-script-size 字形

在回答这个问题,我了解到 OpenType Math 字体(如 Cambria 和 Latin Modern Math)包含 script-size 和 script-script-size 字符,具有不同的光学缩放比例。在我的文档中,我看到 script-script-size 字符(名称为 .sts)用于下标。这令人惊讶——我原本以为会使用 script-size 字符(名称为 .st 的字符)。效果并不明显,因为下标字符的垂直大小与我预期的一样——对于使用 10 pt 作为基本文本大小的文档,大约为 7 pt。

在此处输入图片描述

简而言之,我期望在右侧得到结果,而我得到的却是左侧的结果(无论是显示结果还是内联数学)。这是可以预料到的吗?如果是,那么脚本大小的字形有什么用处?

编辑
这似乎与 Unicode-Math 的使用有关。

% Compile using XeLateX
\documentclass{article}
\usepackage{unicode-math}
\begin{document}
\[
x_2 = 2
\]
\end{document}

删除第三行代码可以得到我期望的结果——使用“two.st”字形。

报告错误github

答案1

啊,非常感谢您发现这一点!发生这种情况的原因有两个。

首先,在加载数学字体时,unicode-math 会查询它以确定它应该为脚本和脚本脚本大小定义的大小。执行此操作后,它需要使用这些新大小重新加载字体,但这并没有发生。(我不知道这在实践中是否真的是一个问题,但它已经修复了。)

其次,更重要的是,TeX 以其数学能力而闻名,在读入适当的值后,它需要对主字体大小进行一些重新缩放。这项工作做得很差,导致值为6.99997pt而不是7pt。由于字体定义为从 切换scriptscriptscript7pt 以下,这触发了上面显示的结果。

我现在使用 expl3 的浮点数学引擎重新实现了这一点;对于那些好奇的人来说,这已经改变了

\cs_set:Nn \@@_fontdimen_to_percent:nn
 { \strip@pt\dimexpr\fontdimen#1#2*65536/100\relax }
\cs_set:Nn \@@_fontdimen_to_scale:nn
 { \@@_fontdimen_to_percent:nn {#1} {#2} \dimexpr \f@size pt\relax }

\cs_new:Nn \@@_fontdimen_to_percent:nn
 { \fp_eval:n { \strip@pt\fontdimen#1#2 * 65536 / 100 } }
\cs_new:Nn \@@_fontdimen_to_scale:nn
 { \fp_eval:n {\@@_fontdimen_to_percent:nn {#1} {#2} * \f@size } pt }

现在!我希望这不会成为问题:这种新方法会产生一个大小7.01236pt(拉丁现代数学,TL2015)。我本来预计会的7pt,所以我希望这里没有其他东西可能会让我们以后绊倒。

解决这个问题的另一种方法是避免在边界处定义字体变化,而是在中间定义。例如,如果字体规定 10pt 字体的 SS 大小为 5pt,S 大小为 7pt,那么将字体定义为以下内容会更有意义:

6pt and below : script script size font
6pt - 8.5pt   : script size font
8.5pt and up  : regular size font

如果您提出的问题将来以类似的形式再次出现,我可能会研究这个解决方案。

相关内容