在表格中为算法提供单独的标题

在表格中为算法提供单独的标题

我有以下代码:

\documentclass[10pt,conference,compsocconf,letterpaper]{IEEEtran}
\usepackage{algpseudocode}
\usepackage{algorithm}
\begin{document}
\begin{algorithm*}%[H]
    \begin{tabular}{c|c}
        \begin{minipage}{0.45\textwidth}
            \begin{algorithmic}[1]
                \State $c_x = c_x + 1$
            \end{algorithmic}
            \caption{Alg A}
            \label{alg:a}                           
        \end{minipage}
        &
        \begin{minipage}{0.45\textwidth}    
            \begin{algorithmic}[1]
                \State $c_x = c_m + 1$  
            \end{algorithmic}
            \caption{Alg B}
            \label{alg:b}
        \end{minipage}
    \end{tabular}
\end{algorithm*}\end{document}

其结果为: 在此处输入图片描述

请注意,它没有显示 Alg A 的标题,因为它被 B 的标题覆盖了。

如何让每个算法的标题显示在算法上方?


我尝试使用该%\usepackage{subcaption}包,但它与我正在使用的其他包冲突,不确定是哪一个(可能subfig)。

答案1

如果你algorithm使用[H]浮点说明符设置一个,它实际上是在里面设置的minipage。这意味着你可以从技术上将算法放在里面其他浮动(类似figure,获得 典型的浮动行为algorithm),但仍然获得对 s 的标题和引用algorithm

在此处输入图片描述

\documentclass{article}

\usepackage{algpseudocode,algorithm}
\usepackage{lipsum}% Just for this example

\begin{document}

\lipsum[1]

See Algorithm~\ref{alg:a} and~\ref{alg:b} for more detail.

\begin{figure}[ht]
  \begin{minipage}[t]{.475\textwidth}
    \vspace*{-\baselineskip}% Vertical correction
    \begin{algorithm}[H]
      \caption{Alg A}\label{alg:a}
      \begin{algorithmic}[1]
        \State $c_x = c_x + 1$
        \State $d_y = d_y - 1$
      \end{algorithmic}
    \end{algorithm}
  \end{minipage}%
  \hfill\vrule\hfill
  \begin{minipage}[t]{.475\textwidth}
    \vspace*{-\baselineskip}% Vertical correction
    \begin{algorithm}[H]
      \caption{Alg B}\label{alg:b}
      \begin{algorithmic}[1]
        \State $c_x = c_m + 1$
      \end{algorithmic}
    \end{algorithm}
  \end{minipage}
\end{figure}

\end{document}

为了限制非浮动元素的宽度algorithm,我们将其放置在minipage固定宽度的元素内。op [t]-alignment 可确保不同大小(垂直)的算法正确对齐(如果没有此规范,则默认对齐方式为垂直居中)。

\vrule将两种算法区分开来,就像将其放在tabular具有垂直列规则的算法中一样。


如果使用IEEEtran文档类你可以将算法以与上述相同的格式放置在

\begin{figure*}[!t]
  <algorithms here>
\end{figure*}

双栏图。请注意,该图将仅出现在页面上下列的其声明,按照双栏文件的惯例。

在此处输入图片描述

\documentclass[conference,letterpaper]{IEEEtran}

\usepackage{algpseudocode,algorithm}
\usepackage{lipsum}% Just for this example

\begin{document}

% Algorithms are declared on page 1, but will only show at top of page 2.
\begin{figure*}[!t]
  \begin{minipage}[t]{.475\textwidth}
    \vspace*{-\baselineskip}% Vertical correction
    \begin{algorithm}[H]
      \caption{Alg A}\label{alg:a}
      \begin{algorithmic}[1]
        \State $c_x = c_x + 1$
        \State $d_y = d_y - 1$
      \end{algorithmic}
    \end{algorithm}
  \end{minipage}%
  \hfill\vrule\hfill
  \begin{minipage}[t]{.475\textwidth}
    \vspace*{-\baselineskip}% Vertical correction
    \begin{algorithm}[H]
      \caption{Alg B}\label{alg:b}
      \begin{algorithmic}[1]
        \State $c_x = c_m + 1$
      \end{algorithmic}
    \end{algorithm}
  \end{minipage}
\end{figure*}

See Algorithm~\ref{alg:a} and~\ref{alg:b} for more detail.
\lipsum[1-17]

\end{document}

答案2

\documentclass{article}
\usepackage{algpseudocode}
\usepackage{algorithm}
\begin{document}
\begin{algorithm*}%[H]
\begin{tabular}{c|c}
\multicolumn{2}{c}{Algorithm}\\
\hline
Alg A & Alg B\\
\hline
\begin{minipage}{0.45\textwidth}
\begin{algorithmic}[1]
   \State $c_x = c_x + 1$
\end{algorithmic}
\end{minipage}
&
\begin{minipage}{0.45\textwidth}
\begin{algorithmic}[1]
\State $c_x = c_m + 1$  
\end{algorithmic}
\end{minipage}
\end{tabular}
\end{algorithm*}
\end{document}

输出 算法

相关内容