使用 setcounter{page}{1} 时如何计算文档的总页数?

使用 setcounter{page}{1} 时如何计算文档的总页数?

在使用时如何计算总页数setcounter{page}{1}并修复目录?

在此处输入图片描述

\documentclass[12pt,a4paper,oneside]{book}
\usepackage{lipsum}
\begin{document}
    \tableofcontents
    
    \section{AAA}
    \lipsum[1-10]
    
    \newpage
    \section{BBB}
    \setcounter{page}{1}
    \lipsum[3-10]
    \newpage
    \section{CCC}
    \setcounter{page}{1}
    \lipsum[3-10]
\end{document}

答案1

您可以使用所谓的绝对目录中内容的页码。下面的代码更新\addcontentsline以插入该页码(abspagezref) 与每个 ToC 条目。

在此处输入图片描述

\documentclass[oneside]{book}

\usepackage[abspage]{zref}
\usepackage{etoolbox}

\patchcmd{\addcontentsline}% <cmd>
  {\thepage}% <search>
  {\number\numexpr\value{abspage}+1}% <replace>
  {}{}% <success><failure>

\usepackage{lipsum}

\begin{document}

\tableofcontents

\section{AAA}
\lipsum[1-10]

\newpage
\setcounter{page}{1}
\section{BBB}
\lipsum[3-10]

\newpage
\setcounter{page}{1}
\section{CCC}
\lipsum[3-10]

\end{document}

请注意,在存储绝对页码时使用表达式。以下是对该计算的引用,来自zref文档

由于技术和历史原因,计数器本身以零为基础:如果您直接在第一页使用它,例如,\arabic{abspage}您将得到 0 作为值。

另外:如果你正在执行类似任务,最好使用定制的宏将它们合并为一个。例如,

\let\oldsection\section
\renewcommand{\section}{%
  \clearpage
  \setcounter{page}{1}%
  \oldsection
}

可以让您简化代码,只需\section{<title>}插入新页面、重置页面计数器,然后照常使用常规的分段宏即可。

相关内容