获取枚举中的元素数量

获取枚举中的元素数量

假设我有以下代码:

\documentclass{article}
\begin{document}
We have totally 7 columns, describing the user:
\begin{enumerate}
\item ID --- users.name
\item Forename --- users\_profiles.first\_name
\item Surname --- users\_profiles.last\_name
\item Email --- users.mail
\item Primary Service --- services.name
\item Start date --- FROM\_UNIXTIME(users.created)
\item Employment Status --- users\_profiles.employment\_status
\end{enumerate}
\end{document}

制作此文件:

在此处输入图片描述

是否可以根据列表中元素的数量自动设置值 7?问题是,它位于列表之前。

答案1

只需在最后一项后放置一个标签并在文中引用该标签:

\documentclass{article}
\begin{document}
We have \ref{last} columns, describing the user:
\begin{enumerate}
\item ID --- users.name
\item Forename --- users\_profiles.first\_name
\item Surname --- users\_profiles.last\_name
\item Email --- users.mail
\item Primary Service --- services.name
\item Start date --- FROM\_UNIXTIME(users.created)
\item Employment Status --- users\_profiles.employment\_status \label{last}
\end{enumerate}
\end{document}

答案2

\label-机制\ref是此类应用程序的必由之路;在这种情况下,需要进行一些调整以确保我们获得一个简单的数字。

我将介绍两种可能性。在这两种情况下,我都使用\numberstringnumfromfmtcount以文字形式显示数字,这是更好的风格。

推荐形式

我们使用一个refenumerate具有标签(任意字符串)作为参数的环境,用作的参数\getenumcount,产生数字。

\documentclass{article}

\usepackage{xparse,fmtcount,refcount}

\makeatletter
\NewDocumentEnvironment{refenumerate}{m}
 {\begin{enumerate}}
 {\edef\@currentlabel{\arabic{\@enumctr}}\label{#1}\end{enumerate}}
\makeatother
\newcommand{\getenumcount}[1]{\numberstringnum{\getrefnumber{#1}}}

\begin{document}

\section*{Recommended form}

We have \getenumcount{profile} columns, describing the user:
\begin{refenumerate}{profile}
\item ID --- users.name
\item Forename --- users\_profiles.first\_name
\item Surname --- users\_profiles.last\_name
\item Email --- users.mail
\item Primary Service --- services.name
\item Start date --- FROM\_UNIXTIME(users.created)
\item Employment Status --- users\_profiles.employment\_status
\end{refenumerate}

优点

refenumerate环境可以在任何嵌套级别使用

缺点

它需要运行两次 LaTeX。这实际上不是什么大问题,因为一次运行就足够了的情况很少见(想想目录或任何交叉引用)。

在此处输入图片描述

不推荐的形式

我们使用一个getreference环境,将从段落开头到enumerate我们想要计算项目的环境的所有代码都包含在内。

\documentclass{article}

\usepackage{fmtcount,environ}
\makeatletter
\NewEnviron{getreference}
 {\let\latex@label\label\let\label\@gobble\global\let\printnumber\relax
  \setbox0=\vbox{\@tempswafalse\if@nobreak\@tempswatrue\fi
    \BODY\xdef\printnumber{\noexpand\numberstringnum{\number\value{enumi}}}
    \if@tempswa\aftergroup\@afterheading\fi
  }%
  \let\label\latex@label
  \BODY}
\makeatother

\begin{document}

\section*{Not recommended form}

\begin{getreference}
We have \printnumber{} columns, describing the user:
\begin{enumerate}
\item ID --- users.name
\item Forename --- users\_profiles.first\_name
\item Surname --- users\_profiles.last\_name
\item Email --- users.mail
\item Primary Service --- services.name
\item Start date --- FROM\_UNIXTIME(users.created)
\item Employment Status --- users\_profiles.employment\_status
\end{enumerate}
\end{getreference}
\end{document}

优点

需要运行一次 LaTeX。

缺点

只有一个级别可以计算,确切地说是最外层的enumerate环境。

在此处输入图片描述

相关内容