On 07/08/2010 14:57, Arno Trautmann wrote: > Hi all, > > I am looking for a way to define an environment that takes a range as an > optional argument. This should be given in the following way: > > \begin{environment}(15:5.23) > > with a default value, say (1:3). The two limits should then be parsed as > single arguments which are separated by the colon. > I am trying to do this with xparse and got some possible solutions with > the u and d argument type, but I didn’t manage to get the parentheses > optional. I guess what I need is some kind of an optional u argument … > > Does anyone have a suggestion how to easily implement these requests? > > cheers > Arno > Hello Arno, Parse the argument first as a 'd', then use \SplitArgument to do the subsequent work: \documentclass{article} \usepackage{xparse} \NewDocumentEnvironment{example}{>{\SplitArgument{1}{:}}d()} {} { \IfNoValueTF{#1} {#1} {\showargs#1}% } \NewDocumentCommand\showargs{mm}{Arg 1: #1, Arg 2: #2} \begin{document} \begin{example} First \end{example} \begin{example}(1:2) Second \end{example} \end{document} Here, \SplitArgument will return the result as two groups, unless there was \NoValue in which case nothing happens. -- Joseph Wright