¿Cómo utilizar los penpos/penstroke dentro de una macro parametrizada?

¿Cómo utilizar los penpos/penstroke dentro de una macro parametrizada?

Estoy intentando crear una macro parametrizada para dibujar una forma con macros de lápiz y trazo en MetaPost (¿Metafont?) con plain.mpbase, pero aparece un error. Ejecutando el siguiente código,

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.

da el siguiente error:

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

Según tengo entendido, es penstrokeuna macro que simplemente llama filly unfilldespués de calcular los valores "izquierdo" y "derecho" de los puntos en función de lo (radius,angle)pasado a la penposmacro. Supongo que esto no funciona afuera beginfigy endfig. Y es por eso que Metafont no puede encontrarlo z0l. Porque el comando de dibujo funciona sin ningún error.

¿Cómo puedo usar penposy penstrokeaquí? ¿O tengo que calcular manualmente los valores izquierdo/derecho y llamar a fill/ unfill?

Tenga en cuenta que soy un completo principiante en MetaPost/Metafont. Gracias.

Respuesta1

El

save z;
pair z[];

Parece ser la parte problemática. zes especial. Reemplazándolo con

clearxy;

Parece hacerlo aquí. Al hacer eso y compilar su archivo, obtengo este resultado.

cositas metapost

información relacionada