![Cleveref 和 Algorithm2e:排版程序名称](https://linux22.com/image/450666/Cleveref%20%E5%92%8C%20A%E2%80%8B%E2%80%8Blgorithm2e%EF%BC%9A%E6%8E%92%E7%89%88%E7%A8%8B%E5%BA%8F%E5%90%8D%E7%A7%B0.png)
我正在利用procedure
环境算法2e,但我无法让它工作聪明人。我希望对程序和算法有不同的参考,但它们似乎总是以相同的方式处理。我认为这取决于使用的计数器,所以我尝试了egreg 的这种方法,但唯一的结果就是被反击。
如果我不添加procnumbered
选项算法2e,\Cref
输出“算法 -“。我可以使用类似 来自
定义格式,但首先\crefformat
Procedure \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}
答案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}