将四个算法(algorithm2e)放置在一个子图中,并排列成两行两列

将四个算法(algorithm2e)放置在一个子图中,并排列成两行两列

我想用该algorithm2e包将四个算法集排列成两行两列,如下图所示。我尝试过该subfigure包,也阅读了几个相关的问题和答案,但到目前为止还无法产生如下所示的输出。

|------------------|       |-------------------|
|                  |       |                   |
|                  |       |                   |
|                  |       |                   |
|                  |       |                   |
|------------------|       |-------------------|
     (a) ...                       (b) ...

|------------------|       |-------------------|
|                  |       |                   |
|                  |       |                   |
|                  |       |                   |
|                  |       |                   |
|------------------|       |-------------------|
     (c) ...                       (d) ...

                  Figure 1: ...

答案1

您可以按如下方式使用包subfigure中的环境subcaption

截屏

请注意,subfigure环境采用相同的可选参数minipage,因此如果您发现自己处于不同大小的代码片段的情况,您可以使用(例如)\begin{subfigure}[t]{.5\textwidth}...

\documentclass{article}
\usepackage{algorithm2e}
\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}

答案2

这里有一个选项——它要求您将每个内容包装algorithm在一个小页面内。

在此处输入图片描述

\documentclass{article}
\usepackage[a3paper,landscape]{geometry}% http://ctan.org/pkg/geometry
\usepackage{algorithm2e}% http://ctan.org/pkg/algorithm2e
\newcommand{\myalg}[1]{%
  \begin{minipage}{.4\linewidth}
    \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\;
        }
      }%
      \caption{How to write algorithms}%
      \label{#1}%
    \end{algorithm}%
  \end{minipage}%
}
\begin{document}

\begin{figure}[htb]
  \null\hfill \myalg{alg1} \hfill \myalg{alg2} \hfill\null\par \medskip
  \null\hfill \myalg{alg3} \hfill \myalg{alg4} \hfill\null
  \caption{Here are some algorithms.}
\end{figure}
\end{document}

在上面的例子中,为了简洁起见,我将命令\myalg{<lab>}排版为相同的algorithm,只是标签不同<lab>。这允许您在实际中引用各个算法figure。当然,您可以将其更改为仅表示(a)、(b)、(c)和(d)。

geometry提供a3paperlandscape方向,因为算法只是示例(很大)。在常规使用中,您可能不需要这样做。.4\linewidth在 中选择 也是如此minipage。您可以根据最终输出调整这一点。minipage还允许使用选项参数指定垂直对齐。因此,例如,如果算法2短于算法 1,您可以指定[t]第二个,以便它们在顶部垂直对齐。

相关内容