一次使用和两次使用时显示不同的环境

一次使用和两次使用时显示不同的环境

我的问题可以归结为:

\documentclass[10pt,oneside]{article}
\usepackage{enumitem}

\newenvironment{mygroup}{
  \vspace{.15in}

  \textbf{\large MyGroup Heading}
}{
}

\newenvironment{mylist}[1]{
  \newcommand{\myitem}[1]{
    \item ##1:%
  }

  \vspace{.12in}

  \emph{\fontsize{11}{11}\selectfont#1}
  \begin{itemize}[noitemsep,nolistsep]
}{
  \end{itemize}
}

\begin{document}
  \begin{mygroup}
    \begin{mylist}{subheading 1}
      \myitem{item 1} item 1 content
      \myitem{item 2} item 2 content
    \end{mylist}
    \begin{mylist}{subheading 2}
      \myitem{another item} content
    \end{mylist}
  \end{mygroup}
\end{document}

结果

目前,无论mylista 中有多少个 s ,我都会显示副标题mygroup。如何才能使mylista 中只有两个或多个 s时才显示副标题mygroup,而如果只有一个 s ,则不显示其副标题?

答案1

这使用了我的cntperchap包,该包存储了每个章节级别的计数器总数,但也可以将其设置为另一个计数器。这里,设置mygroup为 tracklevel。

获取\GetStoredCounterValue{mylist}前一次运行的值并将其存储到cps@@tempstoragecounter计数器,然后可以使用 进行查询\ifnumgreater(来自etoolbox,但此包已由 加载cntperchap)。

(旁注:我必须\GetStoredCounterValue在下一个版本中更改文档和方法——到目前为止还不太方便。)


\documentclass[10pt,oneside]{article}
\usepackage{enumitem}

\newcounter{mygroup}
\usepackage[tracklevel=mygroup]{cntperchap}

\newcounter{mylist} % track the lists

\RegisterCounters{mylist} % prepare for tracking

\makeatletter

\newenvironment{mygroup}{%
  \vspace{.15in}
  \textbf{\large MyGroup Heading}
}{
}

\makeatother

\newenvironment{mylist}[1]{%
  \stepcounter{mylist}%
  \GetStoredCounterValue{mylist}%
  \newcommand{\myitem}[1]{%
    \item ##1:%
  }

  \vspace{.12in}

  \ifnumgreater{\value{cps@@tempcounterstorage}}{1}{%
    \emph{\fontsize{11}{11}\selectfont#1}
  }{}%

  \begin{itemize}[noitemsep,nolistsep]
  }{%
  \end{itemize}
}

\begin{document}
  \begin{mygroup}
    \begin{mylist}{subheading 1}
      \myitem{item 1} item 1 content
      \myitem{item 2} item 2 content
    \end{mylist}
    \begin{mylist}{subheading 2}
      \myitem{another item} content
    \end{mylist}
  \end{mygroup}

  \begin{mygroup}
   \begin{mylist}{subheading 1 which isn't displayed}
     \myitem{item 1} Just one list, part 1
     \myitem{item 2} Just one list, part 2
   \end{mylist}
 \end{mygroup}

\end{document}

在此处输入图片描述

答案2

在思考了 Christian 的回答并做了更多的谷歌搜索之后,我想出了一个使用该totcount包的解决方案:

\documentclass[10pt,oneside]{article}
\usepackage{enumitem}
\usepackage{totcount}

\newcounter{mygroupcount}

\newenvironment{mygroup}{
  \stepcounter{mygroupcount}
  \edef\mycount{mycount\alph{mygroupcount}}
  \expandafter\newtotcounter\expandafter{\mycount}
  \vspace{.15in}

  \textbf{\large MyGroup Heading}
}{
}

\newenvironment{mylist}[1]{
  \stepcounter{\mycount}
  \newcommand{\myitem}[1]{
    \item ##1:%
  }

  \vspace{.12in}

  \ifnum 1<\totvalue{\mycount}
    \emph{\fontsize{11}{11}\selectfont#1}
  \fi
  \begin{itemize}[noitemsep,nolistsep]
}{
  \end{itemize}
}

\begin{document}
  \begin{mygroup}
    \begin{mylist}{subheading 1}
      \myitem{item 1} item 1 content
      \myitem{item 2} item 2 content
    \end{mylist}
    \begin{mylist}{subheading 2}
      \myitem{another item} content
    \end{mylist}
  \end{mygroup}
  \begin{mygroup}
    \begin{mylist}{subheading 1 - not shown}
      \myitem{item 1} item 1 content
      \myitem{item 2} item 2 content
    \end{mylist}
  \end{mygroup}
\end{document}

由于 Christian 的解决方案更简单一些,我更愿意使用它,但对于较旧的 TeX 发行版,这个方法是可行的。

相关内容