Problem with macro with optional parameter
Hello ConTeXist. I'm not able to solve a macros problem with one optional argument. I need the macro to return a value that can be used as a dorecurse loop parameter. Is there possibility create macro with optional parameter and parameter is concurrently inside in braces? (in nonsquare brackets)? I've tried to experiment with examples from the wiki, but I'm not clear about it. Thanx for help. Jaroslav Hajtmar Here is minimal example: \def\DoCommand[#1]% {\iffirstargument#1\else100\fi} \def\Command% {\dosingleargument\DoCommand} %\def\DoAnotherCommand{#1}% % {\iffirstargument#1\else100\fi} %\def\AnotherCommand% % {\dosingleargument\DoAnotherCommand} \starttext 1. \Command[5] % OK 2. \Command % OK %1. \dorecurse{\Command[5]}{\recurselevel\crlf} % not working %2. \dorecurse{\Command}{\recurselevel\crlf} % not working \stoptext
On Tue, 2017-06-27 at 08:58 +0000, Jaroslav Hajtmar wrote:
Hello ConTeXist. I'm not able to solve a macros problem with one optional argument. I need the macro to return a value that can be used as a dorecurse loop parameter. Is there possibility create macro with optional parameter and parameter is concurrently inside in braces? (in nonsquare brackets)? I've tried to experiment with examples from the wiki, but I'm not clear about it. Thanx for help. Jaroslav Hajtmar Here is minimal example: \def\DoCommand[#1]% {\iffirstargument#1\else100\fi} \def\Command% {\dosingleargument\DoCommand} %\def\DoAnotherCommand{#1}% % {\iffirstargument#1\else100\fi} %\def\AnotherCommand% % {\dosingleargument\DoAnotherCommand} \starttext 1. \Command[5] % OK 2. \Command % OK %1. \dorecurse{\Command[5]}{\recurselevel\crlf} % not working %2. \dorecurse{\Command}{\recurselevel\crlf} % not working
The first argument to \dorecurse has to expand to a number. Therefore it has to be fully- expandable. Scanning for optional brackets is never expandable. You have to do it this way: \def\Command#1% {\expdoifelse{#1}{}{100}{#1}} \starttext 1. \Command{5} % OK 2. \Command{} % OK 1. \dorecurse{\Command{5}}{\recurselevel\crlf} % not working 2. \dorecurse{\Command{}}{\recurselevel\crlf} % not working \stoptext
\stoptext ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net ___________________________________________________________________________________
Thanx Henri for answer.
Maybe I have been explaining wrong my problem. I would need a variant without a parameter and concurrently without braces. Command without braces swallows the break of the paragraph.
\def\Command#1%
{\expdoifelse{#1}{}{100}{#1}}
\starttext
1. \Command{5} % OK
2. \Command % OK
3. As You see, Command without braces swallows the break of the paragraph.
1. \dorecurse{\Command{5}}{\recurselevel\crlf} % not working
2. \dorecurse{\Command{}}{\recurselevel\crlf} % not working
\stoptext
Jaroslav Hajtmar
Dne 27.06.17 13:05, ntg-context za uživatele Henri Menke
participants (2)
-
Henri Menke
-
Jaroslav Hajtmar