パラメーター化されたマクロ内で penpos/penstroke を使用するにはどうすればよいでしょうか?

パラメーター化されたマクロ内で penpos/penstroke を使用するにはどうすればよいでしょうか?

MetaPost (Metafont?) の penpos および penstroke マクロを使用して図形を描画するパラメーター化されたマクロをplain.mpbase で作成しようとしていますが、エラーが発生します。以下のコードを実行すると、

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を呼び出すだけのマクロです。 これはとの外では機能しないと思います。 そのため、Metafont は を見つけることができません。 描画コマンドはエラーなしで機能するからです。fillunfill(radius,angle)penposbeginfigendfigz0l

penposここでand をどのように使用すればよいですか? または、左/右の値を手動で計算して/penstrokeを呼び出す必要がありますか?fillunfill

私は MetaPost/Metafont の完全な初心者であることをご承知おきください。ありがとうございます。

答え1

save z;
pair z[];

問題の部分のようです。zは特別です。それを

clearxy;

ここでそれができるようです。それを実行してファイルをコンパイルすると、この出力が得られます。

メタポスト関連

関連情報