Usando xparse
Quiero crear un comando que defina otros comandos. Sin embargo, quiero que el comando secundario consista en texto y luego el argumento del primer comando. Por ejemplo
Por ejemplo en el siguiente
\documentclass{article}
\usepackage{xparse}
\begin{document}
\ExplSyntaxOn
\DeclareDocumentCommand{\DeclareTest}{m}{%
%
\DeclareDocumentCommand{\csname test#1\endcsname}{}{This is a #1 test}
}
\ExplSyntaxOff
\DeclareTest{work}
\testwork
\end{document}
Me gustaría \testwork
ser un comando que evalúe a This is a work test
. Sin embargo, cuando hago esto aparece un "xparse/bad-arg-spec"
error y no estoy seguro de por qué.
Respuesta1
Como es el caso de \newcommand
,\DeclareDocumentCommand
los familiares están diseñados para tomar el mando.nombrecomo primer argumento. En la actualidad, si desea construir el nombre, debe utilizar\expandafter
\DeclareDocumentCommand\DeclareTest{m}{%
\expandafter\DeclareDocumentCommand\csname test#1\endcsname{}{This is a test}%
}
La razón por la que por el momento no hay una "variante" disponible que haga esto internamente es que los comandos "dinámicos" son problemáticos desde un punto de vista conceptual. La sintaxis de xparse
tiene como objetivo dejar claro dentro del código qué nuevos comandos se comienzan a crear para un documento y, por lo tanto, construirlos "sobre la marcha" no es realmente el objetivo. Sin embargo, creo que esta es todavía un área que necesita discusión basada en buenos ejemplos de casos de uso reales.