\crefrange{} 链接到错误算法中的正确行

\crefrange{} 链接到错误算法中的正确行

我有一堆算法需要通过引用其中的某些行号来解释。我试图用\crefrange它,但最简单的例子似乎失败了。

在下面的示例中,在第二页,我使用 引用了第二种算法中的行范围 1-3 \crefrange。不幸的是,在生成的 PDF 中,当我单击“行 1-3”时,链接将我带到正确的行,但算法错误(即算法一,而不是算法二)。

\documentclass{article}
\usepackage{algorithm,algpseudocode}
\usepackage[colorlinks]{hyperref}
\usepackage[noabbrev,capitalize,nameinlink]{cleveref}
\begin{document}

\section{Page 1}
\cref{a:one:line2} in \cref{a:one} is \dots

\cref{a:one:line2,a:one:line3} of the algorithm are based on \dots
\begin{algorithm}
\caption{Baseline}\label{a:one}
\begin{algorithmic}[1]
  \State Do X 
  \State Do Y        \label{a:one:line2}
  \State $x = y + z$ \label{a:one:line3}
\end{algorithmic}
\end{algorithm}

\pagebreak

\section{Page 2}
\cref{a:two:line2} in \cref{a:two} is \dots

\crefrange{a:two:line1}{a:two:line3} of the algorithm are based on \dots
\begin{algorithm}
    \caption{Baseline}\label{a:two}
    \begin{algorithmic}[1]
        \State Do X        \label{a:two:line1}
        \State Do Y        \label{a:two:line2}
        \State $x = y + z$ \label{a:two:line3}
    \end{algorithmic}
\end{algorithm}
\end{document}

pdflatex如果重要的话,我正在 Ubuntu 上使用 TexStudio 。

答案1

cleveref当与一起使用时hyperref,如果您destination with the same identifier has already been used, duplicate ignored在日志中看到“ ”警告,则通常有效的解决方法是在 hyperref 中禁用 hypertexnames:

\usepackage[hypertexnames=false]{hyperref}

在您的 MWE 中设置此选项可以为我生成正确的超链接。

这个问题的大多数实例在几年前就已修复,因此cleveref这种解决方法应该没有必要。algorithm和软件包均受 支持(有关详细信息,请参阅下文)。 看起来和支持之间存在不良交互,需要在 中修复。algorithmicxalgorithm2ecleverefcleverefalgorithmicxhyperrefcleveref

algorithm包仅为算法提供单独的浮动环境。所需的唯一支持是为这些算法环境提供默认名称(及其翻译),该包确实提供了该cleveref功能。该algorithmicx包提供了一个用于排版实际算法的框架。您通常会加载一个配套的布局包来为您设置算法样式(它会在内部加载包algorithmicx),而不是加载algorithmicx包本身。是这些布局包algpseudocode中最常用的。支持框架,因此其所有布局包如都支持。该包总体上是包的更好的替代品(这就是不支持后者的原因)。该包是的替代品。请参阅algorithmicxcleverefalgorithmicxalgpseudocodealgorithmicxalgorithmiccleverefalgorithm2ealgorithmicx这个 stackchange 答案以获得更完整的解释。

相关内容