MetaFont:添加新字形时,不变的字形的字符尺寸会发生变化吗?

MetaFont:添加新字形时,不变的字形的字符尺寸会发生变化吗?

我在调试数学字体项目时遇到了非常奇怪的效果。我从中yhmath生成,并将 tfm 转换为 pl 文件。cmex10.tfmcmex10.mf

然后我重命名仅有的将驱动程序文件重命名为yrcmex10.mf,然后添加下列新的中的字形定义bigdel.mf,而不改变其余文件中的任何内容:

cmchar "\big left parenthesis";
beginchar(oct"200",8u#,rule_thickness#,2.5dh#-rule_thickness#);
adjust_fit(1.75u#,-.25u#); left_paren(hair,stem); endchar;

cmchar "\big left parenthesis";
beginchar(oct"201",10u#,rule_thickness#,3.5dh#-rule_thickness#);
adjust_fit(2.25u#,-.25u#); left_paren(hair,stem); endchar;


cmchar "\big left parenthesis";
beginchar(oct"202",12u#,rule_thickness#,4.5dh#-rule_thickness#);
adjust_fit(2.75u#,-.25u#); left_paren(hair,stem); endchar;

cmchar "\big left parenthesis";
beginchar(oct"203",13u#,rule_thickness#,5dh#-rule_thickness#);
adjust_fit(3u#,-.25u#); left_paren(hair,stem); endchar;


cmchar "\big left parenthesis";
beginchar(oct"204",15u#,rule_thickness#,6dh#-rule_thickness#);
adjust_fit(3.5u#,-.25u#); left_paren(hair,stem); endchar;

cmchar "\big left parenthesis";
beginchar(oct"205",17u#,rule_thickness#,7dh#-rule_thickness#);
adjust_fit(4u#,-.25u#); left_paren(hair,stem); endchar;

cmchar "\big left parenthesis";
beginchar(oct"206",19u#,rule_thickness#,8dh#-rule_thickness#);
adjust_fit(4.5u#,-.25u#); left_paren(hair,stem); endchar;

cmex10所以字体和字体之间唯一的区别yrcmex10就是增加了上述字符。

将 tfm 转换为 pl,然后进行 diff ,我看到了变化无关glpyphs,特别是DP参数变化:

--- cmex10.pl   2019-03-07 09:30:01.263513678 +0900
+++ yrcmex10.pl 2019-03-07 09:52:25.578670436 +0900
@@ -1,7 +1,7 @@
 (DESIGNSIZE R 10.0)
 (COMMENT DESIGNSIZE IS IN POINTS)
 (COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
-(CHECKSUM O 37254272422)
+(CHECKSUM O 35311171576)
 (FONTDIMEN
    (SLANT R 0.0)
    (SPACE R 0.0)
@@ -20,85 +20,85 @@
 (CHARACTER O 0
    (CHARWD R 0.458336)
    (CHARHT R 0.039999)
-   (CHARDP R 1.160013)
+   (CHARDP R 1.135567)
    (NEXTLARGER O 20)
    )
 (CHARACTER O 1
    (CHARWD R 0.458336)
    (CHARHT R 0.039999)
-   (CHARDP R 1.160013)
+   (CHARDP R 1.135567)
    (NEXTLARGER O 21)
    )
...

这非常令人惊讶,我本来以为其他未更改的字形的字形尺寸不会改变。此外,我添加的字形越多,这种变化就越大。

有人可以对此作出解释吗?

答案1

根据 MetaFont 的说法,该程序:

由于许多字符具有相同的高度、深度或斜体校正是很常见的,因此 TFM 格式规定了 16 种不同的高度、16 种不同的深度和 64 种不同的斜体校正的限制。

顺便说一句,关系 width[0]=height[0]=depth[0]= italic[0]=0 应该始终成立,因此索引零意味着值零。

因此,单个 TFM 文件中除了 0 之外最多可以有 15 个不同的深度值。现在让我们看看 yrcmex10.pl 中的深度值:

     1     (CHARDP R 0.300003)
     2     (CHARDP R 0.580007)
     3     (CHARDP R 0.900009)
     4     (CHARDP R 1.000013)
     5     (CHARDP R 1.135567)
     6     (CHARDP R 1.480014)
     7     (CHARDP R 1.780019)
     8     (CHARDP R 2.060022)
     9     (CHARDP R 2.222246)
    10     (CHARDP R 2.360025)
    11     (CHARDP R 2.660028)
    12     (CHARDP R 2.9600315)
    13     (CHARDP R 3.560038)
    14     (CHARDP R 4.160044)
    15     (CHARDP R 4.76005)

(使用 生成列表grep 'CHARDP' yrcmex10.pl|sort|uniq|nl

因此,您的字体已经包含最大数量的不同深度,这解释了这些变化:的深度01.160013,但该值不属于上述列表。因此必须添加它,但这样就会有太多不同的深度。因此,当 MetaFont 读取附加字符时,它意识到无法将所有深度存储在 TFM 文件中。因此,必须对某些值进行四舍五入,并且1.1355671.160013非常接近,使它们成为理想的候选者。

这也解释了为什么添加的字形越多,变化就越大:如果新字形再次具有不同的深度,则 MetaFont 必须将更多不同的深度减少到 15。这需要更积极地进行“价值统一”,从而导致更大的变化。

相关内容