
我想做一個枚舉,如果它有多個項目,則以某種方式格式化,但如果它有一個項目,則以不同的方式格式化。像這樣的東西:
包含多個項目的清單:
#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}