ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* \define a command with square-bracket arguments
@ 2012-09-27 15:45 Sietse Brouwer
  2012-09-27 15:59 ` Thomas A. Schmitz
  2012-09-27 16:16 ` Marco Patzer
  0 siblings, 2 replies; 7+ messages in thread
From: Sietse Brouwer @ 2012-09-27 15:45 UTC (permalink / raw)
  To: mailing list for ConTeXt users

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
___________________________________________________________________________________
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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \define a command with square-bracket arguments
  2012-09-27 15:45 \define a command with square-bracket arguments Sietse Brouwer
@ 2012-09-27 15:59 ` Thomas A. Schmitz
  2012-09-27 16:16 ` Marco Patzer
  1 sibling, 0 replies; 7+ messages in thread
From: Thomas A. Schmitz @ 2012-09-27 15:59 UTC (permalink / raw)
  To: mailing list for ConTeXt users

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
___________________________________________________________________________________
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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \define a command with square-bracket arguments
  2012-09-27 15:45 \define a command with square-bracket arguments Sietse Brouwer
  2012-09-27 15:59 ` Thomas A. Schmitz
@ 2012-09-27 16:16 ` Marco Patzer
  2012-09-27 16:23   ` Sietse Brouwer
  2012-09-27 16:55   ` Wolfgang Schuster
  1 sibling, 2 replies; 7+ messages in thread
From: Marco Patzer @ 2012-09-27 16:16 UTC (permalink / raw)
  To: ntg-context

2012-09-27 Sietse Brouwer <sbbrouwer@gmail.com>:

Hi Sietse,

> 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

___________________________________________________________________________________
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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \define a command with square-bracket arguments
  2012-09-27 16:16 ` Marco Patzer
@ 2012-09-27 16:23   ` Sietse Brouwer
  2012-09-27 16:55   ` Wolfgang Schuster
  1 sibling, 0 replies; 7+ messages in thread
From: Sietse Brouwer @ 2012-09-27 16:23 UTC (permalink / raw)
  To: mailing list for ConTeXt users

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
___________________________________________________________________________________
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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \define a command with square-bracket arguments
  2012-09-27 16:16 ` Marco Patzer
  2012-09-27 16:23   ` Sietse Brouwer
@ 2012-09-27 16:55   ` Wolfgang Schuster
  2012-09-28 12:41     ` Sietse Brouwer
  1 sibling, 1 reply; 7+ messages in thread
From: Wolfgang Schuster @ 2012-09-27 16:55 UTC (permalink / raw)
  To: mailing list for ConTeXt users


Am 27.09.2012 um 18:16 schrieb Marco Patzer <homerow@lavabit.com>:

> 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
___________________________________________________________________________________
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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \define a command with square-bracket arguments
  2012-09-27 16:55   ` Wolfgang Schuster
@ 2012-09-28 12:41     ` Sietse Brouwer
  2012-09-28 13:41       ` Hans Hagen
  0 siblings, 1 reply; 7+ messages in thread
From: Sietse Brouwer @ 2012-09-28 12:41 UTC (permalink / raw)
  To: mailing list for ConTeXt users

>> 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
___________________________________________________________________________________
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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \define a command with square-bracket arguments
  2012-09-28 12:41     ` Sietse Brouwer
@ 2012-09-28 13:41       ` Hans Hagen
  0 siblings, 0 replies; 7+ messages in thread
From: Hans Hagen @ 2012-09-28 13:41 UTC (permalink / raw)
  To: mailing list for ConTeXt users

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
-----------------------------------------------------------------
___________________________________________________________________________________
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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2012-09-28 13:41 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-09-27 15:45 \define a command with square-bracket arguments Sietse Brouwer
2012-09-27 15:59 ` Thomas A. Schmitz
2012-09-27 16:16 ` Marco Patzer
2012-09-27 16:23   ` Sietse Brouwer
2012-09-27 16:55   ` Wolfgang Schuster
2012-09-28 12:41     ` Sietse Brouwer
2012-09-28 13:41       ` Hans Hagen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).