cleveref 无法引用算法

cleveref 无法引用算法

在以下示例文档中,\autoref和 plain都ref可以正确链接和编号算法参考,但cleveref无法完成该任务。它只会插入问号。在我拥有的另一个更复杂的文档中,它确实插入了正确的数字,但将它们全部链接到第 1 页。由于的文档cleveref听起来应该支持其他引用包支持的所有内容,甚至更多,我希望这也得到支持。

\documentclass{article}
\usepackage[nameinlink,noabbrev]{cleveref}
\usepackage{hyperref}
\usepackage{algorithm}
\usepackage{algpseudocode}
\providecommand\algorithmname{algorithm}
\begin{document}
We want the real content on page two to better detect errors.
\newpage

\begin{algorithm}
  \caption{Incrementation step}\label{alg:inc}
  \begin{algorithmic}
    \State $x\gets x+1$
  \end{algorithmic}
\end{algorithm}
Comparing auto like \autoref{alg:inc},
clever like \cref{alg:inc} % this gives the error message
and manual like algorithm~\ref{alg:inc}.
\end{document}

编译上述内容我得到

LaTeX Warning: Reference `alg:inc' on page 1 undefined on input line 18.

如果我algorithm在之前移动包cleveref,我会收到错误而不是警告:

(/usr/share/texmf-dist/tex/latex/cleveref/cleveref.sty
! Undefined control sequence.
<argument> \ALG@beginalgorithmic 

l.2843   }{}
            %  end of \@ifpackageloaded{algorithm}

但如果我移动algpseudocode之前的内容cleveref,我就会回到开始。

这是 Gentoo texlive 2012 安装,涉及以下软件包:

  • cleveref 2012/03/07 v0.18.5
  • hyperref 2012/05/13 v6.82q
  • 算法 2009/08/24 v0.1
  • algorithmicx 2005/04/27 v1.2

答案1

您必须使用正确的加载顺序;还请检查 哪些包应该在 hyperref 之后加载而不是之前加载?

\documentclass{article}

\usepackage{algorithm}
\usepackage{algpseudocode}

% hyperref must go last
\usepackage{hyperref}

% but cleveref goes "laster" than hyperref
\usepackage[nameinlink,noabbrev]{cleveref}

\providecommand\algorithmname{algorithm}

\begin{document}
We want the real content on page two to better detect errors.
\newpage

\begin{algorithm}
  \caption{Incrementation step}\label{alg:inc}
  \begin{algorithmic}
    \State $x\gets x+1$
  \end{algorithmic}
\end{algorithm}
Comparing auto like \autoref{alg:inc},
clever like \cref{alg:inc}
and manual like algorithm~\ref{alg:inc}.
\end{document}

enter image description here

相关内容