我有以下代码:
\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}