指的是当前页码,但不是 \thepage,而是真正的绝对

指的是当前页码,但不是 \thepage,而是真正的绝对

我想获取实际页码。如果我使用\thepage,当我更改页码时,就会出现问题。对于页码gobble,它会消失,如果我将 更改为arabicroman它会重置计数器。实际上必须有一些内部计数器\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带有(需要xassoccntv.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

zrefabspage模块提供对“绝对页码”属性的访问。结合该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 之后一切都正常,但在普通段落中它可能会一次性出现。

相关内容