TeXLive 2013 中 mf2pt1 生成的 TFM 错误

TeXLive 2013 中 mf2pt1 生成的 TFM 错误

我需要从 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.mf2012 年 TeXLive2013 年 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的输出进行处理,表明新生成的文件丢失了tftoplcmr10.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)

然而,主要问题似乎已经解决。

相关内容