expl3 listas de propiedades y expansión

expl3 listas de propiedades y expansión

Tratando de mantener esto simple. Teniendo en cuenta lo siguiente, ¿qué hay de malo en el código comentado (desafortunadamente ninguno funciona) y cuál es una forma alternativa de hacerlo? "Eso" es acceder a una lista de propiedades a través de una clave que debe expandirse.

\documentclass{article}
\usepackage{expl3}
\begin{document}

\ExplSyntaxOn


\tl_new:N \templist
\prop_new:N \tablestart
    \prop_put:Nnn \tablestart {u}{tablestart 1}
    \prop_put:Nnn \tablestart {u}{tablestart 2}
    \prop_put:Nnn \tablestart {u}{tablestart 3}
\tl_new:N \tablebody
\seq_new:N \entryuvw
    \seq_put_right:Nn \entryuvw {u}
    \seq_put_right:Nn \entryuvw {v}
    \seq_put_right:Nn \entryuvw {w}

\cs_new_protected:Nn \make_entry:n {
    \int_step_inline:nnnn { 1 } { 1 } { 3 } {
        \tl_set:Nx \templist {\seq_item:Nn \entryuvw {##1}}
        \templist
        %\prop_get:NxN \tablestart {\tl_use:N \templist} \tablebody
        %\prop_get:NVN \tablestart \templist \tablebody
    }
    \tablebody
}

\make_entry:n {}

\ExplSyntaxOff

needs an output line
\end{document}

Respuesta1

Deberías usar

\prop_get:NVN \tablestart \templist \tablebody

que es equivalente a

\prop_get:NnN \tablestart {<contents of \templist>} \tablebody

Me temo que la denominación de las variables es incorrecta: respete las expl3convenciones a este respecto.

\documentclass{article}
\usepackage{expl3,xparse}

\ExplSyntaxOn

\tl_new:N \l_bob_templist_tl
\tl_new:N \l_bob_tablebody_tl
\prop_new:N \l_bob_tablestart_prop
\seq_new:N \l_bob_entryuvw_seq

\prop_put:Nnn \l_bob_tablestart_prop {u}{tablestart 1}
\prop_put:Nnn \l_bob_tablestart_prop {v}{tablestart 2}
\prop_put:Nnn \l_bob_tablestart_prop {w}{tablestart 3}

\seq_put_right:Nn \l_bob_entryuvw_seq {u}
\seq_put_right:Nn \l_bob_entryuvw_seq {v}
\seq_put_right:Nn \l_bob_entryuvw_seq {w}

\cs_new_protected:Nn \make_entry:
 {
  \int_step_inline:nnnn { 1 } { 1 } { 3 }
   {
    \tl_set:Nx \l_bob_templist_tl {\seq_item:Nn \l_bob_entryuvw_seq {##1}}
    \l_bob_templist_tl
    \prop_get:NVN \l_bob_tablestart_prop \l_bob_templist_tl \l_bob_tablebody_tl
    \l_bob_tablebody_tl
   }
}

\NewDocumentCommand{\makeentry}{}{\make_entry:}

\ExplSyntaxOff
\begin{document}

\makeentry

\end{document}

Creé la macro para imprimir el contenido de las dos variables de la lista de tokens para verificar que el resultado sea el esperado.

ingrese la descripción de la imagen aquí

información relacionada