我需要从 METAFONT 文件生成字体。我使用了mf2pt1并生成了PFB文件和TFM文件,但是TFM文件不正确。
我尝试生成 TMF 文件cmr10.mf由 mf2pt1 发布,然后查看cmr10.tmf经过特托普尔。
(DESIGNSIZE R 10.0)
(COMMENT DESIGNSIZE IS IN POINTS)
(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
(CHECKSUM O 16761661120)
(FONTDIMEN
(SLANT R 0.0)
(SPACE R 0.020833)
(STRETCH R 0.010417)
(SHRINK R 0.006945)
(XHEIGHT R 0.02691)
(QUAD R 0.0625)
(EXTRASPACE R 0.006945)
)
(LIGTABLE
(LABEL O 40)
(KRN C l R -0.017362)
(KRN C L R -0.019965)
(STOP)
(LABEL C f)
(LIG C i O 14)
(LIG C f O 13)
(LIG C l O 15)
(KRN O 47 R 0.004861)
(KRN O 77 R 0.004861)
(KRN O 41 R 0.004861)
(KRN O 51 R 0.004861)
(KRN O 135 R 0.004861)
(STOP)
但看着cmr10.tfm由 TeXLive 2013 分发,
(FAMILY CMR)
(FACE O 352)
(CODINGSCHEME TEX TEXT)
(DESIGNSIZE R 10.0)
(COMMENT DESIGNSIZE IS IN POINTS)
(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
(CHECKSUM O 11374260171)
(FONTDIMEN
(SLANT R 0.0)
(SPACE R 0.333334)
(STRETCH R 0.166667)
(SHRINK R 0.111112)
(XHEIGHT R 0.430555)
(QUAD R 1.000003)
(EXTRASPACE R 0.111112)
)
(LIGTABLE
(LABEL O 40)
(KRN C l R -0.277779)
(KRN C L R -0.319446)
(STOP)
(LABEL C f)
(LIG C i O 14)
(LIG C f O 13)
(LIG C l O 15)
(KRN O 47 R 0.077779)
(KRN O 77 R 0.077779)
(KRN O 41 R 0.077779)
(KRN O 51 R 0.077779)
(KRN O 135 R 0.077779)
(STOP)
这样,两个文件中的字距调整信息就不同。
此外,我尝试在2012 年 TeXLive 并看着这个。
(DESIGNSIZE R 10.0)
(COMMENT DESIGNSIZE IS IN POINTS)
(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
(CHECKSUM O 11374260171)
(FONTDIMEN
(SLANT R 0.0)
(SPACE R 0.333334)
(STRETCH R 0.166667)
(SHRINK R 0.111112)
(XHEIGHT R 0.430555)
(QUAD R 1.000003)
(EXTRASPACE R 0.111112)
)
(LIGTABLE
(LABEL O 40)
(KRN C l R -0.277779)
(KRN C L R -0.319446)
(STOP)
(LABEL C f)
(LIG C i O 14)
(LIG C f O 13)
(LIG C l O 15)
(KRN O 47 R 0.077779)
(KRN O 77 R 0.077779)
(KRN O 41 R 0.077779)
(KRN O 51 R 0.077779)
(KRN O 135 R 0.077779)
(STOP)
该TFM文件与TeXLive 2013分发的文件几乎相同。
mf2pt1 使用 MetaPost(mpost) 来生成 TFM 文件,而 MetaPost 在 TeXLive 2013 中从 1.504 版本更新到了 1.803 版本。所以我认为这个问题是 MetaPost 1.803 中的一些 bug 导致的。
谢谢。
附注(7/6)
我读了 Perl 源代码,mf2pt1.pl
检查了执行来生成 TFM 文件的命令mpost
。在 的第 429-430 行mf2pt1.pl
,
execute_command 1, ("mpost", "-mem=mf2pt1", "-progname=mpost",
"\\mode:=localfont; mag:=$mag; bpppix $bpppix; nonstopmode; input $mffile");
并生成以下命令(在本例中用cmr10.mf)
$ mpost -mem=mf2pt1 -progname=mpost '\mode:=localfont; mag:=100.375; bpppix 0.02; nonstopmode; input cmr10.mf'
我使用mpost 1.803
和运行此命令mpost 1.504
,生成各个 TFM 文件,并比较这些文件。然后,生成的 TMF 文件的字距调整信息mpost 1.803
不正确。
所以我认为这个问题发生的原因有以下几点
- MetaPost (
mpost
) 1.803中的错误 - 错误
mf2pt1.mp
(称为mf2pt1
)
我想解决这个问题,但我没有足够的知识来解决这个问题......
附笔。(7/8)
我读了mf2pt1.mp
,然后明白了,这mfplain.mp
被称为mf2pt1.mp
。根据MetaPost 手册,
尽管 MetaPost 具有生成字体的原语,但 Plain METAFONT 的许多字体制作原语和内部变量并未在 Plain MetaPost 中定义。相反,有一个名为 mfplain 的单独宏包,它定义了允许 MetaPost 处理 Knuth 的 Computer Modern 字体所需的宏
所以我主持mfpain.mf
了2012 年 TeXLive在2013 年 TeXLive.但他们是平等的。
因此,我认为生成错误TFM文件的原因是MetaPost 原语用于生成 TFM 文件。我读过更改日志MetaPost,但我似乎无法改变生成 TFM 文件的原语。
答案1
我试过
mf2pt1 cmr10
今天 (2014-05-3) 的 TeX Live 2014 开发版更新可用。执行此操作tftopl cmr10
会显示以下文件:
(DESIGNSIZE R 10.0)
(COMMENT DESIGNSIZE IS IN POINTS)
(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
(CHECKSUM O 11374260171)
(FONTDIMEN
(SLANT R 0.0)
(SPACE R 0.333334)
(STRETCH R 0.166667)
(SHRINK R 0.111112)
(XHEIGHT R 0.430555)
(QUAD R 1.000003)
(EXTRASPACE R 0.111112)
)
并对标准文件diff
的输出进行处理,表明新生成的文件丢失了tftopl
cmr10.tfm
(FAMILY CMR)
(FACE O 352)
(CODINGSCHEME TEX TEXT)
对于某些字符,高度计算不准确:对于字符
O 44 $
O 45 %
O 50 (
O 51 )
O 52 *
O 57 /
O 133 [
O 135 ]
原始度量中的高度为 0.75,但在 生成的度量文件中并未指定mf2pt1
。
日志文件有很多警告Replacing filldraw with fill.
。运行过程中还会出现一些内部错误fontforge
,例如
Internal Error (overlap) in A: couldn't find a needed exit from an intersection
Internal Error (overlap) in A: couldn't find a needed exit from an intersection
Internal Error (overlap) in G: monotonic is both needed and unneeded (451,274)->(621,271). x=587.505 (prev=585.5)
然而,主要问题似乎已经解决。