On Tue, Apr 30, 2013 at 4:06 PM, Joseph Wright
<[log in to unmask]> wrote:
> On where '-NoValue-' 'lives', ...etc...
Your problem is that xparse has been trying to cater to two different
target groups. It's meant to create document-level commands. But it's
not clear what kind of environment it's meant to create them from.
On the one hand, the LaTeX3 methodology recommends the use of xparse
for document level commands (rather than the LaTeX2 \newcommand or the
TeX \def). On the other hand, xparse doesn't offer a LaTeX3 syntax! It
was obviously designed to be used independently from expl3. I do
understand. The xparse functionality is useful to both LaTeX3
programmers and other LaTeXers.
As I see it, the 'correct' way to go about this is to follow your own
methodology (I'm a fan of self-reference):
* Create a LaTeX3 library which provides xparse functionality; let's
call it l3xparse. I'd expect to see functions like
\xparse_if_no_value:n(TF). Actually, a lot of potential \xparse_...
functions probably already exist under a different name, like
\bool_if:n(TF) for \IfBoolean(TF).
* Expose l3xparse with a thin layer of document-level commands. The
result will be what you now call xparse. The cool thing is, you can
actually use l3xparse to create that thin layer around itself.
Whether the 'no value' placeholder should be different between the two
packages is a separate issue. Syntax wise it doesn't matter, since it
should never be visible in the code. But I'd probably still make it
different, if only to make bugs easier to trace.