根据我的灯光,以下代码应排版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 个项目。