使用 clist_map 以不同方式处理第一个或最后一个案例

使用 clist_map 以不同方式处理第一个或最后一个案例

我编写了这个宏来将以逗号分隔的对象列表转换为自定义分隔的对象列表:

\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\separators}{m}{%
  \clist_map_inline:nn{#1}{{##1}\ **\ }%
  }
\ExplSyntaxOff

\separators{a, b, c}显然收益

a ** b ** c **

代替

a ** b ** c

如何防止我的列表中的最后一项以与其他项相同的方式进行处理?

答案1

map函数旨在平等地处理所有条目。在这里,你实际上是使用a clist(将其插入到输出中)

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \separators { m }
  {
    \clist_set:Nn \l_tmpa_clist {#1}
    \clist_use:Nn \l_tmpa_clist { ~**~ }
  }
\ExplSyntaxOff
\begin{document}

\separators{a,b,c}

\end{document}

另请查看\clist_use:Nnnn是否需要在较长列表末尾采取不同的行为,以及当恰好有两个条目时。

相关内容