这也适用于非十进制标签

这也适用于非十进制标签

我想在文本中使用计数器,但只能在稍后设置。如下所示:

\newcounter{howmany}
There are \thehowmany items in this list:
\begin{enumerate}
  \item one
  \item two
  \item three
\setcounter{howmany}{\theenumi}
\end{enumerate}

它应该显示“此列表中有 3 个项目”。但那不起作用。好吧,当然。我需要使用\refstepcounter来获得保存功能。但\refstepcounter只能将其增加一,而且似乎没有\refsetcounter;) 有什么建议吗?枚举结束后循环\refstepcounters?重新定义\item为包含\refstepcounter?一定有更简单的方法,不是吗?

谢谢!

答案1

欢迎来到 TeX.SE。这是该包的工作totcount。您需要编译两次,因为totcount它使用该.aux文件来存储文档中分配给计数器的最后一个值。

请注意,在调用中我使用了\value{enumi}而不是 ,以防万一它没有扩展为整数表示(可能会使用或格式化等)。\thenumi\setcounter\thenumi\thenumi\roman\alph

\documentclass{article}
\usepackage{totcount}

\begin{document}

\newtotcounter{howmany}
There are \total{howmany}~items in this list:
\begin{enumerate}
  \item one
  \item two
  \item three
\setcounter{howmany}{\value{enumi}}
\end{enumerate}

\end{document}

在此处输入图片描述

如果已存在\newcounter针对所讨论的计数器的命令并且您不想或无法将此命令更改为调用,则可以使用包\newtotcounter注册该计数器(如果计数器由包定义,这将很有用)。totcount\regtotcounter{countername}

这也适用于非十进制标签

如果您使用非十进制标签格式,此技术同样有效:

\documentclass{article}
\usepackage{totcount}

\renewcommand{\theenumi}{\alph{enumi}}

\begin{document}

\newtotcounter{howmany}
There are \total{howmany}~items in this list; their labels are
\ref{first-item}, \ref{second-item}, and \ref{third-item}.
\begin{enumerate}
  \item \label{first-item}one
  \item \label{second-item}two
  \item \label{third-item}three
\setcounter{howmany}{\value{enumi}}
\end{enumerate}

\end{document}

在此处输入图片描述

答案2

您可以将列表包装在环境中进行计数:

\documentclass{article}

\makeatletter
\newenvironment{countitems}[1]
 {% #1 is the label for referring to the count
  \def\countitems@label{#1}%
 }
 {%
  \edef\@currentlabel{\arabic{enum\romannumeral\numexpr\@enumdepth+1}}%
  \label{\countitems@label}%
  \ignorespacesafterend
 }
\makeatother

\begin{document}

The following list has \ref{firstlist} items
\begin{countitems}{firstlist}
\begin{enumerate}
\item one
\item two
\item three
  \begin{countitems}{innerlist}
  \begin{enumerate}
  \item A
  \item B
  \end{enumerate}
  \end{countitems}
\end{enumerate}
\end{countitems}
The inner list has \ref{innerlist} items.

\end{document}

在此处输入图片描述

或者,您可以在相关命令后使用\end{enumerate}

\documentclass{article}

\makeatletter
\newcommand{\countitems}[1]{%
  \edef\@currentlabel{\arabic{enum\romannumeral\numexpr\@enumdepth+1}}%
  \label{#1}%
  \ignorespaces
 }
\makeatother

\begin{document}

The following list has \ref{firstlist} items
\begin{enumerate}
\item one
\item two
\item three
  \begin{enumerate}
  \item A
  \item B
  \end{enumerate}\countitems{innerlist}
\end{enumerate}\countitems{firstlist}
The inner list has \ref{innerlist} items.

\end{document}

答案3

只是复制上面评论中给出的@cgnieder 的答案,以供参考。请参阅上面评论中的讨论以了解优缺点,但这肯定是一种简单的可能性:

There are \ref{countforme} items in this list:
\begin{enumerate}
  \item one
  \item two
  \item \label{countforme} three
\end{enumerate}

相关内容