两列文档中的多个 algorithm2e 算法

两列文档中的多个 algorithm2e 算法

我试过这个例子将四个算法(algorithm2e)放置在一个子图中,并排列成两行两列在两列文档上。它不起作用。错误消息是

! LaTeX Error: [H] in two columns mode is not allowed for algorithms.

有没有其他路可去?

代码示例为:

\documentclass[twocolumn]{article}
\usepackage{algorithm2e}
\usepackage{caption}
\usepackage{subcaption}


\newcommand{\myalgorithm}{%
\begin{algorithm*}[H]
\SetAlgoLined
\KwData{this text}
\KwResult{how to write algorithm with \LaTeX2e }
initialization\;
\While{not at end of this document}{
read current\;
\eIf{understand}{
go to next section\;
current section becomes this one\;
}{
go back to the beginning of current section\;
}
}
\end{algorithm*}}
\begin{document}

\begin{figure}
    \begin{subfigure}{.5\textwidth}
        \myalgorithm
        \caption{How to write algorithms}
    \end{subfigure}% need this comment symbol to avoid overfull hbox
    \begin{subfigure}{.5\textwidth}
        \myalgorithm
        \caption{How to write algorithms}
    \end{subfigure}\\
    \begin{subfigure}{.5\textwidth}
        \myalgorithm
        \caption{How to write algorithms}
    \end{subfigure}%
    \begin{subfigure}{.5\textwidth}
        \myalgorithm
        \caption{How to write algorithms}
    \end{subfigure}
\caption{Main caption}
\end{figure}


\end{document}

答案1

algorithm2e提供自己的[H]浮点参数,从而避免将其内容设置为浮点。但是,在twocolumn模式下,它会产生错误。我不确定为什么。您可以通过暂时设置\@latex@error为来避免这种情况。使用您的示例,我在...中\@gobble添加了一个\removelatexerror宏。更具体地说,定义\begingroup\endgroup

\makeatletter
\newcommand{\removelatexerror}{\let\@latex@error\@gobble}
\makeatother

放置在一个组内,组内\myalgorithm

\newcommand{\myalgorithm}{%
\begingroup
\removelatexerror% Nullify \@latex@error
\begin{algorithm*}[H]
%...
\end{algorithm*}
\endgroup}

此外,由于您将 4 种算法分布在两列中,因此最好使用figure*而不是figure

enter image description here

显然你不会\myalgorithm在实际文档中使用。你可以将其放置\removelatexerror在每个subfigure环境中。

答案2

我遇到过类似的问题...

我只是从代码中删除了 [H],如下所示。

\begin{algorithm*}[H]

\begin{algorithm*}

然后问题解决了。

相关内容