使用 cleveref 和 algpseudocode 定义 crefname 时计数器不递增

使用 cleveref 和 algpseudocode 定义 crefname 时计数器不递增

我正在重命名环境中的行的“行”标签algorithmic,因为我正在使用环境的默认标签lstlisting。一旦我\crefname为其添加定义,计数器就不会增加。

这是一个简单的问题,所以一个例子可以最好地说明它。

\documentclass{article}
\usepackage{algorithm}
\usepackage{hyperref}
\usepackage{algpseudocode}
\usepackage{cleveref}

\crefname{opC}{operation}{operations}
\Crefname{opC}{Operation}{Operations}

\begin{document}
    \begin{algorithm}[bt]
        \begin{algorithmic}[1]
            \State First line
            \label[opC]{line:1}
            \State Second line
            \label[opC]{line:2}
        \end{algorithmic}
    \end{algorithm}
Refer here to \cref{line:1} and to \cref{line:2}. 
These two work just fine: \cref{line:4} and \cref{line:3}.
    \begin{algorithm}[bt]
        \begin{algorithmic}[1]
            \State Another first line
            \label{line:3}
            \State Another second line
            \label{line:4}
        \end{algorithmic}
    \end{algorithm}
\end{document}

编译示例

我尝试过\newcounter{opC},但\crefalias{opC}{line}无济于事。

顺便说一句,\ref返回的数字与第二个算法中显示的一样。此外,链接hyperref指向正确的位置(虽然在这个 MWE 中很难检查),所以只有实际标签是错误的。

答案1

在进一步研究了cleveref软件包文档之后,我偶然发现了14.1 非错误。尽管我没有\label在另一个命令中使用可选参数(如第三条建议的那样),但似乎应该用花括号括起来才能正常工作。

将上述示例中的更正\label[opC]{line:1}{\label[opC]{line:1}}即可解决问题。

相关内容