我最近才开始玩使用 metapost 的“字形”。我发现(下面的 MWE)这些实验中 cm 字体的衬线路径存在异常。
起点:似乎 metapost 从字体的 .pfb 文件中获取字形(例如.../texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb
)。
我的问题是以下哪项导致了异常,因此我可以确定是否有必要提交错误报告以及将其发送给谁......
- .pfb 文件中有一个错误。由于它是一个路径,几乎它会自行翻倍,这可能不会导致任何像素被填充,所以没有人注意到。
- 我搞错了 metapost 获取字形的位置,而错误就出现在那个位置。
- metapost 中的字形代码有一个错误。
- 其他东西。
我做过的事情:
- 检查了使用这些字体的其他程序是否使用相同的 .pfb 文件(是的,AFAICT
pdflatex
和latex|dvips|pstopdf
),并查看了这些 pdf 输出中大大放大的字符 - 没有运气。 - 寻找其他工具来从 .pfb 中提取字形 - 找不到任何工具。(如果有这方面的提示就好了)
- 检查了笔画
cmr.mf
(实际上cmbase.mf
)——Knuth 的衬线是与字母其余部分分开的笔画,因此没有任何线索。 - 从 Knuth 的来源查找了可能用于生成这些 type1 字体(MFTOEPS 等)的各种工具,但我认为这超出了我的专业知识。
- 在 texexchange 和更远的地方查看
- 检查版本信息 (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
: