MetaFont:新增字形時,未更改字形的字元尺寸會改變嗎?

MetaFont:新增字形時,未更改字形的字元尺寸會改變嗎?

yhmath我在調試數學字體專案時出現了非常奇怪的效果。我cmex10.tfm從生成cmex10.mf,並將 tfm 轉換為 pl 檔案。

然後我重命名僅有的將驅動程式檔案重新命名為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,並進行比較,我看到了變化無關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)
    )
...

這是非常令人驚訝的,我以為其他未更改的 gph 的字形尺寸不會改變。此外,我添加的額外字形越多,這種變化就越大。

有人對此有解釋嗎?

答案1

據 MetaFont 稱,該計劃:

由於許多字元具有相同的高度、深度或斜體校正是很常見的,因此 TFM 格式施加了 16 種不同高度、16 種不同深度和 64 種不同斜體校正的限制。

順便說一句,關係寬度[0]=高度[0]=深度[0]=斜體[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

0因此,您的字體已經包含最大數量的不同深度,這解釋了這些變化: was的深度1.160013,但該值不屬於上面列表的一部分。所以必須添加它,但是這樣就會有太多不同的深度。因此,當 MetaFont 讀取附加字元時,它意識到它無法儲存 TFM 檔案中的所有深度。因此,某些值必須四捨五入,並且1.1355671.160013非常接近,使它們成為理想的候選值。

這也解釋了為什麼添加的附加字形越多,變化就越大:如果新的字形再次具有不同的深度,則MetaFont 必須將更多不同的深度減少到15。 ,從而導致更大的變化。

相關內容