计算文本中后续部分的数量

计算文本中后续部分的数量

在简介部分写下我的文章剩余部分的结构,我想动态地获取手稿末尾还剩下多少部分。

如果我的文章包含总共几个部分,我需要一个命令\foo一旦在第一节的主体中调用,就会呈现为“五”等等。

答案1

下面存储计数器的section\label1在文档末尾显示为。然后使用直接形式检索它\ref,并使用fmtcount

在此处输入图片描述

\documentclass{article}

\usepackage{fmtcount,xfp}
\usepackage{lipsum}

\makeatletter
\AtEndDocument{%
  \def\@currentlabel{\inteval{\value{section}-1}}%
  \label{foolabel}%
}
\newcommand{\foo}{%
  \ifcsname r@foolabel\endcsname
    \expandafter\numberstringnum\expandafter{\expandafter\@firstoftwo\r@foolabel}%
  \else
    0%
  \fi
}
\makeatother

\begin{document}

\sloppy
\section{Introduction}
There are \foo{} remaining sections.

\section{First section}\lipsum[1-50]
\section{Second section}\lipsum[1-50]
\section{Third section}\lipsum[1-50]
\section{Fourth section}\lipsum[1-50]
\section{Fifth section}\lipsum[1-50]

\end{document}

因为它使用\label-\ref系统来提取最后一个分段号,所以每次改变 s 的数量时都需要编译两次\section(这样\ref错误才能解决)。


如果您正在处理未编号的部分并且也希望包括它们(通常是参考部分),那么您可以使用以下设置:

\documentclass{article}

\usepackage{fmtcount,xfp}
\usepackage{lipsum}

\newcounter{totsection}

\let\oldsection\section
\renewcommand{\section}{\stepcounter{totsection}\oldsection}

\makeatletter
\AtEndDocument{%
  \def\@currentlabel{\inteval{\value{totsection}-1}}%
  \label{foolabel}%
}


\newcommand{\foo}{%
  \ifcsname r@foolabel\endcsname
    \expandafter\numberstringnum\expandafter{\expandafter\@firstoftwo\r@foolabel}%
  \else
    0%
  \fi
}
\makeatother

\begin{document}

\sloppy
\section{Introduction}
There are \foo{} remaining sections.

\section{First section}\lipsum[1-50]
\section{Second section}\lipsum[1-50]
\section{Third section}\lipsum[1-50]
\section{Fourth section}\lipsum[1-50]
\section{Fifth section}\lipsum[1-50]
\section*{Sixth section}\lipsum[1-50]

\end{document}

它使用不同的计数器totsection来计算某个部分,无论该部分是否编号。

答案2

已编辑以自动计算文档中的节数。

如果您希望代码计算章节总数,该refcount包可以提供帮助。可以使用钩子\AtEndDocument设置标签以捕获最终章节编号。

\documentclass{article}
\usepackage{refcount}
\newcommand\sectionsleft{\the\numexpr 
  \getrefnumber{mylastsection}-\thesection\relax}
\AtEndDocument{\label{mylastsection}}
\begin{document}
\section{First}

My sections left are \sectionsleft.

\section{Second}

My sections left are \sectionsleft.

\section{Third}
\section{Fourth}
\section{Fifth}

My sections left are \sectionsleft.

\section{Last}

There are \sectionsleft{} sections remaining.
\end{document}

在此处输入图片描述

答案3

该包totcount只需最少的干预就能完成此操作。

\documentclass{article}
\usepackage{totcount}

\regtotcounter{section}

\begin{document}

This paper consists of \total{section} sections.

\section{A}
\section{B}
\section{C}
\section{D}
\section{E}
\section{F}

\end{document}

在此处输入图片描述

相关内容