\define a command with square-bracket arguments
Hi all, As I understand it, \define[2] is preferred over \def#1#2 because it refuses to overwrite existing commands. \define[2]\mycommand{code code code} defines a command to be invoked with \mycommand{...}{...} Can I use \define, or a related command, to define a command that takes square-bracket arguments, like so: \mycommand[...][...] ? When I type \define[1][2]\mycommand{code code code} that doesn't work. Cheers, Sietse
On 09/27/2012 05:45 PM, Sietse Brouwer wrote:
Hi all,
As I understand it, \define[2] is preferred over \def#1#2 because it refuses to overwrite existing commands.
\define[2]\mycommand{code code code} defines a command to be invoked with \mycommand{...}{...}
Can I use \define, or a related command, to define a command that takes square-bracket arguments, like so: \mycommand[...][...] ?
When I type \define[1][2]\mycommand{code code code} that doesn't work.
Cheers, Sietse _______
You know the wiki better than most, but I wonder: are you looking for this page? http://wiki.contextgarden.net/Commands_with_optional_arguments Thomas
2012-09-27 Sietse Brouwer
As I understand it, \define[2] is preferred over \def#1#2 because it refuses to overwrite existing commands.
\define overwrites existing commands with pleasure. In contrast to \def it prints a message to the log file: “\mycommand is already defined”.
Can I use \define, or a related command, to define a command that takes square-bracket arguments, like so: \mycommand[...][...]
\def\mycommand {\dodoubleempty\domycommand} \def\domycommand [#1][#2] {first: #1, second: #2} \mycommand [foo] [bar] \mycommand [foo][bar] \mycommand [foo] Question for the others: What's the difference of \dodoubleargument and \dodoubleempty? I expected \dodoubleargument to throw an error since the arguments are supposed to be mandatory. Marco
Hi Marco,
\define overwrites existing commands with pleasure. In contrast to \def it prints a message to the log file: “\mycommand is already defined”.
Ah, then I am not particularly bothered about using \def instead of \define for my square-bracket-taking commands. Thanks! Thomas wrote:
are you looking for this page? http://wiki.contextgarden.net/Commands_with_optional_arguments
I wasn't looking for that page, but on that note: I've found out where the Lua argument-to-table parsers reside! This makes me very happy. More in a separate e-mail, to follow. Cheers, Sietse
Am 27.09.2012 um 18:16 schrieb Marco Patzer
Question for the others: What's the difference of \dodoubleargument and \dodoubleempty? I expected \dodoubleargument to throw an error since the arguments are supposed to be mandatory.
In MkIV Hans didn’t add this check and in MkII he disabled is for command with three or less argument but even then you get only a message in the log when your command has no argument (i.e. a command with four argument complains only when it has zero argument but doesn’t complain when it has one to four arguments). Even though there is no difference between the \*empty and \*argument commands I would use both because you can see in the source that a command with \*argument has mandatory arguments while the argument for a \*empty command are optional. Wolfgang
Question for the others: What's the difference of \dodoubleargument and \dodoubleempty? I expected \dodoubleargument to throw an error since the arguments are supposed to be mandatory.
In MkIV Hans didn’t add this check and in MkII he disabled is for command with three or less argument but even then you get only a message in the log when your command has no argument (i.e. a command with four argument complains only when it has zero argument but doesn’t complain when it has one to four arguments).
Wikified: http://wiki.contextgarden.net/Command/dodoubleempty (I've been meaning to document that command for a while now. As a complement to the existing explanation at http://wiki.contextgarden.net/Commands_with_optional_arguments, I mean.) --Sietse
On 28-9-2012 14:41, Sietse Brouwer wrote:
Question for the others: What's the difference of \dodoubleargument and \dodoubleempty? I expected \dodoubleargument to throw an error since the arguments are supposed to be mandatory.
In MkIV Hans didn’t add this check and in MkII he disabled is for command with three or less argument but even then you get only a message in the log when your command has no argument (i.e. a command with four argument complains only when it has zero argument but doesn’t complain when it has one to four arguments).
Wikified: http://wiki.contextgarden.net/Command/dodoubleempty (I've been meaning to document that command for a while now. As a complement to the existing explanation at http://wiki.contextgarden.net/Commands_with_optional_arguments, I mean.)
Originally the 'argument' variant reported a message but when the code was cleaned up that went away ... actually it means that we can say: \let\dosingleargument \dosingleempty \let\dodoubleargument \dodoubleempty \let\dotripleargument \dotripleempty \let\doquadrupleargument \doquadrupleempty \let\doquintupleargument \doquintupleempty \let\dosixtupleargument \dosixtupleempty \let\doseventupleargument\doseventupleempty in syst-aux.mkiv, which is somewhat more efficient There is still checking in the {} variants. Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
participants (5)
-
Hans Hagen
-
Marco Patzer
-
Sietse Brouwer
-
Thomas A. Schmitz
-
Wolfgang Schuster