Rik Kabel schrieb am 16.10.2024 um 23:18:
<stuff deleted for brevity in replying.>
When you have argument after square brackets you have to use #: to continues scanning for arguments of the command. For the mandatory argument you should just use #2 and keep #= for the optional arguments which are only used when text enclosed in curly braces appears. The #* between the third and fourth argument allows spaces between them.
%%%% begin example
\tolerant\protected\def\Bi[#1]#:#2#*#=#*#=%
{(1=#1)%
(2=#2)%
(3=#3)%
(4=#4)}
\starttext
[\Bi[one]{two}{three}{four}]
[\Bi [one] {two} {three} {four}]
[\Bi [one] {two} {three}]
[\Bi [one] {two}]
[\Bi {two}]
[\Bi [one] {two}]
\stoptext
%%%% end example
To check whether a argument is empty or not you can use the \ifparameter command with the parameter to check (i.e. #1) as argument (don't forget the \or) but \doifempty etc. work as well.
%%%% begin example
\tolerant\protected\def\Bi[#1]#:#2#*#=#*#=%
{\ifparameter#1\or
First argument is used.
\else
First argument is missing or empty.
\fi}
\starttext
\Bi {bar}
\Bi [] {bar}
\Bi [foo] {bar}
\stoptext
%%%% end example
Wolfgang
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive : https://github.com/contextgarden/context
wiki : https://wiki.contextgarden.net
___________________________________________________________________________________
Excellent, and thank you for the explanation. I guess #? is still available.
(I had tried with #:, but not in combination with [#1] and #= for the last parameter).
--
Rik