请看一下这个例子:
\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 \cleardoublepage
by\newDivision
将使第三部分从下一个奇数页开始,即第 11 页(这些当然是整个文档的绝对页码,从 1 开始 — 而不是页眉中打印的页码)。因此,这是模式下的结果twoside
: