매개변수화된 매크로 내에서 펜포스/펜스트로크를 사용하는 방법은 무엇입니까?

매개변수화된 매크로 내에서 펜포스/펜스트로크를 사용하는 방법은 무엇입니까?

베이스를 사용하여 MetaPost(Metafont?)에서 penpos 및 펜스트로크 매크로를 사용하여 모양을 그리기 위해 매개변수화된 매크로를 만들려고 하는데 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하는 매크로입니다 . 나는 이것이 외부에서는 작동하지 않는다고 생각합니다 . 이것이 바로 Metafont가 . draw 명령이 오류 없이 작동하기 때문입니다.fillunfill(radius,angle)penposbeginfigendfigz0l

penpos여기 에서 어떻게 사용할 수 있나요 penstroke? 아니면 수동으로 왼쪽/오른쪽 값을 계산하고 fill/ 를 호출해야 합니까 unfill?

저는 MetaPost/Metafont의 완전 초보자라는 점을 명심하세요. 감사합니다.

답변1

그만큼

save z;
pair z[];

문제가 되는 부분인 것 같습니다. z특별하다. 그것을로 대체

clearxy;

여기서 하는 것 같습니다. 그렇게 하고 파일을 컴파일하면 다음과 같은 결과가 나옵니다.

메타포스트 물건들

관련 정보