Joseph Wright wrote: > Will is on the nail here. The advantage of two different letters for > optional argument and optional argument + default is that it avoids this > question. Perhaps that scheme is better over all, even though we then > need an extra letter. How about: > > - n = optional argument with no default > - o = optional argument with default (which must therefore be specified) > - b = optional braced argument (as Will wanted "n" for this) Suggestion (2): - o = standard optional LaTeX argument with no default value. - d = delimited optional argument where both the delimiters and default must be given. - b or n = optional braced argument (now have a choice!). This means that "o" is a shortcut for "d[]{\NoValue}", and that any other case is handled "in full" using d. This seems like a reasonable balance between making simple optional arguments easy and having a consistent syntax: \DeclareDocumentCommand \foo { o m } { } \DeclareDocumentCommand \foo { d[]{Stuff} m } { } \DeclareDocumentCommand \foo { d(){0,0} m } { } % Optional co-ordinates Alternatively, the order could be reversed for d: \DeclareDocumentCommand \foo { d[{\NoValue}] m } { } which looks more like the current \newcommand syntax, but would need braces around the second argument (I don't like this idea, hence d currently doesn't work this way!). (By the way, xparse-alt currently uses "-NoValue-" rather than \NoValue, but I think this was a mistake: once the discussion is complete-ish and I know what is needed, I'll go back and change this.) -- Joseph Wright