我试过这个例子将四个算法(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
:
显然你不会\myalgorithm
在实际文档中使用。你可以将其放置\removelatexerror
在每个subfigure
环境中。
答案2
我遇到过类似的问题...
我只是从代码中删除了 [H],如下所示。
\begin{algorithm*}[H]
到
\begin{algorithm*}
然后问题解决了。