how to dismantle parametrized macro
Dear ConTeXters, I am a bit stuck about how to handle the key-value mechanism of ConTeXt. The text here, between my "monkey-see-monkey-do" attempts to write a macro, hopefully demonstrates what I want to achieve. Could sb give me a hand? Thank you very much Johannes ---8-<--- \setupcolors[state=start] \setupoutput[pdf] \definecolor[Accent:1:5][r=0.50, g=0.79, b=0.50] \definecolor[Accent:2:5][r=0.75, g=0.69, b=0.84] \definecolor[Accent:3:5][r=1.00, g=0.76, b=0.53] \definecolor[Accent:4:5][r=1.00, g=1.00, b=0.60] \definecolor[Accent:5:5][r=0.22, g=0.43, b=0.69] \def\defineCBpalet{\dodoubleemptywithset\dodefineCBpalet} \def\dodefineCBpalet[#1][#2]% { \def\sep{} \ifsecondargument \getparameters[CB][\c!n=,#2] \else \def\CBn{3} \fi \def\colorlist{% \dorecurse{\CBn}{ \sep #1:\recurselevel=#1:\recurselevel:\CBn \def\sep{,}}} \definepalet[#1][\colorlist]} \defineCBpalet[Accent][n=5] % I want this to expand into (without the indentation): % \definepalet[Accent] % [Accent:1=Accent:1:5, % Accent:2=Accent:2:5, % Accent:3=Accent:3:5, % Accent:4=Accent:4:5, % Accent:5=Accent:5:5] \starttext \comparepalet[Accent] \stoptext --->-8--- -- Johannes Hüsing There is something fascinating about science. One gets hannes@ruhrau.de such wholesale returns of conjecture from such a trifling investment of fact. Mark Twain
At 16:14 20/05/2003 +0200, you wrote:
\def\dodefineCBpalet[#1][#2]% { \def\sep{} \ifsecondargument \getparameters[CB][\c!n=,#2] \else \def\CBn{3} \fi
^^^ this can be simplified (see code below)
\def\colorlist{% \dorecurse{\CBn}{ \sep #1:\recurselevel=#1:\recurselevel:\CBn \def\sep{,}}} \definepalet[#1][\colorlist]}
this way some loop is executed as argument, and that will fail (not fully expandable and so)
\defineCBpalet[Accent][n=5]
% I want this to expand into (without the indentation): % \definepalet[Accent] % [Accent:1=Accent:1:5, % Accent:2=Accent:2:5, % Accent:3=Accent:3:5, % Accent:4=Accent:4:5, % Accent:5=Accent:5:5]
\starttext
\comparepalet[Accent]
\stoptext
The solution to this is to construct the comma list: \def\defineCBpalet{\dodoubleempty\dodefineCBpalet} \def\dodefineCBpalet[#1][#2]% {\getparameters[CB][\c!n=3,#2] \let\CBcolorlist\empty \dorecurse\CBn {\addtocommalist {#1:\recurselevel=#1:\recurselevel:\CBn} % is always expanded \CBcolorlist} \expanded{\definepalet[#1][\CBcolorlist]}} \defineCBpalet[Accent][n=5] ------------------------------------------------------------------------- Hans Hagen | PRAGMA ADE | pragma@wxs.nl Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com ------------------------------------------------------------------------- information: http://www.pragma-ade.com/roadmap.pdf documentation: http://www.pragma-ade.com/showcase.pdf -------------------------------------------------------------------------
Hans Hagen
\def\defineCBpalet{\dodoubleempty\dodefineCBpalet}
\def\dodefineCBpalet[#1][#2]% {\getparameters[CB][\c!n=3,#2] \let\CBcolorlist\empty \dorecurse\CBn {\addtocommalist {#1:\recurselevel=#1:\recurselevel:\CBn} % is always expanded \CBcolorlist} \expanded{\definepalet[#1][\CBcolorlist]}}
\defineCBpalet[Accent][n=5]
This gives the following error message here: ! Missing \endcsname inserted. <to be read again> \unhbox \leavevmode ->\unhbox \voidb@x \bottomaccent #1#2#3#4#5->\leavevmode \vtop {\forgetall \baselineskip \zerop... \dohandleaccent ...acterencoding #1\endcsname {#2} \else \csname \nocharacter... <argument> \c ! n \dosetvalue ...!internal!n \ifcsname \k!prefix! #2 \endcsname \let \c!interna... ... l.22 \defineCBpalet[Accent][n=5] What gives? Johannes -- Johannes Hüsing There is something fascinating about science. One gets hannes@ruhrau.de such wholesale returns of conjecture from such a trifling investment of fact. Mark Twain
At 22:09 21/05/2003 +0200, Johannes Hüsing wrote:
Hans Hagen
[Wed, May 21, 2003 at 02:30:44PM CEST]: [...] \def\defineCBpalet{\dodoubleempty\dodefineCBpalet}
\def\dodefineCBpalet[#1][#2]% {\getparameters[CB][\c!n=3,#2] \let\CBcolorlist\empty \dorecurse\CBn {\addtocommalist {#1:\recurselevel=#1:\recurselevel:\CBn} % is always expanded \CBcolorlist} \expanded{\definepalet[#1][\CBcolorlist]}}
\defineCBpalet[Accent][n=5]
\protect [macrodef] \unprotect or \c!n => n Hans ------------------------------------------------------------------------- Hans Hagen | PRAGMA ADE | pragma@wxs.nl Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com ------------------------------------------------------------------------- information: http://www.pragma-ade.com/roadmap.pdf documentation: http://www.pragma-ade.com/showcase.pdf -------------------------------------------------------------------------
Hans Hagen
\protect [macrodef] \unprotect
This didn't work -- caused the same error message.
or
\c!n => n
This works. Thank you very much! Groeten Johannes -- Johannes Hüsing There is something fascinating about science. One gets hannes@ruhrau.de such wholesale returns of conjecture from such a trifling investment of fact. Mark Twain
At 23:09 24/05/2003 +0200, you wrote:
Hans Hagen
[Fri, May 23, 2003 at 02:47:15PM CEST]: [...] \protect [macrodef] \unprotect
This didn't work -- caused the same error message.
should be \unprotect ... \protect ------------------------------------------------------------------------- Hans Hagen | PRAGMA ADE | pragma@wxs.nl Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: +31 (0)38 477 53 69 | fax: +31 (0)38 477 53 74 | www.pragma-ade.com ------------------------------------------------------------------------- information: http://www.pragma-ade.com/roadmap.pdf documentation: http://www.pragma-ade.com/showcase.pdf -------------------------------------------------------------------------
participants (2)
-
Hans Hagen
-
Johannes Hüsing