Verhindern Sie die Erweiterung von Ganzzahlen bei Verwendung von \seq_item

Verhindern Sie die Erweiterung von Ganzzahlen bei Verwendung von \seq_item

Ich habe zwei Sequenzen: \l_words_seq„containing: { dans, [DP, la, maison, ]foc }“ und „ \l_glosses_seqcontaining: { in, the, house }“. Ich möchte \l_final_seq daraus eine weitere Sequenz erstellen, die die Elemente aus der Regex-Übereinstimmung an den entsprechenden Positionen \l_glosses_seqeinfügt . Das Ergebnis sollte „{ in, [DP, the, house, ]foc }“ sein.\l_words_seq^(\[(DP|NP)|\]\w* )

\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~ }

Aber mein Ergebnis ist

house [DP house house ]foc

Wie kann ich das beheben? Ich habe es versucht, \seq_put_right:Noaber es funktioniert nur, wenn ich die Ganzzahl anhänge und nicht das Element, das dieser Ganzzahl entspricht.

Antwort1

\seq_put_right:NeDie Lösung besteht darin, stattdessen (oder ) zu verwenden Nx, um das eingefügte Element vollständig zu erweitern, bevor es der Sequenz hinzugefügt wird.

Der oTyp führt eine einzelne Erweiterung durch, die nicht ausreicht, wenn Sie versuchen, ein Element aus einer Sequenz über einen Index abzurufen, der selbst in einer Variablen gespeichert ist.

Durch die Verwendung evon „type“ (oder x„type“) wird das Element einschließlich des Integer-Werts erweitert, wodurch Sie die erwarteten Ergebnisse erhalten.

\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}

Ich habe den letzten Teil durch \seq_use:Nndie Verwendung von Inline-Mapping ersetzt.


Alternativ können Sie verwenden, \seq_pop:NNum den Wert aus der Sequenz in eine Tokenliste zu kopieren. Dann funktioniert odie Typerweiterung (oder V, was gegenüber vorzuziehen ist o) gut, um die Tokenlistenvariable zu erweitern.

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

verwandte Informationen