expl3: clist に追加するときにすべての項目を 1 回展開します

expl3: clist に追加するときにすべての項目を 1 回展開します

clist にアイテムを追加し、すべてのアイテムを 1 回ずつ展開したいと考えています。しかし、(私の目には) 自然な方法は\clist_set:No期待どおりに機能せず、最初のアイテムのみが展開されました。

\documentclass{article}
\usepackage{expl3}

\begin{document}
\ExplSyntaxOn
\def\testa{blub}
\def\testb{blabla}
\clist_set:No\mylist{\testa,\testb}
\clist_show:N\mylist
\ExplSyntaxOff
\end{document}

 The comma list \mylist contains the items (without outer braces):
>  {blub}
>  {\testb }.

では、これを行う正しい方法は何でしょうか? 本当に何らかのループを使用する必要がありますか?

答え1

このoバリアントは、中括弧の後の最初のトークンのみを展開します。

項目を 1 つずつ追加する必要があります。

\clist_new:N \l_ulrike_mylist_clist

\clist_map_inline:nn { \testa , \testb }
 {
  \clist_put_right:No \l_ulrike_mylist_clist { #1 }
 }

もちろん、これに対して独自の構文糖を構築することもできます。

\cs_new_protected:Nn \ulrike_clist_set_exp:Nn
 {
  \clist_clear:N #1
  \clist_map_inline:nn { #2 }
   {
    \clist_put_right:No #1 { ##1 }
   }
 }

関連情報