我需要排版页面的交叉引用,使用\pageref
,并且尽可能不超过两位数。例如:
pp. 1-23
pp. 101-23 %(for 101-123)
pp. 101-105 %(not 101-05, because the second number starts with a zero)
pp. 101-222 %full range because 101-22 would be wrong
关键是:\pageref
结果刚好是 101-123;我该如何修改它?
(抱歉,没有 MWE,因为我需要一个有数百页的...)我看了一些软件包,但似乎没有一个能提供我需要的东西。
答案1
这是一种方法。我假设页码小于 999。
参数\pagerange
是指向所请求页面的标签。
\documentclass{article}
\usepackage{refcount}
\newcommand{\pagerange}[2]{pp.~%
\edef\tempa{\getpagerefnumber{#1}}%
\edef\tempb{\getpagerefnumber{#2}}%
\ifnum\tempa<100
\tempa--\tempb
\else
\comparerange
\fi}
\def\comparerange{%
\begingroup\edef\x{\endgroup
\noexpand\workondigits\tempa\tempb....\relax}\x}
\def\workondigits#1#2#3#4#5#6#7\relax{%
\if#1#4%
\if#50%
#1#2#3--#4#5#6%
\else
#1#2#3--#5#6%
\fi
\else
#1#2#3--#4#5#6%
\fi}
\begin{document}
a\label{a}
\newpage
\setcounter{page}{23}
b\label{b}
\newpage
\setcounter{page}{101}
c\label{c}
\newpage
\setcounter{page}{105}
d\label{d}
\newpage
\setcounter{page}{123}
e\label{e}
\newpage
\setcounter{page}{222}
f\label{f}
\newpage
\pagerange{a}{b}
\pagerange{c}{d}
\pagerange{c}{e}
\pagerange{c}{f}
\end{document}