算法交叉引用问题

算法交叉引用问题

我有多个算法,中间更改了计数器。当我交叉引用后面的算法时,它会链接到原始序列而不是实际算法。例如,假设我有这个代码,

\usepackage[ruled,linesnumbered]{algorithm2e}
\begin{document}
...
\begin(algorithm)
   \caption{\label{algo1}}
\end{algorithm}
\setcounter{algocf}{0}
\begin(algorithm)
   \caption{\label{algo2}}
\end{algorithm}
...
\end{document}

当我尝试引用算法 2(\ref{algo2})时,pdf 中生成的超链接会跳转到 algo1而不是algo2

有什么想法吗,为什么?

我该如何更新计数器以避免出现此问题?感谢您的帮助。

答案1

通过这种方法,您应该注意到以下内容.log

LaTeX Warning: Reference `algo1' on page 1 undefined on input line 8.

[1

{c:/texlive/2021/texmf-var/fonts/map/pdftex/updmap/pdftex.map}pdfTeX warning (e
xt4): destination with the same identifier (name{algocf.1}) has been already us
ed, duplicate ignored
<argument> ...shipout:D \box_use:N \l_shipout_box 
                                                  \__shipout_drop_firstpage_...
l.19 \end{document}

这是因为hyperref需要一个唯一的标识符来跳转,但由于重置(或后退)计数器,你已使标识符相同algocfalgorithm2e计数器识别算法)。

一个可能的原因是,你想将一个算法拆分到多个页面,但仍然使用相同的编号。或者,可能提供之前算法的更新版本(可能是改进版本)。

为了正确实现这一点,您需要hyperref使用以下hypertexnames=false选项加载:

在此处输入图片描述

\documentclass{article}

\usepackage[ruled,linesnumbered]{algorithm2e}
\usepackage[hypertexnames=false]{hyperref}

\begin{document}

See Algorithm~\ref{alg:algo1} and~\ref{alg:algo2}. There is also Algorithm~\ref{alg:algo3}.

\begin{algorithm}
  \caption{First algorithm}
  \label{alg:algo1}
\end{algorithm}

\begin{algorithm}
  \setcounter{algocf}{0}% Reset algorithm counter (algocf)
  \caption{Second algorithm}
  \label{alg:algo2}
\end{algorithm}

\begin{algorithm}
  \caption{Third algorithm}
  \label{alg:algo3}
\end{algorithm}

\end{document}

相关内容