
複数の項目がある場合はある方法でフォーマットされ、単一の項目がある場合は別の方法でフォーマットされる列挙を実行したいと思います。次のようになります。
複数の項目を含むリスト:
#1 Item1
#2 Item2
#3 Item3
1 つの項目を含むリスト:
* SingleItem
現在、enumitem
リストをフォーマットするためにパッケージを使用しているので、それを使用すると便利ですが、他の解決策があれば歓迎します。
答え1
etoolbox
マクロを使用してリストをループし、それを特殊なenumerate
環境にリリースするという、手っ取り早い試行的な解決策
説明:
\IntelligentEnumerate
3 つの引数を持つラッパーです。
- 最初のものはオプションで、enumerateオプション引数のラベルとその他の設定が含まれています。
- 最初のリストには、カンマ区切りのリスト項目が含まれます(必須)
- 3番目もオプションで、単一項目「リスト」のオプションが含まれています。
\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}