我正在尝试混合caption
、hyperref
和algorithm2e
包,但遇到了一些问题。这是 MWE。
\documentclass[12pt]{book}
\usepackage{float}
\usepackage[footnotesize,bf,center,figurename=Fig]{caption}
\usepackage{amsmath}
\usepackage{xpatch}
\usepackage[vlined,ruled]{algorithm2e}
\xpretocmd{\algorithm}{\hsize=\linewidth}{}{}
\usepackage[colorlinks,citecolor=green!90!black,draft=false,pdfencoding=auto]{hyperref}
\usepackage{cleveref}
\begin{document}
\listoffigures
\newpage
\begin{algorithm}[H]
\DontPrintSemicolon
\renewcommand\figurename{Algorithm}
\captionof{figure}{FOO.\label{alg:foo}}
\KwIn{}
\end{algorithm}
\begin{figure}[H]
~
\caption{Consistent numbering between figures and algorithms.}
\end{figure}
\newpage
\captionsetup{list=no}
\begin{algorithm}[H]
\DontPrintSemicolon
\renewcommand\figurename{Algorithm}
\captionof{figure}{BAR.\label{alg:bar}}
\KwIn{}
\end{algorithm}
\captionsetup{list=yes}
\begin{algorithm}[H]
\DontPrintSemicolon
\renewcommand\figurename{Algorithm}
\captionof{figure}{FOOBAR.\label{alg:foobar}}
\KwIn{}
\end{algorithm}
Ref: \ref{alg:foobar}.
\end{document}
存在两个问题:
- 算法 BAR 在图中出现,但由于 ,它不应该出现
captionsetup
。 - 在图列表和第 3 页中,对算法 FOOBAR 的引用链接到算法 FOO。
感谢您的关注。
答案1
如果您不知道,但algorithm2e
包具有相同的机制figure
并提供了\listofalgorithms
命令,因此在这种情况下,根本不需要使用captionof
。但是,BAR
与请求相反,算法出现在那里。在这种情况下,必须使用命令\TitleOfAlgo{Title}
来设置标题,但阻止进入List of algorithms
。
为了打印算法编号,titlenumbered
必须在\usepackage[...]{algorithm2e}
选项列表中指定该选项。
\documentclass[12pt]{book}
\usepackage{float}
\usepackage[footnotesize,bf,center,figurename=Fig]{caption}
\usepackage{amsmath}
\usepackage{xpatch}
\usepackage[titlenumbered,vlined,ruled]{algorithm2e}
\xpretocmd{\algorithm}{\hsize=\linewidth}{}{}
\usepackage[colorlinks,citecolor=green!90!black,draft=false,pdfencoding=auto]{hyperref}
\usepackage{cleveref}
\begin{document}
\listofalgorithms
\newpage
\begin{algorithm}[H]
\DontPrintSemicolon
\caption{FOO.}\label{alg:foo}
\KwIn{}
\end{algorithm}
\newpage
%\captionsetup{list=no}
\begin{algorithm}[H]
\DontPrintSemicolon
\TitleOfAlgo{BAR.}\label{alg:bar}
\KwIn{}
\end{algorithm}
\newpage
\begin{algorithm}[H]
\DontPrintSemicolon
%\renewcommand\figurename{Algorithm}
\caption{FOOBAR}.\label{alg:foobar}
\KwIn{}
\end{algorithm}
Ref: \ref{alg:foobar}.
\end{document}
更新
由于 OP 明确希望将算法列在 中,因此必须通过将选项添加到 的选项列表中来配置List of Figures
包以用于此用途。然后 MWE 即可“开箱即用”。\algorithm2e
figure
\usepackage[...]{algorithm2e}
\documentclass[12pt]{book}
\usepackage{float}
\usepackage[footnotesize,bf,center,figurename=Fig]{caption}
\usepackage{amsmath}
\usepackage{xpatch}
\usepackage[figure,titlenumbered,vlined,ruled]{algorithm2e}
\xpretocmd{\algorithm}{\hsize=\linewidth}{}{}
\usepackage[colorlinks,citecolor=green!90!black,draft=false,pdfencoding=auto]{hyperref}
\usepackage{cleveref}
\begin{document}
\listoffigures
\newpage
\begin{algorithm}[H]
\DontPrintSemicolon
\renewcommand\figurename{Algorithm}
\captionof{figure}{FOO.\label{alg:foo}}
\KwIn{}
\end{algorithm}
\begin{figure}[H]
~
\caption{Consistent numbering between figures and algorithms.}
\end{figure}
\newpage
\captionsetup{list=no}
\begin{algorithm}[H]
\DontPrintSemicolon
\renewcommand\figurename{Algorithm}
\captionof{figure}{BAR.\label{alg:bar}}
\KwIn{}
\end{algorithm}
\captionsetup{list=yes}
\begin{algorithm}[H]
\DontPrintSemicolon
\renewcommand\figurename{Algorithm}
\captionof{figure}{FOOBAR.\label{alg:foobar}}
\KwIn{}
\end{algorithm}
Ref: \ref{alg:foobar}.
\end{document}
LOF 内的超链接也是正确的。