![\clist_map_inline:nn 中的逗号将值拆分到不需要的位置](https://linux22.com/image/396866/%5Cclist_map_inline%3Ann%20%E4%B8%AD%E7%9A%84%E9%80%97%E5%8F%B7%E5%B0%86%E5%80%BC%E6%8B%86%E5%88%86%E5%88%B0%E4%B8%8D%E9%9C%80%E8%A6%81%E7%9A%84%E4%BD%8D%E7%BD%AE.png)
我对 的工作原理很好奇\clist_map_inline:nn
。我有一个句子列表。这个列表没有固定的长度。有时,列表可能包含 2 个句子,或 10 个句子等。所以,我遇到了 ,\clist_map_inline:nn
这正是我想要的,但它会在逗号处拆分。例如,如果列表包含 {a,b,c},最终结果是
- A
- b
- C
然而,当你考虑这个例子时{To respond quickly and efficiently to all in-coming sales enquiries, by telephone, fax and email,Create Develop and maintain strong working relationship with existing and potential Customers}
,我希望输出是
- 通过电话、传真和电子邮件快速有效地回复所有销售咨询
- 与现有和潜在客户建立、发展并保持良好的工作关系
相反,我得到的输出是
- 快速有效地回应所有销售咨询
- 通过电话
- 传真和电子邮件
- 与现有和潜在客户建立、发展并保持良好的工作关系
显然该命令\clist_map_inline:nn
将句子拆分为每一个逗号。有什么方法可以获得所需的输出吗?
答案1
输入中的任何逗号都定义一个项目:如果“语法逗号”和“分隔逗号”处于同一括号级别,则无法区分它们。
除了支撑每个项目(这可能不太方便)之外,您还可以使用不同的方法,使用另一个分隔符。
\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \l_egregfors_chorelist_seq
\NewDocumentCommand{\chorelist}{m}
{
\seq_set_split:Nnn \l_egregfors_chorelist_seq { \\ } { #1 }
\begin{itemize}
\seq_map_inline:Nn \l_egregfors_chorelist_seq { \item ##1 }
\end{itemize}
}
\ExplSyntaxOff
现在输入
\chorelist{
To respond quickly and efficiently to all in-coming sales enquiries, by telephone, fax and email
\\
Create Develop and maintain strong working relationship with existing and potential Customers
}
将获得预期的输出。