考虑以下简短的例子,其中选择一个两列页面,并使用手动将算法拆分到两列中\pagebreak
在算法代码中:
\documentclass[twocolumn]{article}
\usepackage[english]{babel}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithmic} [1]
\State Let $a \gets b + c$
\State Let $a \gets b + c$
\pagebreak
\State Let $a \gets b + c$
\State Let $a \gets b + c$
\end{algorithmic}
\end{document}
结果如下:
现在,通过将代码放入浮点数中,我不再可以通过以下方式拆分算法\pagebreak
:
\documentclass[twocolumn]{article}
\usepackage[english]{babel}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\begin{algorithm*}[t]
\caption{Test}
\begin{algorithmic} [1]
\State Let $a \gets b + c$
\State Let $a \gets b + c$
\pagebreak
\State Let $a \gets b + c$
\State Let $a \gets b + c$
\end{algorithmic}
\end{algorithm*}
\end{document}
结果:
如何在浮点数中获得相同的效果?您能否建议一种不特定于algpseudocode
且algorithm2e
同样适用于 的方法?(后者\pagebreak
代码中不支持。)
答案1
algorithm
&algorithmic
algorithmic
将您的环境包装成multicols
一个。无需发出\pagebreak
。参考:将一个算法放在两列中
\documentclass{article}
\usepackage{lipsum}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{multicol}
\begin{document}
\lipsum[1]
\begin{algorithm}
\caption{Calculate $y = x^n$}
\label{alg1}
\begin{multicols}{2}
\begin{algorithmic}[1]
\State Let $a \gets b + c$
\State Let $a \gets b + c$
\State Let $a \gets b + c$
\State Let $a \gets b + c$
\end{algorithmic}
\end{multicols}
\end{algorithm}
\lipsum[2]
\end{document}
algorithm2e
同样的策略。但请注意,在下面的示例中,while 循环主体内不能出现分页符。一般来说,由于algorithm2e
控制流宏 (\eg \While{...}
) 的定义方式,使用 排版的双列算法看起来可能不如使用和algorithm2e
排版的算法好看。如果我是你,我会坚持使用后者。algorithm
algorithmic
\documentclass{article}
\usepackage{lipsum}
\usepackage[algo2e]{algorithm2e}
\usepackage{multicol}
\begin{document}
\lipsum[1]
\begin{algorithm2e}
\caption{Bisection}
\label{bisect}
\begin{multicols}{2}
\KwIn{function $f$, reals $a,b \in D_f$ s.t. $f(a)f(b)<0$, tolerance $tol$}
\KwOut{an approximate root of function $f$}
\While{$(b-a)/2>tol$}
{$c \leftarrow (a+b)/2$\;
\If{$f(c)=0$}{break}
\eIf{$f(a)f(c)<0$}
{$b \leftarrow c$}
{$a \leftarrow c$}
}
\KwRet{$(a+b)/2$}
\end{multicols}
\end{algorithm2e}
\lipsum[2]
\end{document}