On 06/01/2011, at 9:24 AM, Frank Mittelbach wrote:
> I sure have changed my mind several times about how to think about :nox
> argument specs. but these days I'm fairly convinced that one should without
> execption think of them (and describe them) as manipulating the arguments
> prior to passing them to the base function. So \int_eval:x would first do the
> "edef" expansion on the argument and then pass it to \int_eval:n which would
> do what?
> no I think it is perfectly okay to have commands that do something with their
> "n" arguments in fact all of them do something with the argument content only
> in some cases it involves expansion which you could also do "prior" to calling
> the command using the ":nox" approach
Absolute agreement from me; I think this is perhaps the only logical way to consider the whole argument scheme for expl3.
(Earlier ideas did throw around notation for indicating various register inputs but as you say above things just get a bit messy.)
> I think what is wrong is what you initially pointed out that \dim_eval:n
> behaves differently ... but I think that would be best resolved by adding
> \tex_the:D in the right place. At least that my current thinking on the topic.
Oh! I was confused -- for some reason it was in my head that using \the before \glueexpr would strip it of its "plus minus" components. But this is not the case, of course.
\the\glueexpr 1pt plus 1pt minus 1pt + 2pt plus -1pt minus 1pt\relax
So I agree with you that adding \tex_the:D before \dim_eval and \skip_eval (and \muskip_eval which doesn't yet exist I think but it probably should) is the best idea.