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}
\mystrangeitemize
könnte auch so umgesetzt werden:
\NewDocumentCommand \mystrangeitemize { m }
{
\begin{itemize}
\ryanj_output_items:n { {}, #1 }
\end{itemize}
}
(das hinzugefügte leere Element bewirkt die \item
Ausgabe des ersten Befehls).
Wenn Sie in beiden Fällen Elemente deklarieren möchten, die mehrere Absätze enthalten ( \par
Token müssen dann im Argument von zulässig sein \mystrangeitemize
), ersetzen Sie es m
durch +m
in \NewDocumentCommand \mystrangeitemize { m }
.
etoolbox
's \docsvlist
können auch für diesen Zweck verwendet werden, und möglicherweise sehen Sie auch, dass jemand eine Lösung basierend auf postet listofitems
. :-)