On 23/10/2009, at 4:34 PM, Joseph Wright wrote: > Will Robertson wrote: >> On 23/10/2009, at 6:55 AM, Joseph Wright wrote: >>> This would allow things like: >>> >>> > \ReturnVariable { \MakeHarmless\ReturnVariable } >>> % Will absorb one more argument, as required >>> >>> (using \MakeHarmless from xdoc). That doesn't work at present as >>> the return has to be in a toks. >>> >>> As Lars points out, that is quite a bit more flexible at the cost >>> of a little complexity in the syntax. >> I'm not sure that I see how this is any more flexible? >> Oh, simply that your argument processor doesn't have to be hard- >> coded to use \l_xparse_arg_toks. >> But hang on, can't you do the same thing at present by just writing >> > { \MakeHarmless\l_xparse_arg_toks } >> ? > > No. \MakeHarmless has the syntax: > > \MakeHarmless <macro> <input> > > where <macro> is used for the output. So if you try to use a toks > here, it will fail to work correctly. You'd need a wrapper function, > which is what Lars is suggesting we should avoid. Ah, and then I guess you use V expansion to get the output from \ReturnVariable regardless of whether it's a toks or a macro. Hmmm. Well. I suppose it's out of the question to have both options, where ">{\processor}" is a shorthand for, say, ">> \l_xparse_arg_toks {\processor}". Or have ">*{\processor}" that uses \l_xparse_arg_tl instead. Both of these solutions seem to be more like avoiding the issue than solving it :) They certainly don't help simplify the situation. -- Will