如何引用代码框?

如何引用代码框?

我正在使用clrscode3e包排版伪代码,我想引用codeboxes 中的过程来生成类似“Procedure InsertionSort”的内容。该怎么做?

例如,如果我想引用某个章节,我可以轻松地写: \label{chap:foo}\nameref{chap:foo},然后我就会得到章节名称。

我怎样才能通过引用它来获取过程名称(\proc{}在环境中定义)(也就是说,我只能在中定义然后使用它在其他地方获取该过程的名称)?codebox\label{proc:InsertionSort}codebox\nameref{proc:InsertionSort}

答案1

由于在来自的环境\Procname下的程序codeblockclrscode3e没有与之关联的数字,仅有\nameref意义。

\Procname对宏进行以下修改clrscode3e更新超链接目标以及“要引用的名称”:

在此处输入图片描述

\documentclass{article}

\usepackage{clrscode3e,etoolbox}
\usepackage{hyperref}
\robustify{\proc}

\makeatletter
\renewcommand{\Procname}[1]{%
  \global\def\saveprocname{#1}%
  \global\procnametrue%
  \let\@currentlabelname\saveprocname
  \phantomsection}
\makeatother

\begin{document}

\section{A section}
See \nameref{proc:insertion-sort}.

\begin{codebox}
  \Procname{$\proc{Insertion-Sort}(A)$}\label{proc:insertion-sort}
    \li \For $j \gets 2$ \To $\attrib{A}{length}$
      \li \Do
      $\id{key} \gets A[j]$
      \li \Comment Insert $A[j]$ into the sorted sequence
      $A[1 \twodots j-1]$.
      \li $i \gets j-1$
      \li \While $i > 0$ and $A[i] > \id{key}$
        \li \Do
        $A[i+1] \gets A[i]$
        \li $i \gets i-1$
        \End
      \li $A[i+1] \gets \id{key}$
    \End
\end{codebox}

\end{document}

相关内容