可変数のアイテムを持つ Itemize コマンド

可変数のアイテムを持つ Itemize コマンド

可変数の入力を与えることができ、それを項目別リストに配置するコマンドを作成したいと考えています。次のようなものです。

\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

最初のアプローチは、可変数の引数を受け取り、引数ごとに 1 行のテーブルを作成するマクロ必ずすべてのコメントを読んでください。特に、これはおそらくあまり良いマークアップスタイルではありません。

2 番目のアプローチは実装が簡単です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。:-)

関連情報