我正在尝试创建一个简单的 if 命令来查看引用是否跨越一页或多页。如果是单页,则添加“p.”前缀,否则添加“pp.”前缀。
我正在使用zref
包。我试图使用命令\zref@extractdefault
提取页面的值并在两个标签之间创建一个测试。我在zref
手册中看到该命令\zref@extractdefault
是可扩展的,但是当我尝试编译时,我收到错误“缺少数字,视为零。”
我做错了什么?
\documentclass{scrbook}
\usepackage[USenglish]{babel}
\usepackage[titleref, user, abspage]{zref}
\usepackage{etoolbox}
\makeatletter%
\def\pagetest#1#2{%
\ifnumcomp{\zref@extractdefault{#1}{page}}{=}{\zref@extractdefault{#2}{page}}{p. \zref[page]{#1}}{pp. \zref[page]{#1}-\zref[page]{#2}}%
}%
\makeatother%
\begin{document}
Bla bla\zlabel{foo1}
\newpage
Bla bla bla\zlabel{foo2}
\pagetest{foo1}{foo2}
\zref[page]{foo1} and \zref[page]{foo2}
\end{document}
答案1
您几乎已经到达!:\zref@extractdefault
接受三个参数,而不是两个。
\documentclass{scrbook}
\usepackage[USenglish]{babel}
\usepackage[titleref, user, abspage]{zref}
\usepackage{etoolbox}
\makeatletter%
\def\pagetest#1#2{%
\ifnumcomp{\zref@extractdefault{#1}{page}{0}}{=}{\zref@extractdefault{#2}{page}{0}}{p. \zref[page]{#1}}{pp. \zref[page]{#1}-\zref[page]{#2}}%
}%
\makeatother%
\begin{document}
Bla bla\zlabel{foo1}
\newpage
Bla bla bla\zlabel{foo2}
\pagetest{foo1}{foo2}
\zref[page]{foo1} and \zref[page]{foo2}
\end{document}