
Quiero hacer una enumeración que tenga formato de una manera si tiene varios elementos, pero de una manera diferente si tiene un solo elemento. Algo como esto:
Una lista con varios elementos:
#1 Item1
#2 Item2
#3 Item3
Una lista con un solo elemento:
* SingleItem
Actualmente estoy usando enumitem
el paquete para formatear mis listas, por lo que sería bueno usarlo, pero cualquier otra solución sería bienvenida.
Respuesta1
Una solución de prueba rápida y sucia, que recorre una lista utilizando etoolbox
macros y la libera en un enumerate
entorno especializado.
Descripción:
\IntelligentEnumerate
es un contenedor con tres argumentos:
- El primero es opcional y contiene la etiqueta y otras configuraciones para el argumento opcional de enumeración.
- El primero contiene los elementos de la lista como una lista separada por comas (obligatorio)
- El tercero es opcional nuevamente y contiene las opciones para la 'lista' de un solo elemento.
\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}