expl3:新增到 clist 時將每個專案展開一次

expl3:新增到 clist 時將每個專案展開一次

我想將項目新增到清單中並將每個項目展開一次。但(在我看來)自然\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變體僅擴展大括號後的第一個標記。

您必須一項一項地新增項目:

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

相關內容