Cleveref 和 A​​lgorithm2e:排版程序名称

Cleveref 和 A​​lgorithm2e:排版程序名称

我正在利用procedure环境算法2e,但我无法让它工作聪明人。我希望对程序和算法有不同的参考,但它们似乎总是以相同的方式处理。我认为这取决于使用的计数器,所以我尝试了egreg 的这种方法,但唯一的结果就是被反击。

如果我不添加procnumbered选项算法2e\Cref输出“算法 -“。我可以使用类似 来自
定义格式,但首先\crefformatProcedure \ref{proclabel}聪明人无法区分过程和算法,其次我不明白我应该覆盖什么(\labelcrefformat?文档没有详细说明)。

如果我添加procnumbered,至少我会得到一个数字,但参考名称始终是“算法”。

获得“程序 N“在这种procnumbered情况下,或者”程序 ProcName“?

我在看这个答案建议创建一个新的浮点数但我并不认为有必要走那么远,而且这个答案似乎直接与 hyperref 一起使用但我有点不敢触碰超链接在这种情况下。另一个答案也建议使用新的浮动,但它适用于算法

\documentclass{article}
\usepackage[ruled,procnumbered]{algorithm2e}
\usepackage{cleveref}

\newcounter{procedure}
\makeatletter
% https://tex.stackexchange.com/a/212030/26355
\AtBeginEnvironment{procedure}{\let\c@algocf\c@procedure}
\makeatother
\crefname{proccf}{proc.}{procs.}
\Crefname{proccf}{Procedure}{Procedures}

\begin{document}
  \begin{algorithm}
    \caption{My algorithm.}
    \label{algo:my_algo}
    Call \Cref{proc:my_proc}\;
  \end{algorithm}

  \begin{procedure}
    \caption{MyProc()}
    \label{proc:my_proc}
    \Return{$\emptyset$}\;
  \end{procedure}

  \Cref{algo:my_algo} calls \Cref{proc:my_proc}.
\end{document}

程序和算法等于 cleveref

答案1

\crefalias除了更换计数器之外,您还可以做其他事情。

\documentclass{article}
\usepackage[ruled,procnumbered]{algorithm2e}
\usepackage{cleveref}

\newcounter{procedure}
\makeatletter
% https://tex.stackexchange.com/a/212030/26355
\AtBeginEnvironment{procedure}{\let\c@algocf\c@procedure\crefalias{algocf}{procedure}}
\makeatother
\crefname{procedure}{proc.}{procs.}
\Crefname{procedure}{Procedure}{Procedures}

\begin{document}
  \begin{algorithm}
    \caption{My algorithm.}
    \label{algo:my_algo}
    Call \Cref{proc:my_proc}\;
  \end{algorithm}

  \begin{procedure}
    \caption{MyProc()}
    \label{proc:my_proc}
    \Return{$\emptyset$}\;
  \end{procedure}

  \Cref{algo:my_algo} calls \Cref{proc:my_proc}.
\end{document}

在此处输入图片描述

相关内容