Cleveref/hyperref:算法中的步骤链接不正确

Cleveref/hyperref:算法中的步骤链接不正确

我正在使用cleverefhyperref包。总体来说效果很好,但算法中对行的交叉引用不正确。

我找到了一些其他相关文章,这个这个。但是,那里给出的解决方案对我来说不起作用。

以下是 MWE:

\documentclass[11pt]{report}

%% algorithms
\usepackage[chapter]{algorithm}
\usepackage{algpseudocode}

%% referencing
\usepackage{hyperref}
\usepackage{cleveref}


\begin{document}

\chapter{First chapter}

\begin{algorithm}[!htb]
    \caption{First algorithm}
    \begin{algorithmic}[1]
        \State A statement in 1st algorithm 
    \end{algorithmic}
\end{algorithm}


\chapter{Second chapter}
A reference to a line in \cref{alg:secondalg} \ : \cref{step:insecondalg}

\begin{algorithm}[!htb]
    \caption{Second algorithm} \label{alg:secondalg}
    \begin{algorithmic}[1]
        \State A statement in 2nd algorithm \label{step:insecondalg}
    \end{algorithmic}
\end{algorithm}

\end{document}

第二章中的步骤\cref给出了正确的步骤编号,但其链接指向第一章中的算法。

请提供您可能有的任何解决方案/解决方法。

答案1

您会收到一条警告:

pdfTeX warning (ext4): destination with the same identifier (name{[email protected]})
has been already used, duplicate ignored

在这种情况下,hyperref不会为锚点创建合适的辅助计数器,但您可以自己创建它:它的名称应该是HALG@line,并且您想将它的表示链接到某些唯一的内容,例如计数器的表示algorithm

\documentclass[11pt]{report}

%% algorithms
\usepackage[chapter]{algorithm}
\usepackage{algpseudocode}

%% referencing
\usepackage{hyperref}
\usepackage{cleveref}

\makeatletter
\newcounter{HALG@line}
\renewcommand{\theHALG@line}{\thealgorithm.\arabic{ALG@line}}
\makeatother


\begin{document}

\chapter{First chapter}

\begin{algorithm}[!htb]
    \caption{First algorithm}
    \begin{algorithmic}[1]
        \State A statement in 1st algorithm 
    \end{algorithmic}
\end{algorithm}


\chapter{Second chapter}
A reference to a line in \cref{alg:secondalg} \ : \cref{step:insecondalg}

\begin{algorithm}[!htb]
    \caption{Second algorithm} \label{alg:secondalg}
    \begin{algorithmic}[1]
        \State A statement in 2nd algorithm \label{step:insecondalg}
    \end{algorithmic}
\end{algorithm}

\end{document}

相关内容