答案1
第一种方法是在宏采用可变数量的参数,并创建一个表,每个参数占一行。请务必阅读那里的所有评论。特别是,这可能是不是一个很好的标记样式。
第二种方法很容易实现expl3
(您甚至不需要指定元素的数量),例如这样:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \l__ryanj_tmp_seq
\cs_new_protected:Npn \ryanj_output_items:n #1
{
\seq_set_from_clist:Nn \l__ryanj_tmp_seq {#1}
\seq_use:Nn \l__ryanj_tmp_seq { \item }
}
\NewDocumentCommand \mystrangeitemize { m }
{
\begin{itemize}
\item
\ryanj_output_items:n {#1}
\end{itemize}
}
\ExplSyntaxOff
\begin{document}
\mystrangeitemize{First item, Second item, Third item,
{Item, containing, commas.}}
\end{document}
\mystrangeitemize
也可以这样实现:
\NewDocumentCommand \mystrangeitemize { m }
{
\begin{itemize}
\ryanj_output_items:n { {}, #1 }
\end{itemize}
}
(添加的空项导致\item
输出第一个命令)。
在这两种情况下,如果您希望能够声明包含多个段落的项目(\par
标记在的参数中必须是可以接受的\mystrangeitemize
),请m
用+m
替换\NewDocumentCommand \mystrangeitemize { m }
。
etoolbox
也可以\docsvlist
用于此目的,并且您还可能会看到有人发布基于的解决方案listofitems
。:-)