Sender: |
|
Date: |
Sat, 7 Aug 2010 21:31:51 +0100 |
Reply-To: |
|
Message-ID: |
|
Subject: |
|
MIME-Version: |
1.0 |
Content-Transfer-Encoding: |
8bit |
In-Reply-To: |
|
Content-Type: |
text/plain; charset=windows-1252; format=flowed |
From: |
|
Parts/Attachments: |
|
|
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
|
|
|