
Ich möchte eine Aufzählung erstellen, die bei mehreren Elementen auf eine bestimmte Art und Weise formatiert ist, bei einem einzelnen Element jedoch anders. Etwa so:
Eine Liste mit mehreren Elementen:
#1 Item1
#2 Item2
#3 Item3
Eine Liste mit einem einzelnen Element:
* SingleItem
Ich verwende derzeit enumitem
ein Paket zum Formatieren meiner Listen, daher wäre es schön, es zu verwenden, aber jede andere Lösung wäre willkommen.
Antwort1
Eine schnelle und einfache Testlösung, bei der eine Liste mit etoolbox
Makros durchlaufen und in einer speziellen enumerate
Umgebung freigegeben wird
Beschreibung:
\IntelligentEnumerate
ist ein Wrapper mit drei Argumenten:
- Das erste ist optional und enthält das Label und andere Einstellungen für das optionale Aufzählungsargument.
- Die erste enthält die Listenelemente als Komma-getrennte Liste (Pflichtfeld)
- Die dritte ist wieder optional und enthält die Optionen für das einzelne Element „Liste“.
\documentclass[11pt,a4paper]{article}
\usepackage{enumitem}
\usepackage{xparse}
\usepackage{etoolbox}
\def\myitemlist{}
\newcounter{somecounter}
\newcommand{\additemtolist}[1]{%
\stepcounter{somecounter}%
\listgadd{\myitemlist}{#1}%
}
\NewDocumentCommand{\IntelligentEnumerate}{+O{label={\#\arabic*}}+m+O{label={\textasteriskcentered}}}{%
\setcounter{somecounter}{0}
\forcsvlist{\additemtolist}{#2}%
\ifnumgreater{\value{somecounter}}{1}{%
\renewcommand*{\do}[1]{%
\item ##1
}
\begin{enumerate}[#1]
\dolistloop{\myitemlist}
\end{enumerate}
}{%
\begin{enumerate}[#3]
\item #2
\end{enumerate}
}%
\def\myitemlist{}% 'Clear' the list at the end
}
\begin{document}
\IntelligentEnumerate{First, Second, Third}
\IntelligentEnumerate[label={\Roman*}]{First, Second, Third}
\IntelligentEnumerate{This is a single Item}
\IntelligentEnumerate{This is a single Item}[label={$\int$}]
\end{document}