ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Taco Hoekwater <taco@elvenkind.com>
Subject: Re: High level user macro (howto?)
Date: Mon, 28 Jun 2004 11:32:17 +0200	[thread overview]
Message-ID: <20040628113217.2efb080b@glenlivet.elvenkind.com> (raw)
In-Reply-To: <5CAF4C26-C756-11D8-AE54-000A95C38698@chello.fr>


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

  parent reply	other threads:[~2004-06-28  9:32 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-31  9:07 pdfTeX questions Peter Münster
2004-05-31  9:56 ` Patrick Gundlach
2004-05-31 10:11   ` Patrick Gundlach
2004-05-31 12:09   ` Peter Münster
2004-05-31 12:53     ` Patrick Gundlach
2004-06-01 18:08       ` Hans Hagen
     [not found]         ` <m2n032tvs8.fs f@levana.de>
2004-06-02 18:05         ` Peter Münster
2004-06-17  8:48         ` Patrick Gundlach
2004-06-18 14:29           ` ConTeXt-Wiki (Was: Re: Re: pdfTeX questions) Holger Schöner
2004-06-20 14:12             ` ConTeXt-Wiki Patrick Gundlach
2004-06-21 14:39               ` ConTeXt-Wiki Holger Schöner
2004-06-22 15:55                 ` ConTeXt-Wiki Patrick Gundlach
2004-06-22 16:13                   ` ConTeXt-Wiki Matt Gushee
2004-06-22 17:00                     ` ConTeXt-Wiki Patrick Gundlach
2004-06-22 17:13                       ` ConTeXt-Wiki jimarin
2004-06-23  5:56                         ` Maurice Diamantin
2004-06-23  7:32                           ` ConTeXt-Wiki Patrick Gundlach
2004-06-28 16:52                             ` ConTeXt-Wiki Nagy Bence
2004-06-28 17:08                               ` Tobias Burnus
2004-06-23  8:51                           ` Tobias Burnus
2004-06-23 12:24                             ` Maurice Diamantin
2004-06-23 15:09                               ` ConTeXt-Wiki Patrick Gundlach
2004-06-23 16:59                                 ` SF project and docs (was: ConTeXt-Wiki) Henning Hraban Ramm
2004-06-24 14:13                                   ` Maurice Diamantini
2004-06-24 19:12                                     ` docs Henning Hraban Ramm
2004-06-24 19:34                                       ` docs Idris Samawi Hamid
2004-06-24 21:58                                         ` docs Henning Hraban Ramm
2004-06-25  6:21                                         ` docs Taco Hoekwater
2004-06-25 15:23                                           ` docs Idris Samawi Hamid
2004-06-24 19:42                                       ` docs William D. Neumann
2004-06-25  6:42                                         ` Hans political ConTeXt orientation request! Maurice Diamantini
2004-06-25 16:03                                           ` Hans Hagen
2004-06-26  9:46                                             ` Maurice Diamantini dom
2004-06-26  9:51                                             ` High level user macro (howto?) Maurice Diamantini dom
2004-06-28  9:18                                               ` Giuseppe Bilotta
2004-06-28 11:58                                                 ` Hans Hagen
2004-06-28 13:21                                                   ` Re[2]: " Giuseppe Bilotta
2004-06-28 14:04                                                     ` Hans Hagen
2004-06-28 15:06                                                       ` Re[2]: " Giuseppe Bilotta
2004-06-28  9:32                                               ` Taco Hoekwater [this message]
2004-08-10 12:02                                                 ` Peter Münster
2004-08-10 12:11                                                   ` Peter Münster
2004-08-10 12:35                                                     ` Vit Zyka
2004-08-10 13:47                                                       ` Peter Münster
2004-06-28  9:49                                               ` Patrick Gundlach
2004-06-28 15:34                                                 ` Maurice Diamantini
2004-06-28  8:40                                             ` Extending metapost Taco Hoekwater
2004-12-27 16:03                                               ` John Culleton
2004-12-27 19:17                                                 ` Patrick Gundlach
2004-12-28 10:04                                                 ` Taco Hoekwater
2004-06-25 16:11                                         ` docs Hans Hagen
2004-06-25 16:56                                           ` docs William D. Neumann
2004-06-25 18:04                                             ` docs Hans Hagen
2004-06-26 18:18                                             ` docs Hans Hagen
2004-06-23  8:56                           ` ConTeXt-Wiki Patrick Gundlach
2004-06-23 12:42                             ` ConTeXt-Wiki Maurice Diamantini
2004-06-23 14:54                               ` ConTeXt-Wiki Patrick Gundlach
2004-06-24 13:01                                 ` ConTeXt-Wiki Maurice Diamantini
2004-06-23  7:26                         ` ConTeXt-Wiki Patrick Gundlach
2004-06-23  8:55                         ` ConTeXt-Wiki Patrick Gundlach
2004-06-23 15:29                   ` ConTeXt-Wiki Holger Schöner
2004-06-06  7:24       ` Re: pdfTeX questions Peter Münster
2004-06-07 17:40         ` Hans Hagen
2004-06-07 20:40           ` Peter Münster
2004-05-31 10:07 ` Patrick Gundlach
2004-05-31 12:20   ` Peter Münster
2004-06-01 18:10     ` Hans Hagen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040628113217.2efb080b@glenlivet.elvenkind.com \
    --to=taco@elvenkind.com \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).