使用 clrscode3e 的 Cleveref

使用 clrscode3e 的 Cleveref

我也希望利用 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}

在此处输入图片描述

相关内容