[NTG-context] prevent gobbling of spaces when omitting optional argument

Wolfgang Schuster schuster.wolfgang at googlemail.com
Sat Jan 29 09:51:58 CET 2011


Am 28.01.2011 um 23:24 schrieb Florian Wobbe:

> Hi,
> 
> please consider the following minimal example:
> 
> \def\before{\dodoubleempty\dobefore}%
> \def\dobefore[#1][#2]{before}
> 
> \starttext
> \before[] after (should be: \before[]\ after without explicit \type{\ })\par
> \before[]after\par
> \before[][] after\par % this works
> \before[][]after\par
> \stoptext
> 
> How can I prevent gobbling the following space, when the second optional argument is not given (i.e. first line). The macro itself should not insert space if the command is followed by any other character (2nd and 4th line).


What do you want to achieve, maybe there is already something available.

% \one, \one[…] and \one[…][…] (no spaces between “[][]” allowed)

\def\one
  {\strictdoifnextoptionalelse\doone\noone}

\def\noone{[]}

\def\doone[#1]%
  {\strictdoifnextoptionalelse{\dodoone[#1]}{\nodoone[#1]}}

\def\dodoone[#1][#2]%
  {[#1:#2]}

\def\nodoone[#1]%
  {[#1]}

% \two, \two{…} and \two{…} (no spaces between “{}{}” allowed)

\def\two
  {\dodoublegroupempty\dotwo}

\def\dotwo#1#2%
  {\ifsecondargument
     [#1:#2]%
   \else\iffirstargument
     [#1]%
   \else
     []%
   \fi\fi}

\starttext
\startlines
\one text
\one[1] text
\one[1][2] text
\two text
\two{1} text
\two{1}{2} text
\stoplines
\stoptext

Wolfgang



More information about the ntg-context mailing list