[NTG-context] metapost code fails to work in mkiv

Mojca Miklavec mojca.miklavec.lists at gmail.com
Wed Dec 3 16:38:01 CET 2008


On Wed, Dec 3, 2008 at 4:25 PM, Hans Hagen <pragma at wxs.nl> wrote:
> Mojca Miklavec wrote:
>> Hello,
>>
>> A while back I wrote this dirty code (read as: hack) in attachment
>> that allows multiple optional parameters in metapost functions, for
>> example:
>>
>> draw_text("text");
>> draw_text(angle(30),"text");
>> draw_text(angle(30),align(right),"text");
>> draw_text(align(center),"text");
>>
>> The code compiles fine with mkii, but not with mkiv. I would be
>> grateful for any hints about how to fix this.
>>
>> I get the error:
>>
>> mplib | mp terminal: ! Missing `,' has been inserted.
>> <to be read again>
>>                    ,
>> textext->...etextext(SUFFIX2)(rawtextext((EXPR3)),
>>                                                   origin)else:thetextext(SUF...
>>
>> dummy->begingroup(TEXT2)
>>                         endgroup
>> gp_put_text->...tt)=tt.enddef;pict:=dummy((TEXT1))
>>                                                   ;let,=@;endgroup;draw(gp_t...
>> <*> ...m, 1cm), angle(30), textext.drt("rotated"))
>>                                                   ; ;
>> ! An expression can't begin with `;'.
>> <inserted text>
>>                 0
>> <to be read again>
>>                    ,
>> textext->...etextext(SUFFIX2)(rawtextext((EXPR3)),
>>                                                   origin)else:thetextext(SUF...
>>
>> Thanks a lot,
>>     Mojca
>>
>> (The code is taken out of
>> http://dl.contextgarden.net/modules/t-gnuplot/metapost/context/third/gnuplot/mp-gnuplot.mp
>> and I'm slowly plucking up my courage to port the code to mkiv.)
>
> \startMPcode
>     def fuzzy(expr a, b, c) =
>         draw image(
>             draw textext(c) ;
>             currentpicture := currentpicture rotatedaround(center
> currentpicture,b) shifted a ;
>         ) ;
>     enddef ;
>
>     fuzzy((1cm,1cm), 30, "rotated") ;
> \stopMPcode

But what if I wanted the angle to be an optional parameter? (More in
the sense that if I decide to add some more parameters later, the old
code would still work.)

Is there any special reason why the old code doesn't work on mkiv?
I have found one possible explanation, though I'm not sure about that:

This works:

picture a; a := \sometxt{rotated};
gp_put_text((1cm, 1cm), angle(30), a);

but this doesn't:

gp_put_text((1cm, 1cm), angle(30), \sometxt{rotated});

What does metapost see in mkiv when one puts \sometxt there? Maybe
that explains the problem.

Mojca


More information about the ntg-context mailing list