detener la expansión del número entero cuando se usa \seq_item

detener la expansión del número entero cuando se usa \seq_item

Tengo dos secuencias: \l_words_seqque contiene: { dans, [DP, la, maison, ]foc } y que \l_glosses_seqcontiene: { in, the, house }. Me gustaría crear otra secuencia \l_final_seq que \l_glosses_seqinserte los elementos que \l_words_seqcoinciden con la expresión regular ^(\[(DP|NP)|\]\w* )en las posiciones correspondientes. El resultado debería ser { en, [DP, la, casa, ]foc }

\int_new:N \l_counter_glosses_int

\seq_const_from_clist:Nn \l_words_seq {dans, [DP, la, maison, ]foc}
\seq_const_from_clist:Nn \l_glosses_seq {in, the, house}

\seq_new:N \l_final_seq

\int_zero:N \l_counter_glosses_int

\seq_map_inline:Nn \l_words_seq  {
    \regex_match:nnTF {^(\[(DP|NP)|\]\w* )} { #1 } 
    { \seq_put_right:Nn \l_final_seq {#1} }             
    {
        \int_incr:N  \l_counter_glosses_int 
        \seq_put_right:No \l_final_seq { \seq_item:Nn  \l_glosses_seq  {\int_use:N \l_counter_glosses_int}} 
    }
}

\seq_map_inline:Nn \l_final_seq  {  #1~ }

Pero mi resultado es

house [DP house house ]foc

¿Cómo podría solucionar esto? Lo intenté \seq_put_right:Nopero solo funciona cuando agrego el número entero y no el elemento correspondiente a ese número entero.

Respuesta1

La solución es usar \seq_put_right:Ne(o Nx) en su lugar para expandir completamente el elemento insertado antes de agregarlo a la secuencia.

El otipo realiza una única expansión, lo cual no es suficiente cuando intentas obtener un elemento de una secuencia mediante un índice que a su vez está almacenado en una variable.

El uso ede tipo (o xtipo) expandirá el elemento, incluido el valor entero, lo que le dará los resultados esperados.

\documentclass{article}

\begin{document}
\ExplSyntaxOn
\int_new:N \l_mymodule_glosses_int

\seq_const_from_clist:Nn \l_mymodule_words_seq {dans, [DP, la, maison, ]foc}
\seq_const_from_clist:Nn \l_mymodule_glosses_seq {in, the, house}

\seq_new:N \l_mymodule_final_seq

\int_zero:N \l_mymodule_glosses_int

\seq_map_inline:Nn \l_mymodule_words_seq  {
    \regex_match:nnTF {^(\[(DP|NP)|\]\w*)} { #1 } 
    { \seq_put_right:Nn \l_mymodule_final_seq {#1} }             
    {
        \int_incr:N  \l_mymodule_glosses_int 
        \seq_put_right:Ne \l_mymodule_final_seq { \seq_item:Nn  \l_mymodule_glosses_seq  {\l_mymodule_glosses_int}}
    }
}

\seq_use:Nn \l_mymodule_final_seq { ~ }
\ExplSyntaxOff
\end{document}

Reemplacé la última parte en \seq_use:Nnlugar de usar mapeo en línea.


Alternativamente, puede utilizar \seq_pop:NNpara extraer el valor de la secuencia a una lista de tokens. Luego, ola expansión de tipo (o V, que se prefiere a o) funcionará bien para expandir la variable de la lista de tokens.

\seq_pop:NN \l_mymodule_glosses_seq \l_tmpa_tl
\seq_put_right:NV \l_mymodule_final_seq \l_tmpa_tl

información relacionada