Itemize-Befehl mit variabler Anzahl von Elementen

Itemize-Befehl mit variabler Anzahl von Elementen

Ich möchte einen Befehl erstellen, mit dem ich eine variable Anzahl von Eingaben vornehmen kann und der diese in eine detaillierte Liste einfügt. So etwas wie

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

würde produzieren

Während so etwas wie

\myitemize{First item}{Second item}

würde produzieren

Ich bin auch nicht wählerisch, was die Formatierung angeht. Es könnte so etwas sein wie

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

Ich möchte das einfach nicht manuell ändern müssen, \begin{itemize} \end{itemize}um eine weitere Zeile und ein weiteres einzufügen \item. Danke!

Antwort1

Der erste Ansatz wird umgesetzt inMakro, das eine variable Anzahl von Argumenten annimmt und eine Tabelle mit einer Zeile pro Argument erstellt. Lesen Sie unbedingt alle Kommentare dort. Insbesondere ist dies möglicherweisekein toller Markup-Stil.

Der zweite Ansatz lässt sich leicht implementieren expl3(Sie müssen nicht einmal die Anzahl der Elemente angeben), beispielsweise wie folgt:

\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}

\mystrangeitemizekönnte auch so umgesetzt werden:

\NewDocumentCommand \mystrangeitemize { m }
  {
    \begin{itemize}
    \ryanj_output_items:n { {}, #1 }
    \end{itemize}
  }

(das hinzugefügte leere Element bewirkt die \itemAusgabe des ersten Befehls).

Wenn Sie in beiden Fällen Elemente deklarieren möchten, die mehrere Absätze enthalten ( \parToken müssen dann im Argument von zulässig sein \mystrangeitemize), ersetzen Sie es mdurch +min \NewDocumentCommand \mystrangeitemize { m }.

Bildschirmfoto

etoolbox's \docsvlistkönnen auch für diesen Zweck verwendet werden, und möglicherweise sehen Sie auch, dass jemand eine Lösung basierend auf postet listofitems. :-)

verwandte Informationen