zref
模块counter
允许跟踪哪个计数器被(ref)步进,功能类似于autoref
. 跟踪这个计数器的属性被恰当地称为counter
。
请考虑以下示例:
\documentclass{article}
\usepackage{zref-user,zref-counter}
\usepackage{hyperref}
\begin{document}
Section counter: \zref[counter]{sec:label}\par
Figure counter: \zref[counter]{fig:label}
\section{A section}\zlabel{sec:label}
\begin{figure}
\caption{A figure.}\zlabel{fig:label}
\end{figure}
\end{document}
和hyperref
加载后,计数器输出类似于:
如果没有hyperref
加载,计数器输出类似于:
如何才能让hyperref
不影响 的适当属性值的设置counter
?
答案1
在我写的一堂课中,我使用这个来解决这个问题:
\documentclass{article}
\usepackage{zref-user,zref-counter}
\usepackage{etoolbox}
\makeatletter
\pretocmd\refstepcounter{%
\zref@setcurrent{counter}{#1}}{}{}
\makeatother
\usepackage{hyperref}
\begin{document}
Section counter: \zref[counter]{sec:label}\par
Figure counter: \zref[counter]{fig:label}
\section{A section}\zlabel{sec:label}
\begin{figure}
\caption{A figure.}\zlabel{fig:label}
\end{figure}
\end{document}
另一种方法是在加载 hyperref 之后(加载 cleveref 之前)添加补丁:
\makeatletter
\ZREF@patch{H@refstepcounter}{%
\def\H@refstepcounter#1{%
\zref@setcurrent{counter}{#1}%
\ZREF@org@H@refstepcounter{#1}%
}%
}%
\makeatother
我确实在去年年底向 Heiko 发送了有关此问题的消息,但忘了检查是否发生了什么事情。