Manuel Pégourié-Gonnard wrote: > I think there is no better way, and the only possible thing to do about it is to > clearly document the limitations of this approach, and warn that > \DeclareExpandableDocumentCommand should only be used if absolutely necessary. > > (Btw it's probably already done in the doc: I didn't have time to read the > lastest version, just coming back from holidays, sorting mail first...) > > Manuel. > Indeed, I put: % There are \emph{very rare} occasion when it may be useful to create % fully expandable document commands. To support this, \pkg{xparse} % can create expandable functions as well as the usual robust % ones. This imposes a number of restrictions on the nature of the % arguments accepted by a function, and the code it implements. % This facility should only be used when \emph{absolutely necessary}; % if you do not understand when this might be, \emph{do not use these % functions}! and also % Parsing arguments expandability imposes a number of restrictions on % both the type of arguments that can be read and the error checking % available: % \begin{itemize} % \item The last argument of the function must be mandatory % (type \texttt{l}, \texttt{m} or \texttt{u}). % \item All arguments are either short or long: it is not possible % to mix short and long argument types. % \item The `optional group' argument types \texttt{g} and % \texttt{G} are not available. % \item It is not possible to differentiate between, for example % |\foo[stuff]{argument}| and |\foo{[}]{argument}|. As a % result, checking for optional arguments is less robust than % in the standard version. % \end{itemize} I hope that basically covers it (anything else important?). -- Joseph Wright