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