Hyperref 阻止 zref 选择适当的计数器

Hyperref 阻止 zref 选择适当的计数器

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 发送了有关此问题的消息,但忘了检查是否发生了什么事情。

相关内容