我想进行枚举,如果枚举包含多个项,则采用某种格式,如果枚举包含单个项,则采用另一种格式。如下所示:
包含多个项目的列表:
#1 Item1
#2 Item2
#3 Item3
包含单个项目的列表:
* SingleItem
我目前正在使用enumitem
包来格式化我的列表,因此使用它会很好,但任何其他解决方案都会受到欢迎。
答案1
一个快速而粗糙的试验解决方案,使用宏循环遍历列表etoolbox
并将其发布到专门的enumerate
环境
描述:
\IntelligentEnumerate
是一个具有三个参数的包装器:
- 第一个是可选的,包含枚举可选参数的标签和其他设置
- 第一个包含列表项,以逗号分隔的列表(强制)
- 第三个也是可选的,包含单个项目“列表”的选项
\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}