在简介部分写下我的文章剩余部分的结构,我想动态地获取手稿末尾还剩下多少部分。
如果我的文章包含六总共几个部分,我需要一个命令\foo一旦在第一节的主体中调用,就会呈现为“五”等等。
答案1
下面存储计数器的section
值减\label
1在文档末尾显示为。然后使用直接形式检索它\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}