我的问题可以归结为:
\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}
目前,无论mylist
a 中有多少个 s ,我都会显示副标题mygroup
。如何才能使mylist
a 中只有两个或多个 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 发行版,这个方法是可行的。