可以在 texlive 中的 fonts/source/public/amsfonts/symbols 下找到的字体 msbm 具有奇怪的 chardx 宽度值设置。如果我运行,mf "\mode=localfont; input msbm10"
我会得到文件 msbm10.600gf。如果我再运行,gftype msbm10.600gf
我会得到字体数据的符号转储。
This is GFtype, Version 3.1 (TeX Live 2017/Debian) Options selected: Mnemonic output = false; pixel output = false. ' METAFONT output
2020.07.01:2334'
35: beginning of char 0
224: beginning of char 1
在文件的下方我们有每个字符的宽度信息。
Postamble starts at byte 30141.
design size = 10485760 (10pt)
check sum = -2001332536
hppp = 544093 (8.3022)
vppp = 544093 (8.3022)
min m = -5, max m = 194
min n = -39, max n = 75
Character 0: dx 4259840 (65), width 815562 (64.57289), loc 35
Character 1: dx 4259840 (65), width 815562 (64.57289), loc 224
Character 2: dx 4259840 (65), width 815562 (64.57289), loc 413
dx 就是 metafont 所称的 chardx,首先是缩放值,然后括号中是像素值。Metafont Book 对此的描述如下:
“chardx”和“chardy”表示以像素为单位的水平和垂直位移。(有些排版系统在排版完每个字符后,会同时使用这两个与设备相关的量来更改其在页面上的当前位置。其他系统(如与 TeX 相关的 dvi 软件)假设“chardy”=0,但只要“chardx”的水平移动不会导致后续位置偏离由累积的“charwd”值定义的与设备无关的位置太远,就会使用“chardx”作为水平位移。
接下来是字符的宽度,Metafont 将其称为 charwd,其单位是设计尺寸乘以 2^20。后面的括号中是转换为像素的值。通常,chardx 像素值应与 charwd 像素值相同,但四舍五入为整数,但字体设计者可以调整 chardx 值以更好地适应低分辨率设备,但是您希望它们之间的偏差不超过一个像素。在 msbm 中的黑板字母中,它们的偏差很大,如下所示。黑板字母 A 是字符 65,Z 是字符 90,小写字母 k 是字符 124。
Character 61: dx 5439488 (83), width 1048579 (83.02225), loc 13792
Character 62: dx 4259840 (65), width 815562 (64.57289), loc 14616
Character 63: dx 4259840 (65), width 815562 (64.57289), loc 14815
Character 64: dx 3014656 (46), width 582544 (46.12347), loc 15066
Character 65: dx 2424832 (37), width 757307 (59.96051), loc 20334
Character 66: dx 2490368 (38), width 699053 (55.34819), loc 20637
Character 67: dx 2555904 (39), width 757307 (59.96051), loc 21048
Character 68: dx 2621440 (40), width 757307 (59.96051), loc 21349
Character 69: dx 2686976 (41), width 699053 (55.34819), loc 21770
Character 70: dx 2752512 (42), width 640798 (50.7358), loc 22133
Character 71: dx 2818048 (43), width 815562 (64.57289), loc 22456
Character 72: dx 2883584 (44), width 815562 (64.57289), loc 22823
Character 73: dx 2949120 (45), width 407781 (32.28645), loc 23254
Character 74: dx 3014656 (46), width 524290 (41.51115), loc 23477
Character 75: dx 3080192 (47), width 815562 (64.57289), loc 23762
Character 76: dx 3145728 (48), width 699053 (55.34819), loc 24161
Character 77: dx 3211264 (49), width 990325 (78.40993), loc 24430
Character 78: dx 3276800 (50), width 757307 (59.96051), loc 25021
Character 79: dx 3342336 (51), width 815562 (64.57289), loc 25408
Character 80: dx 3407872 (52), width 640798 (50.7358), loc 25843
Character 81: dx 3473408 (53), width 815562 (64.57289), loc 26154
Character 82: dx 3538944 (54), width 757307 (59.96051), loc 26641
Character 83: dx 3604480 (55), width 582544 (46.12347), loc 27060
Character 84: dx 3670016 (56), width 699053 (55.34819), loc 27377
Character 85: dx 3735552 (57), width 757307 (59.96051), loc 27676
Character 86: dx 3801088 (58), width 757307 (59.96051), loc 28021
Character 87: dx 3866624 (59), width 1048579 (83.02225), loc 28336
Character 88: dx 3932160 (60), width 757307 (59.96051), loc 28901
Character 89: dx 3997696 (61), width 757307 (59.96051), loc 29218
Character 90: dx 4063232 (62), width 699053 (55.34819), loc 29503
Character 91: dx 10289152 (157), width 1980650 (156.81985), loc 15333
Character 123: dx 3604480 (55), width 699053 (55.34819), loc 19590
Character 124: dx 4128768 (63), width 582544 (46.12347), loc 29810
Character 125: dx 2949120 (45), width 566525 (44.85516), loc 19769
Character 126: dx 2949120 (45), width 566525 (44.85516), loc 20014
Character 127: dx 2359296 (36), width 450016 (35.63045), loc 20245
The file had 123 characters altogether.
这些字母的 chardx 值不仅与 charwd 值不匹配,而且它们遵循递增序列,似乎与字符的实际宽度没有太大关系。此外,如果我在校样模式下通过运行mf "\mode=proof; input msbm10"
然后gftodvi msbm10.2602gf
打开 msbm10.dvi 来生成字体,字体中的黑板字母会显示奇怪的网格,而其他字符则不会。