如何找到整数形式的绝对页码?

如何找到整数形式的绝对页码?

有没有一种简单的方法可以从标签中检索绝对页码,其中绝对的意思是将所有页面按整数顺序从文档的第一页开始计算,而无需任何重置。

更清楚地说,如果我有三页带有罗马数字的前言,然后有十页带有阿拉伯数字的内容,并且我引用内容的第三页,\pageref将返回 3,但我想要一个替代命令,它将返回 6,因为它是文档中的第 6 个总页。

此外,我希望将引用作为基本整数返回,以便它们可以在控制语句或算术比较中使用,例如,我希望能够执行如下操作,其中\abspageref一个假设命令从文档开头而不是最后一页计数器重置开始计数,并返回一个没有关联单位的简单整数:

if{\abspageref{labelA} > \abspageref{labelB}{Some text.}{Some alternate text.}

我意识到这也不是一个正确的 if then 控制语句,它只是为了说明我正在尝试做的事情。

谢谢。

附加问题:为什么类似的东西已经abspageref不是 Latex 的核心部分了?这似乎是高级用户想要的一个可预测的功能,当我在网上搜索解决方案时,我看到了很多非常复杂的解决方案,但我还没有成功过。

答案1

使用该zref包,特别是它的userabspage模块:

\usepackage[user,abspage]{zref}
% or
\usepackage{zref-user,zref-abspage}


% Label
\zlabel{mylabel}

% Reference
\zref[abspage]{mylabel}

% or, if needed as simple number:
\makeatletter
\zref@extract{mylabel}{abspage}
% also available: \zref@extractdefault
\makeatother

因此,您的示例可以编码为:

\makeatletter
\newcommand\cmpabspage[2]{%
   \ifnum\zref@extract{#1}{abspage}>\zref@extract{#2}{abspage}
       \expandafter\@firstoftwo
   \else
       \expandafter\@secondoftwo
   \fi
}
\makeatother

% ...
\cmpabspage{labelA}{labelB}{Some text.}{Some alternate text.}
% where the labels are set using `\zlabel{labelA}` etc.

我以前用过这个包,效果很好。它来自 Heiko Oberdiek,他还编写了许多其他优秀的包。请注意,计数器从零开始,并在页面发送例程开始时递增。这意味着当第一页排版或书写时它的值为 0,\immediate\write但在页面最终发送之前它的值为“1”,即正常情况下\write会将其写入“1”例如到文件中.aux

相关内容