impedir que o número inteiro se expanda ao usar \seq_item

impedir que o número inteiro se expanda ao usar \seq_item

Tenho duas sequências: \l_words_seqcontendo: { dans, [DP, la, maison, ]foc } e \l_glosses_seqcontendo: { in, the, house }. Gostaria de criar outra sequência \l_final_seq que \l_glosses_seqinsira os itens \l_words_seqcorrespondentes à regex ^(\[(DP|NP)|\]\w* )nas posições correspondentes. O resultado deve ser {in, [DP, the, house, ]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~ }

Mas meu resultado é

house [DP house house ]foc

Como eu poderia consertar isso? Tentei \seq_put_right:No, mas só funciona quando adiciono o número inteiro e não o item correspondente a esse número inteiro.

Responder1

A solução é usar \seq_put_right:Ne(ou Nx), para expandir totalmente o item inserido antes de adicioná-lo à sequência.

O otipo executa uma única expansão, o que não é suficiente quando você está tentando obter um item de uma sequência por um índice que é armazenado em uma variável.

Usar etype (ou xtype) expandirá o item, incluindo o valor inteiro, o que fornecerá os 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}

Substituí a última parte em \seq_use:Nnvez de usar o mapeamento embutido.


Alternativamente, você pode usar \seq_pop:NNpara colocar o valor da sequência em uma lista de tokens. Então, odigite expansion (ou V, que é preferível a o) funcionará bem para expandir a variável da lista de tokens.

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

informação relacionada