我如何将 expl3 clist 中的项目视为序列?

我如何将 expl3 clist 中的项目视为序列?

根据我的灯光,以下代码应排版212。但是,我的灯光显然偏暗,因为我实际上得到的是111。我该如何更改代码以使其按预期工作?

\documentclass{article}
\usepackage{xparse}
\begin{document}
\ExplSyntaxOn
\NewDocumentCommand \mylist {m}
{
  \clist_map_inline:nn { #1 }
  {
    \seq_set_split:Nnn \l_tmpa_seq { : } { ##1 }
    \seq_count:N \l_tmpa_seq
  }
}
\ExplSyntaxOff
\mylist{tikz:something,somethingelse,tikz:thirdthing}
\end{document}

这样做的目的是处理一系列可能具有不同选项的图像。例如,

\mylist{tikz:first-tikz-input,{graphics={width=.2\textwidth},rotate=30}:example-image-a,tikz:second-tikz-input}

我尝试过使用\clist_map_variable:而不是\clist_map_inline:。我也尝试过生成\seq_set_split:Nno\seq_set_split:Nnx,但无论我如何尝试,项目总是顽固地拒绝在分隔符处拆分:

我可以使用 expl3 将序列存储在序列中吗表明这可能无法直接实现(如果在逗号分隔列表中嵌套序列与在序列中嵌套序列类似)。但是,文档中的描述表明现在应该可以嵌套它们,所以我不确定这些答案是否是最新的。

答案1

这是一个粗略的旁路,生成一个\seq_set_split:Nnn带有NVn明确用途的变体V,作为分隔符的值扩展\c_colon_str,以便强制:在那里使用文字。

\documentclass{article}
\usepackage{xparse}
\begin{document}
\ExplSyntaxOn

\cs_generate_variant:Nn \seq_set_split:Nnn {NVn,cVn}
\NewDocumentCommand \mylist {m}
{
  \clist_map_inline:nn {#1} {
    \seq_set_split:NVn \l_tmpa_seq { \c_colon_str } { ##1 }
    \seq_count:N \l_tmpa_seq
  }
}
\ExplSyntaxOff
\mylist{tikz:something,somethingelse,tikz:thirdthing}
\end{document}

输出就212在那里,即第一个有 2 个项目,第二个有 1 个项目,第三个“seq”有 2 个项目。

相关内容