\seq_item 使用時に整数の拡張を停止します

\seq_item 使用時に整数の拡張を停止します

2 つのシーケンスがあります\l_words_seq: { dans, [DP, la, maison, ]foc } と { in, the, house } です。正規表現に一致する項目を対応する位置に挿入する別のシーケンスを作成したい と\l_glosses_seq思います。結果は { in, [DP, the, house, ]foc } になります。\l_final_seq\l_glosses_seq\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~ }

しかし私の結果は

house [DP house house ]foc

これを修正するにはどうすればよいでしょうか? 試してみました\seq_put_right:Noが、整数を追加した場合にのみ機能し、その整数に対応する項目を追加した場合は機能しません。

答え1

解決策としては、代わりに\seq_put_right:Ne(またはNx) を使用して、挿入された項目をシーケンスに追加する前に完全に展開します。

このo型は単一の展開を実行しますが、変数に格納されているインデックスによってシーケンスから項目を取得しようとする場合には、これでは不十分です。

etype (またはtype)を使用するとx、整数値を含む項目が拡張され、期待どおりの結果が得られます。

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

インライン マッピングを使用する代わりに、最後の部分を に置き換えました\seq_use:Nn


あるいは、 を使用して、\seq_pop:NNシーケンスからトークン リストに値をポップすることもできます。その後、o型拡張 (またはV、 よりも推奨されるo) を使用すると、トークン リスト変数を拡張できます。

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

関連情報