On 9/17/2020 9:41 PM, Geert Verhaag wrote:
Hi ConTeXt users,

That's indeed magic and it works! Hans, thanks for your prompt answer!

But I would like to take this a step further, by introducing a macro within the start/stopuseMPgraphic structure like so:

\startuseMPgraphic{name}{s::lbl}
   def mymacro (text lb) =
     pair a ; a := (3cm,3cm) ;label.top("String: " & str lb,a) ;
   enddef ;
   mymacro(\MPvariable{lbl}) ;
\stopuseMPgraphic

and this works too, but what if I introduce another text argument like:

\startuseMPgraphic{name}{s::lbl,s::label}
   def mymacro (text lb,lbx) =
    pair a ; a := (3cm,3cm) ;label.top("String: " & str lb & ", " & str lbx,a) ;
   enddef ;
   mymacro(\MPvariable{lbl},\MPvariable{label}) ;
\stopuseMPgraphic

However this doesn't work!  It gives the following error:

! Missing argument to mymacro.

Isn't that weird? But perhaps it has to do with me not understanding argument passing properly within METAPOST macros!

Can someone please explain why this 2 argument example doesn't work?

(But maybe this isn't the proper list to ask questions like these. If so, I'm sorry for bothering you!)

Regards,
Gerard


On 16-09-2020 16:32, Geert Verhaag wrote:

Hi,

I'm trying to pass a string argument value to an MPgraphic but it doesn't seem to work:

Tried the following:

\startuseMPgraphic{name}{lbl}
  pair a ; a := (3cm,3cm) ;label.top("\MPvariable{lbl}",a) ;
\stopuseMPgraphic

\starttext
  \useMPgraphic{name}{lbl=1}
\stoptext

The above works as expected!

But the following doesn't:

\startuseMPgraphic{name}{lbl}
  pair a ; a := (3cm,3cm) ;label.top("\MPvariable{lbl}",a) ;
\stopuseMPgraphic

\starttext
  \useMPgraphic{name}{lbl=abc}
\stoptext

It yields:

 1 \startuseMPgraphic{name}{lbl}
 2       pair a ; a := (3cm,3cm) ;label.top("\MPvariable{lbl}",a) ;
 3     \stopuseMPgraphic
 4
 5     %\startuseMPgraphic{name}fill fullcircle scaled 200pt withcolor .625yellow ;\stopuseMPgraphic
 6
 7     \starttext
 8      Example:
 9 >>    \useMPgraphic{name}{lbl=abc}
10     \stoptext
11

<to be read again>
a
\m_meta_current_variable a-a
                            bc
<argument> ... \hbox {\scratchdimen \m_meta_current_variable
                                                  sp}\ifzeropt \wd \b_meta_v...
\secondoftwoarguments #1#2b-#2

\9>>1 #1,2-\meta_prepare_instance_variable {#1}
\syst_helpers_do_process_comm...
\syst_helpers_do_process_comma_list ...rgument #1,
                                                  ]\relax \global \advance \...
...
l.9   \useMPgraphic{name}{lbl=abc}

So it seems that only numbers can be passed not character strings! Why is that? Is there a possibility to achieve this functionality?
\startuseMPgraphic{name}{s::lbl,s::label}
    def mymacro(expr a, b) =
        label.top("str:(" & a & "," & b & ")",(3cm,3cm)) ;
    enddef ;
    mymacro("\MPvariable{lbl}","\MPvariable{label}")
\stopuseMPgraphic

\starttext
  \useMPgraphic{name}{lbl=abc,label=pqr}
  \useMPgraphic{name}{lbl=def,label=xyz}
\stoptext

-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
       tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to