
Ich habe zwei Sequenzen: \l_words_seq
„containing: { dans, [DP, la, maison, ]foc }“ und „
\l_glosses_seq
containing: { 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_seq
einfü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:No
aber es funktioniert nur, wenn ich die Ganzzahl anhänge und nicht das Element, das dieser Ganzzahl entspricht.
Antwort1
\seq_put_right:Ne
Die 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 o
Typ 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 e
von „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:Nn
die Verwendung von Inline-Mapping ersetzt.
Alternativ können Sie verwenden, \seq_pop:NN
um den Wert aus der Sequenz in eine Tokenliste zu kopieren. Dann funktioniert o
die 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