我有多个算法,中间更改了计数器。当我交叉引用后面的算法时,它会链接到原始序列而不是实际算法。例如,假设我有这个代码,
\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
需要一个唯一的标识符来跳转,但由于重置(或后退)计数器,你已使标识符相同algocf
(algorithm2e
计数器识别算法)。
一个可能的原因是,你想将一个算法拆分到多个页面,但仍然使用相同的编号。或者,可能提供之前算法的更新版本(可能是改进版本)。
为了正确实现这一点,您需要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}