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 ___________________________________________________________________________________