标题、hyperref 和 algorithm2e 存在问题

标题、hyperref 和 algorithm2e 存在问题

我正在尝试混合captionhyperrefalgorithm2e包,但遇到了一些问题。这是 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}

存在两个问题:

  1. 算法 BAR 在图中出现,但由于 ,它不应该出现captionsetup
  2. 在图列表和第 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 即可“开箱即用”。\algorithm2efigure\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 内的超链接也是正确的。

相关内容