具有可變數量項目的逐項列出命令

具有可變數量項目的逐項列出命令

我正在創建一個命令,我可以提供可變數量的輸入,並將它們放入逐項列表中。就像是

\myitemize{First item}{Second item}{Third item}

會產生

雖然像

\myitemize{First item}{Second item}

會產生

我對格式也不挑剔。它可能是這樣的

\myitemize[First item, second item, third item]{3}

我只是不想手動更改\begin{itemize} \end{itemize}以包含另一行和另一行\item。謝謝!

答案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+min \NewDocumentCommand \mystrangeitemize { m }

螢幕截圖

etoolbox也可以\docsvlist用於此目的,並且您也可能會看到有人發布基於 的解決方案listofitems。 :-)

相關內容