Hi Maurice, The 'key' to the keyval functionality in ConTeXt are two macros called \getparameters and \processaction. Here is a 'quickstart', assuming you want to define \myzigzag: % \unprotect % enable exclamations in macro names \def\myzigzag#1[#2]{% % the #1 makes sure we allow a space before the bracket % \getparameters[ZZ][Dir=,Linewidth=1pt,Color=Red,Width=3em,#2] % % Now you have a set of new macros that all start with ZZ. % At least there are \ZZDir,\ZZLinewidth, \ZZColor and \ZZWidth % (these have default values) but possibly others as well, % depending on user input. % % Here's a usage example: % \edef\mywidth{\ZZWidth}% % % If you want to use keyword values, then you also need % to use \processaction. % % Say you want "Dir" to be mandatory and that it % accepts 4 directional keywords, as well as a direct % angle specification. % % I've used all mixed case keywords, because otherwise % you might run into conflicts with the multilingual interface % \expandafter\processaction\expandafter[\ZZDir] [Down =>\def\Dir{270}, Left =>\def\Dir{180}, Up =>\def\Dir{90}, Right =>\def\Dir{0}, \s!default =>\errorDir, \s!unknown =>\checkDir{\ZZDir}] % % \s!default may be triggered because \ZZDir's expansion is % empty unless the user supplied something. % % The first argument to \processaction has to be expanded, % so you need the \expandafter's.q } % for completeness, here is an example definition of \checkDir and % \errorDir: \def\errorDir{% \def\Dir{0}% error recovery \message{Please supply "Dir" argument}% } \def\checkDir#1{% \doifnumberelse {#1} {\def\Dir{#1}} {\message{Invalid "Dir" argument! (#1)}} } \protect % end of definitions On Sat, 26 Jun 2004 11:51:14 +0200, Maurice wrote:
Bonjour à tous,
One thing is missing in context (or not documented in reference manual?) is a standard and easy way to build arbitrary parametrised high level macros.
-- groeten, Taco