有没有一种简单的方法可以从标签中检索绝对页码,其中绝对的意思是将所有页面按整数顺序从文档的第一页开始计算,而无需任何重置。
更清楚地说,如果我有三页带有罗马数字的前言,然后有十页带有阿拉伯数字的内容,并且我引用内容的第三页,\pageref
将返回 3,但我想要一个替代命令,它将返回 6,因为它是文档中的第 6 个总页。
此外,我希望将引用作为基本整数返回,以便它们可以在控制语句或算术比较中使用,例如,我希望能够执行如下操作,其中\abspageref
一个假设命令从文档开头而不是最后一页计数器重置开始计数,并返回一个没有关联单位的简单整数:
if{\abspageref{labelA} > \abspageref{labelB}{Some text.}{Some alternate text.}
我意识到这也不是一个正确的 if then 控制语句,它只是为了说明我正在尝试做的事情。
谢谢。
附加问题:为什么类似的东西已经abspageref
不是 Latex 的核心部分了?这似乎是高级用户想要的一个可预测的功能,当我在网上搜索解决方案时,我看到了很多非常复杂的解决方案,但我还没有成功过。
答案1
使用该zref
包,特别是它的user
和abspage
模块:
\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
。