如何在参数化宏中使用 penpos/penstroke?

如何在参数化宏中使用 penpos/penstroke?

我正在尝试使用基础版 MetaPost (Metafont?) 创建参数化宏,以使用 penpos 和 penstroke 宏绘制形状,plain.mp但出现错误。运行以下代码,

def curve_st(expr p) = begingroup
    save z;
    pair z[];

    z0 = p;
    z1 = p + (2,-2);
    z2 = z1 + (0, 5);
    z3 = z2 + (3, 0);

    penpos0(tip,  180);
    penpos1(stem, -30);
    penpos2(stem, 0);
    penpos3(tip,  180);

    penstroke z0e{down}.. z1e{up} .. z2e{up} .. z3e;
    %draw z0{down}.. z1{up} .. z2{up} .. z3;

endgroup enddef;
beginfig(1);
    xstep = 3; stem = 1.5; tip = .2;

    curve_st((-3,0)); curve_st((0,0)); 
endfig; end.

出现以下错误:

>> unknown path path_.l
>> z0l
! Equation cannot be performed (unknown path=numeric).
<to be read again>

据我所知,是penstroke一个宏,它只是在根据传递给宏的计算点的“左”和“右”值后调用fill和。我认为这在和之外不起作用。这就是 Metafont 找不到的原因。因为 draw 命令没有任何错误地工作。unfill(radius,angle)penposbeginfigendfigz0l

我该如何在这里使用penposand penstroke?或者,我必须手动计算左/右值并调用fill/吗unfill

请记住,我是 MetaPost/Metafont 的完全初学者。谢谢。

答案1

save z;
pair z[];

似乎是有问题的部分。z很特殊。用

clearxy;

似乎在这里可以做到这一点。执行此操作并编译您的文件后,我得到了此输出。

metapost 东西

相关内容