我想获取实际页码。如果我使用\thepage
,当我更改页码时,就会出现问题。对于页码gobble
,它会消失,如果我将 更改为arabic
,roman
它会重置计数器。实际上必须有一些内部计数器\p@count
(我编造的)。它是什么?
以下示例应在最后一页显示 13。
\documentclass[a5paper, 11pt]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\begin{document}
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
\pagenumbering{gobble}
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
\pagenumbering{arabic}
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
\end{document}
答案1
该包xassoccnt
提供了一种方法,用于在每次驱动计数器步进时强制相关计数器步进 - 驱动计数器就在page
这里。
totcount
这比或包有一个优势lastpage
,因为关联的计数器realpage
(任何名称都可以,但是section
等等当然是不明智的 ;-))不会被重置(除非明确使用\setcounter
)——因此,它会计算页面的总绝对值。
因此,即使在命令的情况下\pagenumbering
,这也不会对计数器产生影响realpage
。
请注意,page
从某种意义上来说,这是一个不可靠的计数器!
\documentclass[a5paper, 11pt]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{xassoccnt}
\newcounter{realpage}
\DeclareAssociatedCounters{page}{realpage}
\AtBeginDocument{%
\stepcounter{realpage}
}
\begin{document}
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
\pagenumbering{gobble}
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
\pagenumbering{arabic}
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
\end{document}
\NewTotalDocumentCounter
带有(需要xassoccnt
v.1.2. 及以上版本) 的版本
\documentclass[a5paper, 11pt]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{xassoccnt}
\NewTotalDocumentCounter{totalrealpage}
\NewDocumentCounter{realpage}
\DeclareAssociatedCounters{page}{realpage,totalrealpage}
\makeatletter
\AtBeginDocument{%
\setcounter{realpage}{1}
}
\makeatother
\begin{document}
In diesem Dokument sind insgesamt \TotalValue{totalrealpage} Seiten!
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
\pagenumbering{gobble}
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
\pagenumbering{arabic}
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
Seite \therealpage
\newpage
\end{document}
答案2
zref
的abspage
模块提供对“绝对页码”属性的访问。结合该lastpage
模块,您可以使用提取最后一个绝对页码\zref[abspage]{LastPage}
。这是一个最小示例:
\documentclass{article}
\usepackage[paper=a5paper]{geometry}% Just for this example
\usepackage[abspage,user,lastpage]{zref}
\begin{document}
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
\pagenumbering{gobble}
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
\pagenumbering{arabic}
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
\newpage
Seite \thepage
Last page: \zref[abspage]{LastPage}
\end{document}
要使用的接口\zref[<prop>]{<label>}
需要user
模块。任何特定页面的绝对页码(例如LastPage
,除 之外)都可以使用\zlabel{<label>}
和后续 来获取\zref[abspage]{<label>}
。
答案3
该类memoir
提供了两个宏,即和\lastpage
,\lastsheet
它们将打印最后一页的页码以及单面打印文档所需的纸张数量。到目前为止,我还没有听说这些有什么问题。它们可以这样使用:
\documentclass[a4paper,...]{memoir}
...
\begin{document}
...
The last page is number \lastpage\ and requires \lastsheet\ of A4
paper for printing single sided.
\end{document}
还有一个\thesheetsequence
宏可以打印当前的纸张数量,就像\thepage
打印当前页码一样。
答案4
当然有一个计数器。\c@page
(定义为 \count0
)并且您可以访问它的值:
\documentclass[a5paper, 11pt]{scrbook}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\begin{document}\makeatletter
Seite \the\value{page}--\the\c@page --\the\count0
\newpage
Seite \the\value{page}--\the\c@page --\the\count0
\end{document}
但您必须小心,因为异步排版导致其值可能错误。在您的示例中,\newpage 之后一切都正常,但在普通段落中它可能会一次性出现。