3 算法与算法在同一列

3 算法与算法在同一列

我有 3 个算法,希望将它们显示在 2 列文档的同一列中。它们彼此之间都有细微的差异,因此将它们并排显示以便于比较非常重要。

问题是我无法找到一种方法来将这三个都放在列中。我尝试将它们放在图形环境中,但随后我收到错误“不在外部 par 模式中”。使用其他算法包对我来说不是一个选择。

答案1

这里的主要问题是在twocolumn文档中使用浮动。虽然这是可能的,但你的需求不符合其目的。相反,caption包裹消除浮点数的浮动性,允许您在调用它的文本中指定标题。

下列平均能量损失用途algorithmicx'salgpseudocode显示一个在三个算法之间略有差异的算法。使用非浮动字幕的主要界面caption

\captionof{<float env>}{<caption>}

因为我装了algorithm<float env>即可algorithm获得相应的标题。

在此处输入图片描述

\documentclass[twocolumn]{article}
\usepackage[margin=1in]{geometry}% http://ctan.org/pkg/geometry
\usepackage{algorithm,algpseudocode,lipsum}% http://ctan.org/pkg/{algorithms,algorithmicx,lipsum}
\usepackage{caption}% http://ctan.org/pkg/caption
\begin{document}
\lipsum[87]
\captionof{algorithm}{Euclid’s algorithm A}\label{euclidA}
\begin{algorithmic}[1]
  \Procedure{Euclid}{$a,b$}\Comment{GCD of $a$ and $b$}
    \State $r_1\gets a\bmod b$
    \While{$r\not=0$}\Comment{$r=0\mapsto\mbox{answer}$}
    \State $a\gets b$
    \State $b\gets r$
    \State $r\gets a\bmod b$
    \EndWhile\label{euclidendwhile1}
  \State \textbf{return} $b$\Comment{The GCD is $b$}
  \EndProcedure
\end{algorithmic}

\captionof{algorithm}{Euclid’s algorithm B}\label{euclidB}
\begin{algorithmic}[1]
  \Procedure{Euclid}{$a,b$}\Comment{GCD of $a$ and $b$}
    \State $r_2\gets a\bmod b$
    \While{$r\not=0$}\Comment{$r=0\mapsto\mbox{answer}$}
    \State $a\gets b$
    \State $b\gets r$
    \State $r\gets a\bmod b$
    \EndWhile\label{euclidendwhile2}
  \State \textbf{return} $b$\Comment{The GCD is $b$}
  \EndProcedure
\end{algorithmic}

\captionof{algorithm}{Euclid’s algorithm C}\label{euclidC}
\begin{algorithmic}[1]
  \Procedure{Euclid}{$a,b$}\Comment{GCD of $a$ and $b$}
    \State $r_3\gets a\bmod b$
    \While{$r\not=0$}\Comment{$r=0\mapsto\mbox{answer}$}
    \State $a\gets b$
    \State $b\gets r$
    \State $r\gets a\bmod b$
    \EndWhile\label{euclidendwhile3}
  \State \textbf{return} $b$\Comment{The GCD is $b$}
  \EndProcedure
\end{algorithmic}

\lipsum[1-5]
\end{document}

geometrylipsum仅用于布局和虚拟文本。

还有独立的capt-of包裹做类似的事情,以及ccaption


将事物放在类似浮点的环境中是可能的。将算法集包装在figure(是的,一个figure,或table)环境中,同时仍然使用\captionof{algorithm},或者将它们全部放在每个algorithm都有的环境中\caption。以下显示了前者:

在此处输入图片描述

\documentclass[twocolumn]{article}
\usepackage[margin=1in]{geometry}% http://ctan.org/pkg/geometry
\usepackage{algorithm,algpseudocode,lipsum}% http://ctan.org/pkg/{algorithms,algorithmicx,lipsum}
\usepackage{caption}% http://ctan.org/pkg/caption
\begin{document}
\lipsum[1-2]
\begin{figure}[t]
\captionof{algorithm}{Euclid’s algorithm A}\label{euclidA}
\begin{algorithmic}[1]
  \Procedure{Euclid}{$a,b$}\Comment{GCD of $a$ and $b$}
    \State $r_1\gets a\bmod b$
    \While{$r\not=0$}\Comment{$r=0\mapsto\mbox{answer}$}
    \State $a\gets b$
    \State $b\gets r$
    \State $r\gets a\bmod b$
    \EndWhile\label{euclidendwhile1}
  \State \textbf{return} $b$\Comment{The GCD is $b$}
  \EndProcedure
\end{algorithmic}

\captionof{algorithm}{Euclid’s algorithm B}\label{euclidB}
\begin{algorithmic}[1]
  \Procedure{Euclid}{$a,b$}\Comment{GCD of $a$ and $b$}
    \State $r_2\gets a\bmod b$
    \While{$r\not=0$}\Comment{$r=0\mapsto\mbox{answer}$}
    \State $a\gets b$
    \State $b\gets r$
    \State $r\gets a\bmod b$
    \EndWhile\label{euclidendwhile2}
  \State \textbf{return} $b$\Comment{The GCD is $b$}
  \EndProcedure
\end{algorithmic}

\captionof{algorithm}{Euclid’s algorithm C}\label{euclidC}
\begin{algorithmic}[1]
  \Procedure{Euclid}{$a,b$}\Comment{GCD of $a$ and $b$}
    \State $r_3\gets a\bmod b$
    \While{$r\not=0$}\Comment{$r=0\mapsto\mbox{answer}$}
    \State $a\gets b$
    \State $b\gets r$
    \State $r\gets a\bmod b$
    \EndWhile\label{euclidendwhile3}
  \State \textbf{return} $b$\Comment{The GCD is $b$}
  \EndProcedure
\end{algorithmic}
\end{figure}

\lipsum[1-5]
\end{document}

algorithmic您可能需要调整和之间的空间\captionof以满足您的需要。

答案2

事实证明,您可以通过在算法末尾附加 [H] 将其转换为非浮点数。此代码适用于我想要做的事情:

\begin{figure}

\begin{algorithm}[H]
\caption{Alg 1}
\begin{algorithmic}
\end{algorithmic}
\end{algorithm}

\begin{algorithm}[H]
\caption{Alg 1}
\begin{algorithmic}
\end{algorithmic}
\end{algorithm}

\begin{algorithm}[H]
\caption{Alg 1}
\begin{algorithmic}
\end{algorithmic}
\end{algorithm}

\end{figure}

相关内容