列挙に項目が 1 つだけある場合のみ、列挙を異なる方法でフォーマットするにはどうすればよいですか?

列挙に項目が 1 つだけある場合のみ、列挙を異なる方法でフォーマットするにはどうすればよいですか?

複数の項目がある場合はある方法でフォーマットされ、単一の項目がある場合は別の方法でフォーマットされる列挙を実行したいと思います。次のようになります。

複数の項目を含むリスト:

#1 Item1
#2 Item2
#3 Item3

1 つの項目を含むリスト:

* SingleItem

現在、enumitemリストをフォーマットするためにパッケージを使用しているので、それを使用すると便利ですが、他の解決策があれば歓迎します。

答え1

etoolboxマクロを使用してリストをループし、それを特殊なenumerate環境にリリースするという、手っ取り早い試行的な解決策

説明:

\IntelligentEnumerate3 つの引数を持つラッパーです。

  1. 最初のものはオプションで、enumerateオプション引数のラベルとその他の設定が含まれています。
  2. 最初のリストには、カンマ区切りのリスト項目が含まれます(必須)
  3. 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}

ここに画像の説明を入力してください

関連情報