如何将算法放入表内并引用该表?

如何将算法放入表内并引用该表?

现在我有一个算法,我想在整个文本中引用它。

但是,引用该算法的方式很尴尬。见上图。使用\autoref,该算法被简单地称为“算法 1”。我希望引用包含算法 1 的表格,并让读者查看表格。

在此处输入图片描述

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{thmtools}       

\setlength\parindent{0pt}
\usepackage[linesnumbered,ruled]{algorithm2e}
\usepackage{hyperref}

\begin{document}
\section{Introduction}

{\LinesNumberedHidden
    \begin{algorithm}
        \SetKwInOut{Input}{Input}
        \SetKwInOut{Output}{Output}
        \SetAlgorithmName{Algorithm}{} 

        Initialize: $x^0$ = 0;
        \begin{enumerate}   
            \item Pour hot coal on $f(x)$
            \item Freeze coal until $\|f(x)\|_\infty < \epsilon$
        \end{enumerate}

        \caption{Meta-Coal Algorithm}
        \label{algo:Coal Meta-Heuristic}
\end{algorithm}}

Look at my beautiful algorithm in \autoref{algo:Coal Meta-Heuristic}

\end{document}

相反,我想要这样的东西:

在此处输入图片描述

现在我引用的是包含在表中的算法,我觉得这样引用这个表更自然。表的名称可以放在算法的顶部或底部(如当前所示)。该表的标题可以称为“Meta Coal 算法描述”或只是“Meta Coal 算法”(如当前所示)。

但是,如果我尝试将算法块放在里面,\begin{table}整个程序就会编译失败!

\begin{table}
{\LinesNumberedHidden
    \begin{algorithm}
        \SetKwInOut{Input}{Input}
        \SetKwInOut{Output}{Output}
        \SetAlgorithmName{Algorithm}{} 

        Initialize: $x^0$ = 0;
        \begin{enumerate}   
            \item Pour hot coal on $f(x)$
            \item Freeze coal until $\|f(x)\|_\infty < \epsilon$
        \end{enumerate}

        \caption{Meta-Coal Algorithm}
        \label{algo:Coal Meta-Heuristic}
\end{algorithm}}
\end{table}

在此处输入图片描述

有谁知道是否有办法以最小的努力实现我的目标?

答案1

使用H说明符,这样算法就不再是一个浮动对象,而可以放在表中。

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{thmtools}

\setlength\parindent{0pt}
\usepackage[linesnumbered,ruled]{algorithm2e}
\usepackage{hyperref}

\begin{document}
\section{Introduction}

\begin{table}
{\LinesNumberedHidden
    \begin{algorithm}[H]
        \SetKwInOut{Input}{Input}
        \SetKwInOut{Output}{Output}
        \SetAlgorithmName{Algorithm}{}

        Initialize: $x^0$ = 0;
        \begin{enumerate}
            \item Pour hot coal on $f(x)$
            \item Freeze coal until $\|f(x)\|_\infty < \epsilon$
        \end{enumerate}
\caption{Meta-Coal Algorithm}
\end{algorithm}}
\caption{Meta-Coal Algorithm}
\label{algo:Coal Meta-Heuristic}
\end{table}

Look at my beautiful algorithm in \autoref{algo:Coal Meta-Heuristic}

\end{document} 

在此处输入图片描述

答案2

\captionof请参阅本文末尾的替代解决方案。

我建议使用cleveref和其\label[othercountername]{...}功能和\Cref{...}\cref{...}代替,即

\label[table]{yourlabelname}

在浮点数中嵌套浮点数是很麻烦的,而且无论如何也行不通。

如果引用的计数器的名称应该出现在\Cref\cref使用的提供的链接中\usepackage[nameinlink]{cleveref}

cleveref稍后加载hyperref

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{thmtools}       

\setlength\parindent{0pt}
\usepackage[linesnumbered,ruled]{algorithm2e}
\usepackage{hyperref}
\usepackage{cleveref}

\begin{document}
\section{Introduction}

{\LinesNumberedHidden
    \begin{algorithm}
        \SetKwInOut{Input}{Input}
        \SetKwInOut{Output}{Output}
        \SetAlgorithmName{Algorithm}{} 

        Initialize: $x^0$ = 0;
        \begin{enumerate}   
            \item Pour hot coal on $f(x)$
            \item Freeze coal until $\|f(x)\|_\infty < \epsilon$
        \end{enumerate}
        \caption{Meta-Coal Algorithm}
        \label[table]{algo:CoalMeta-Heuristic}
\end{algorithm}}

Look at my beautiful algorithm in \Cref{algo:CoalMeta-Heuristic}

\end{document}

在此处输入图片描述

\captionof使用来自包的替代解决方案caption

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{thmtools}       

\setlength\parindent{0pt}
\usepackage[linesnumbered,ruled]{algorithm2e}
\usepackage{caption}
\usepackage{hyperref}

\begin{document}
\section{Introduction}

{\LinesNumberedHidden
    \begin{algorithm}
        \SetKwInOut{Input}{Input}
        \SetKwInOut{Output}{Output}
        \SetAlgorithmName{Algorithm}{} 

        Initialize: $x^0$ = 0;
        \begin{enumerate}   
            \item Pour hot coal on $f(x)$
            \item Freeze coal until $\|f(x)\|_\infty < \epsilon$
        \end{enumerate}
        \captionof{table}{Meta-Coal Algorithm}
        \label{algo:CoalMeta-Heuristic}
\end{algorithm}}

Look at my beautiful algorithm in \autoref{algo:CoalMeta-Heuristic}

\end{document}

相关内容