Latex3 equivalente csname endcsname

Latex3 equivalente csname endcsname

Me gustaría saber cómo crear macros dinámicas con nombre (en un bucle) en Latex3. Todo está bien en LaTeX2e.

Busco algo equivalente a ese código con expl3

\stepcounter{N}
\expandafter\def\csname toto@num\Alph{N}\endcsname{#1}

Miré en el documento expl3, señalan \cs:w \cs_endpero no sé cómo hacer que funcione.

gracias de antemano

Respuesta1

Uno de los puntos principales de expl3 es liberarlo de \expandafterconstrucciones complicadas \csname. En reemplazo de esto, le ofrece modificadores de argumentos que manipulan los argumentos antes de pasarlos a la función base. Como dijo @egreg, el modificador para la construcción de csname es c. Si usa esto en su código (en lugar de N) siempre que desee que se use su nombre cs construido.

Por ejemplo, en 2e harías algo como

% setup
\def\foo#1{ <do something with #1> }
\expandafter\def\csname toto@num\Alph{N}\endcsname{ <whatever> }
% usage
\expandafter \foo \csname toto@num\Alph{N}\endcsname

o peor)

%setup
\def\foobar#1#2{ <do something with #1 and #2> }
\expandafter\def\csname toto@num\Alph{N}\endcsname{ <whatever> }
\expandafter\def\csname toto@num\Roman{N}\endcsname{ <whatever else>}
%usage
\expandafter \foobar \csname toto@num\Alph{N}\expandafter\endcsname
                     \csname toto@num\Roman{N}\endcsname

mientras que en expl3 eso se reduce a

% base defs

\cs_new_protected:cpn { toto_num_ \Alph{N} } { <whatever> }
\cs_new_protected:cpn { toto_num_ \Roman{N} } { <whatever else> }

\cs_new:Npn \foo:N #1      { <do something with #1> }
\cs_new:Npn \foobar:N #1#2 { <do something with #1 + #2> }

% command variants as needed ..

\cs_generate_variant:Nn \foo:N { c }
\cs_generate_variant:Nn \foobar:NN { cc }

% application ...

\foo:c { toto_num_ \Alph{N} } 
\foobar:cc { toto_num_ \Alph{N} } { toto_num_ \Roman{N} } 

Entonces, la configuración en 2e es quizás un poco más corta, pero el uso es complicado y difícil de leer, mientras que en expl3 el uso es claro y simple.

Los comandos \cs:wy \cs_endson los comandos TeX de bajo nivel que hacen que todo esto suceda (es decir \csname, ... \endcnsameen 2e), por lo que junto con \exp_after:wNellos podrías usarlos para programar 1-2-1 en la forma 2e, pero el punto de expl3 es realmente que Ya no necesitan hacer esto, por lo que solo están ahí para configurar el mecanismo internamente.

Respuesta2

Puedes usar la cvariante:

\cs_new_protected:cpn { toto_num_ \Alph{N} } { <whatever> }

información relacionada