这是 pfb 文件中的错误还是 metapost 的“字形”中的错误?

这是 pfb 文件中的错误还是 metapost 的“字形”中的错误?

我最近才开始使用 metapost 的“字形”。我发现(下面的 MWE)这些实验中 cm 字体的衬线路径存在异常。

起点:似乎 metapost 从字体的 .pfb 文件中获取字形(例如.../texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb)。

我的问题是以下哪项导致了异常,因此我可以确定是否有必要提交错误报告以及将其发送给谁......

  1. .pfb 文件中有一个错误。由于它是一个路径,几乎它会自行翻倍,这可能不会导致任何像素被填充,所以没有人注意到。
  2. 我搞错了 metapost 获取字形的位置,而错误就出现在那个位置。
  3. metapost 中的字形代码有一个错误。
  4. 其他东西。

我做过的事情:

  1. 检查了使用这些字体的其他程序是否使用相同的 .pfb 文件(是的,AFAICTpdflatexlatex|dvips|pstopdf),并查看了这些 pdf 输出中大大放大的字符 - 没有运气。
  2. 寻找其他工具来从 .pfb 中提取字形 - 找不到任何工具。(如果有这方面的提示就好了)
  3. 检查了笔画cmr.mf(实际上cmbase.mf)——Knuth 的衬线是与字母其余部分分开的笔画,因此没有任何线索。
  4. 从 Knuth 的来源查找了可能用于生成这些 type1 字体(MFTOEPS 等)的各种工具,但我认为这超出了我的专业知识。
  5. 在 texexchange 和更远的地方查看
  6. 检查版本信息 (MetaPost=v1.504, cmr10.pfb=v003.002) 并检查更新日志以获取更新的 metapost

我的 MWE 显示字形的边界超出范围,然后在衬线中折回,并且在 中的“I”字形内有少量额外区域cmr10。由于 中的衬线的几何形状,cmti10仍然有超出范围但没有额外区域。它还出现在 cm 字体集中的一些其他字体(粗体、倾斜)中,以及大写和小写的衬线中。

picture pic[];
path p[];
pair d;

pic0=btex  I\it I etex; % <---- the text to be analysed
_i:=1;
for $ within pic0:
    p[_i]=pathpart glyph (textpart $) of (fontpart $) scaled 1/100 shifted llcorner $ scaled 20;
    _i:=_i+1;
endfor

beginfig(1)
for i = 1 upto 20:
    if known p[i]:
        fill p[i] withcolor (.8,.8,.9);
        for j = 0 upto (length(p[i])-1):
            draw point j of p[i]--postcontrol j of p[i] dashed withdots scaled 1/4;
            draw point j+1 of p[i]--precontrol j+1 of p[i] dashed withdots scaled 1/4;
            fill fullcircle scaled 0.5mm shifted point j of (p[i]);
            d:=direction j of p[i];
            if abs(d)=0: d:=point j+4 of p[i] - point j-4 of p[i]; fi
            a:= if abs(d)=0: 0 else: angle(d) fi;
            draw thelabel.lft(decimal j infont "cmbx5",(0,0))
                rotated (a+90)
                shifted (point j of (p[i] )) withcolor blue;
        endfor
        draw p[i] withpen pencircle scaled 0.1;
    fi
endfor
endfig;

bye

在此处输入图片描述

答案1

pathpart此问题似乎与在 返回的图片上使用 有关glyph。考虑以下程序:

prologues := 3;
outputtemplate := "glyph%c.eps";
beginfig(1);
  picture a;
  a = glyph "I" of "cmti12";
  draw a withcolor .9 white;
  draw pathpart a withcolor red;
endfig;
end.

生成了下面的图片。您可以清楚地看到凹形衬线上的锯齿(红色),但请注意灰色部分没有锯齿。

运算符glyph返回给定字符在给定字体中的图片。如果我只draw画那张图片,那么轮廓看起来是正确的(图像的灰色部分)。但是如果我绘制返回的路径,pathpart那么我们会在盘子上得到额外的锯齿。

这表明字体文件没有问题,而是将pathpart应用于 返回的图片时出现了问题glyph。我已向 MP 开发团队提出了这个问题 -> http://tracker.luatex.org/view.php?id=935

更新:截至 2015 年 5 月 15 日,此错误已修复。

在此处输入图片描述

以下是使用新编译的版本 1.999 的输出mpost

在此处输入图片描述

相关内容