[NTG-context] Defining command with optional and mandatory arguments

Hans Hagen j.hagen at xs4all.nl
Wed May 23 16:01:05 CEST 2018


On 5/23/2018 3:39 PM, Christoph Reller wrote:
> Hi,
> 
> What is the right way to define a command with both mandatory and
> optional arguments, e.g:
> 
> \MyCommand[optional][mandatory]
> 
> Consider the following MWE:
> 
> \unexpanded\def\MyCommand[#1]{
>    \dosingleempty{\doMyCommand[#1]}}
> \def\doMyCommand[#1][#2]{
>    \doifsomething{#1}{number 1: #1\par}
>    \doifsomething{#2}{number 2: #2}\blank[big]}
> \starttext
> \MyCommand[A][B]
> \MyCommand[A]
> \stoptext
> 
> In last year's versions of ConTeXt the output was
> 
> number 1: A
> number 2: B
> number 1: A
> 
> In the latest version of ConTeXt the output is
> 
> number 1: A
> number 2: B
> number 2: A
> 
> Is this behavior intended? How can I make a definition whose behavior
> does not change in new versions of ConTeXt?
i'm not sure wht happens at your end but this is the best way:

\unexpanded\def\MyCommand
   {\dodoubleempty\doMyCommand}

\def\doMyCommand[#1][#2]%
   {\iffirstargument
      number 1: #1%
      \par
    \fi
    \ifsecondargument
      number 2: #2%
    \fi
    \blank[big]}

\starttext
     \MyCommand[A][B]
     \MyCommand[A]
\stoptext


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
        tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------


More information about the ntg-context mailing list