1

我正在尝试通过MetaPost绘制一个简单的图形,它与TexLive2013.iso一起提供。下面列出的代码应该创建一个带有一些标签的椭圆

beginfig(1);
a=.7in; b=.5in;
z0=(0,0);
z1=-z3=(a,0);
z2=-z4=(0,b);
draw z1..z2..z3..z4..cycle;
draw z1--z0--z2;
label.top("a", .5[z0,z1]);
label.lft("b", .5[z0,z2]);
dotlabel.bot("(0,0)", z0);
endfig;
end;

但是,当我用okular打开输出文件5.1时,它是空白的。我用kate再次打开了输出文件,下面列出的是代码:

%!PS
%%BoundingBox: -51 -37 51 37 
%%HiResBoundingBox: -50.64978 -36.25 50.64978 36.25 
%%Creator: MetaPost 1.802
%%CreationDate: 2013.09.08:1009
%%Pages: 1
%*Font: cmr10 9.96265 9.96265 61:8
%%BeginProlog
%%EndProlog
%%Page: 1 1
0 0 0 setrgbcolor 0 0.5 dtransform truncate idtransform setlinewidth pop
[] 0 setdash 1 setlinejoin 10 setmiterlimit
newpath 50.39978 0 moveto
50.39978 23.04858 25.56044 36 0 36 curveto
-25.56044 36 -50.39978 23.04858 -50.39978 0 curveto
-50.39978 -23.04858 -25.56044 -36 0 -36 curveto
25.56044 -36 50.39978 -23.04858 50.39978 0 curveto closepath stroke
1 setlinecap
newpath 50.39978 0 moveto
0 0 lineto
0 36 lineto stroke
22.70921 3 moveto
(a) cmr10 9.96265 fshow
showpage
%%EOF

如果我评论

label.top("a", .5[z0,z1]);
label.lft("b", .5[z0,z2]);
dotlabel.bot("(0,0)", z0);

然后可以看到一个没有标签的椭圆。对于上面的所有代码, MetaPost都没有给出任何警告或错误信息。所以问题是:

  1. 为什么我的MetaPost在使用label时输出了一个空图形?
  2. 如何解决
4

1 回答 1

2

引用 MetaPost 手册,第 3 章(MetaPost 工作流程):

如果您的图形包含文本标签,您可能需要将变量序言设置为 3,以确保在所有可能的情况下都使用正确的字体。

因此,我在代码的第一行添加了以下内容:

prologues := 3;

它在这里的本质是将字体嵌入到输出中,结果会增长到大约 20 KB。

之后,我可以在 GSview 中看到带有标签的图片。没有它,它会抱怨Error: /undefined in cmr10. 也许 okular 也很难找到字体。

于 2014-03-28T09:01:41.077 回答