![使用 clrscode3e 的 Cleveref](https://linux22.com/image/477839/%E4%BD%BF%E7%94%A8%20clrscode3e%20%E7%9A%84%20Cleveref.png)
我也希望利用 cleveref 包的优势来编写我编写的伪代码。更准确地说,我正在寻找一种方法来让 cleveref 包与 clrscode3e 一起工作,以便可以引用代码片段行。为了说明我究竟想如何结合使用这两个包,我在下面提供了一个 MWE。
\documentclass{article}
\usepackage{clrscode3e, cleveref}
\begin{document}
\begin{codebox}
\Procname{$\proc{MWE}$}
\li $x \gets 1$ \label{lin:assign}
\End
\end{codebox}
As shown in \cref{lin:assign}, \dots
\end{document}
不幸的是,这种方式无法解析引用。有趣的是,使用\ref
而不是\cref
打印正确的行号。有没有办法用 cleveref 也得到这个结果?我试过用 定义一个类型\crefname
,但计数器关闭了:我只得到了\cref
打印节号的命令。
答案1
clrscode3e
\refstepcounter
通过不创建标签代码本身,可以非常有效地禁用 cleveref(以及 hyperref) 。
您可以定义自己的 \label 命令:
\documentclass{article}
\usepackage{clrscode3e}
\usepackage{cleveref}
\crefname{codelinenumber}{code}{code} %adapt
\newcommand\clrslabel[1]
{\addtocounter{codelinenumber}{-1}%
\refstepcounter{codelinenumber}%
\label{#1}}
\begin{document}
\begin{codebox}
\Procname{$\proc{MWE}$}
\li $x \gets 1$ \clrslabel{lin:assign}
\End
\end{codebox}
As shown in \cref{lin:assign}, \dots
\end{document}