
Hello, I'm having some trouble with a macro using \processaction inside a metapost graphic. Here is a minimal example. \def\Shape#1% {\processaction[#1] [square=>unitsquare, circle=>unitcircle]} \starttext \startuseMPgraphic{test} fill \Shape{square} scaled 1cm; \stopuseMPgraphic \useMPgraphic{test} \stoptext It stops with the error "Use of \p!compareprocessaction doesn't match its definition." Any ideas? Vianney

Vianney le Clément wrote:
Hello,
I'm having some trouble with a macro using \processaction inside a metapost graphic. Here is a minimal example.
\def\Shape#1% {\processaction[#1] [square=>unitsquare, circle=>unitcircle]} \starttext \startuseMPgraphic{test} fill \Shape{square} scaled 1cm; \stopuseMPgraphic \useMPgraphic{test} \stoptext
It stops with the error "Use of \p!compareprocessaction doesn't match its definition."
Like many of the more complex commands, \processaction does not expand totally. If you are using mkiv, you could define \Shape like this: \def\Shape#1% {\directlua{ local known = {square = 'unitsquare', circle = 'unitcircle' } tex.sprint(known[#1] or 'unitsquare')}} I don't know of a simple solution for mkii. Best wishes, Taco

On Thu, May 13, 2010 at 09:30, Taco Hoekwater
Like many of the more complex commands, \processaction does not expand totally. If you are using mkiv, you could define \Shape like this:
\def\Shape#1% {\directlua{ local known = {square = 'unitsquare', circle = 'unitcircle' } tex.sprint(known[#1] or 'unitsquare')}}
Thanks Taco. That does the trick provided you enclose #1 with quotes: \def\Shape#1% {\directlua{ local known = {square = 'unitsquare', circle = 'unitcircle' } tex.sprint(known['#1'] or 'unitsquare')}} Another, maybe uglier but plain TeX, solution I've come up with is defining auxiliary macros: \def\ShapeSSSsquare{unitsquare} \def\ShapeSSScircle{unitcircle} \def\Shape#1{\csname ShapeSSS#1\endcsname} But of course, this does not handle unknown options (though that could be added). I'll add this to the wiki. Vianney

2010/5/13 Vianney le Clément
On Thu, May 13, 2010 at 09:30, Taco Hoekwater
wrote: Like many of the more complex commands, \processaction does not expand totally. If you are using mkiv, you could define \Shape like this:
\def\Shape#1% {\directlua{ local known = {square = 'unitsquare', circle = 'unitcircle' } tex.sprint(known[#1] or 'unitsquare')}}
Thanks Taco. That does the trick provided you enclose #1 with quotes:
\def\Shape#1% {\directlua{ local known = {square = 'unitsquare', circle = 'unitcircle' } tex.sprint(known['#1'] or 'unitsquare')}}
Another, maybe uglier but plain TeX, solution I've come up with is defining auxiliary macros:
\def\ShapeSSSsquare{unitsquare} \def\ShapeSSScircle{unitcircle} \def\Shape#1{\csname ShapeSSS#1\endcsname}
But of course, this does not handle unknown options (though that could be added).
I'll add this to the wiki.
Vianney ___________________________________________________________________________________ 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://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
Also \getparameters[Shape][square={unitsquare }, circle={unitcircle }] \starttext \startuseMPgraphic{test} fill \Shapesquare scaled 1cm; \stopuseMPgraphic \useMPgraphic{test} \stoptext %%%%%%%%%%%%%% \setevalue{square}{unitsquare} \setevalue{circle}{unitcircle} \starttext \startuseMPgraphic{test} fill \getvalue{square} scaled 1cm; \stopuseMPgraphic \useMPgraphic{test} \stoptext -- luigi

On 13-5-2010 11:13, luigi scarso wrote:
\setevalue{square}{unitsquare} \setevalue{circle}{unitcircle}
\starttext
\startuseMPgraphic{test} fill \getvalue{square} scaled 1cm; \stopuseMPgraphic \useMPgraphic{test} \stoptext
or
\setevalue{mynamespace:square}{unitsquare} \setevalue{mynamespace:circle}{unitcircle}
\starttext
\startuseMPgraphic{test} fill \executeifdefined{mynamespace:square}{diamond} scaled 1cm; \stopuseMPgraphic \useMPgraphic{test} \stoptext
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------

2010/5/13 Vianney le Clément
\getparameters[Shape][square={unitsquare }, circle={unitcircle }] \starttext
\startuseMPgraphic{test} fill \Shapesquare scaled 1cm; \stopuseMPgraphic \useMPgraphic{test} \stoptext
This one's very nice. Thanks. becareful at the spaces at the end, ie \getparameters[Shape][square={unitsquare}, circle={unitcircle}]
doesn't work. -- luigi

becareful at the spaces at the end, ie \getparameters[Shape][square={unitsquare}, circle={unitcircle}]
doesn't work.
That's logical, because \Shapesquare eats the spaces following it. In my case, I define my macros like \getparameters[Shape:] [square=unitsquare, circle=unitcircle] \def\Shape#1{\csname Shape:#1\endcsname} and then use \Shape{square}, so it doesn't have the problem. But thanks for pointing that out. Vianney
participants (4)
-
Hans Hagen
-
luigi scarso
-
Taco Hoekwater
-
Vianney le Clément