答案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
in \NewDocumentCommand \mystrangeitemize { m }
。
etoolbox
也可以\docsvlist
用於此目的,並且您也可能會看到有人發布基於 的解決方案listofitems
。 :-)