![MetaFont:新增字形時,未更改字形的字元尺寸會改變嗎?](https://rvso.com/image/391710/MetaFont%EF%BC%9A%E6%96%B0%E5%A2%9E%E5%AD%97%E5%BD%A2%E6%99%82%EF%BC%8C%E6%9C%AA%E6%9B%B4%E6%94%B9%E5%AD%97%E5%BD%A2%E7%9A%84%E5%AD%97%E5%85%83%E5%B0%BA%E5%AF%B8%E6%9C%83%E6%94%B9%E8%AE%8A%E5%97%8E%EF%BC%9F.png)
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.135567
和1.160013
非常接近,使它們成為理想的候選值。
這也解釋了為什麼添加的附加字形越多,變化就越大:如果新的字形再次具有不同的深度,則MetaFont 必須將更多不同的深度減少到15。 ,從而導致更大的變化。