pageslts:不同的最后页面连续使用相同的 \pagenumbering-style

pageslts:不同的最后页面连续使用相同的 \pagenumbering-style

请看一下这个例子:

\documentclass{article}

\usepackage{fancyhdr}
\usepackage{lipsum}
\usepackage{pageslts}

\pagestyle{fancy}
\fancyhf{}
\fancyhead[R]{Page \thepage~of \lastpages{arabic}{1}}

\begin{document}
\pagenumbering{arabic}
\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]

\pagebreak
\pagenumbering{arabic}
\setcounter{page}{1}

\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]
\lipsum[1]
\lipsum[2]
\lipsum[3]
\end{document}

我想要实现的是,前四页显示“共 4 页”,其余页显示“共 5 页”,但整个文档要么显示“共 9 页”,要么显示“共 5 页”。

即使阅读了“pageslts”的文档,我也没有找到在页码样式不变的情况下如何执行此操作的示例。

答案1

atbegshi可以使用和包按如下方式完成此操作zref。下面给出的代码正确处理:

  • 任意数量的划分(为了避免混淆,我必须找到一个不同于“章节”和“部分”的词,所以就是这个词:“划分”);

  • 单面和双面文件;

  • 的古怪定义\thepage,包括在之后更改它\newDivision。具体来说,如以下示例所示,您可以将其用于\pagenumbering{arabic}文档的给定部分、\pagenumbering{roman}另一个部分、\pagenumbering{Alph}第三个部分等。

  • \end{document}当达到时待处理的浮动。

因此,正如您所猜测的,您的文档被分成一个或多个分裂\newDivision并且每当您想要开始新的页面时,您都必须调用。除其他操作外,\newDivision还会执行\cleardoublepage并将页码重置为 1,因此您无需自己执行这些操作。

需要运行三次编译(但不用担心,LaTeX 会在您需要重新编译时发出警告)。需要运行两次才能获取\thepage文档最后一页的(格式化页码)并将其存储在我的代码使用的内部标签中,还需要运行一次才能fancyhdr从此内部标签读取正确的值并将其用于最后一个分区的标题中(每个分区都有一个这样的内部标签:它给出\thepage相应分区最后一页的值)。代码如下:

\documentclass{article}
\usepackage{fancyhdr}
\usepackage{atbegshi}
\usepackage[lastpage]{zref}
\usepackage{lipsum}

\makeatletter
\newcounter{myDivision}
\setcounter{myDivision}{0}

\AtBeginShipout{%
  \protected@xdef\mydiv@lastpage{\thepage}%
}

\newcommand{\newDivision}{%
  % This is the correct thing to do because in one-sided documents,
  % \cleardoublepage is equivalent to \clearpage.
  \cleardoublepage
  \let\@currentlabel\mydiv@lastpage
  \zref@wrapper@immediate{\label{my@division-\number\value{myDivision}}}%
  \stepcounter{myDivision}%
  \setcounter{page}{1}%
}

% This correctly handles the case of pending floats at \end{document} time
\AtEndDocument{%
  \zref@refused{LastPage}%
  \def\@currentlabel{\zref@extract{LastPage}{page}}%
  \zref@wrapper@immediate{\label{my@division-\number\value{myDivision}}}%
}

\pagestyle{fancy}
\fancyhf{}
\fancyhead[R]{Page \thepage~of~\ref{my@division-\number\value{myDivision}}}
\makeatother

\begin{document}

\pagenumbering{arabic}
\lipsum[1-18]

\newDivision

\pagenumbering{roman}
\lipsum[1-24]

\newDivision

\pagenumbering{Alph}
\lipsum[1-8]

\end{document}

如果你按照我所说的编译此文档(即三次),你将获得以下内容:

单侧截图

如果将该行替换\documentclass{article}\documentclass[twoside]{article},这将更改第三部分的起始页。实际上,在单面模式下,此示例文档的第三部分从第 10 页开始,即偶数页。按照惯例,这在双面模式下是不可接受的,因此 done \cleardoublepageby\newDivision将使第三部分从下一个奇数页开始,即第 11 页(这些当然是整个文档的绝对页码,从 1 开始 — 而不是页眉中打印的页码)。因此,这是模式下的结果twoside

双面截图

相关内容