我用algorithmicx
它来编写算法。我希望能够编写算法,使它们紧跟在编写的段落之后,并且如果空间不够,可以将它们从一页的末尾拆分到下一页的开头。
如何做?
答案1
要分解你的帖子,你需要:
- 让算法在讨论它的段落之后立即出现;
- 将算法分成多个页面(如果可能的话)。
为了实现两个都请求,您不能将您的algorithmicx
环境放在algorithm
环境中,因为后者是浮动的。而且,浮动会四处移动。此外,浮动不会跨越页面。因此,您必须创建自己的环境来考虑算法标题和数字。这是一个非常基本的例子,说明了这将需要什么:
\documentclass{article}
\usepackage{algorithmicx}% http://ctan.org/pkg/algorithmicx
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\usepackage{xifthen}% http://ctan.org/pkg/xifthen
\usepackage{needspace}% http://ctan.org/pkg/needspace
\usepackage{hyperref}% http://ctan.org/pkg/hyperref
% ================ ALGORITHM ENVIRONMENT ================
\newcounter{myalg}% Algorithm counter
\newenvironment{myalg}[1][]%
{% \begin{myalg}[#1]
\needspace{2\baselineskip}% At least 2\baselineskip required, otherwise break
\noindent \rule{\linewidth}{1pt} \endgraf% Top rule
\refstepcounter{myalg}% For correct reference of algorithm
\centering \textsc{Algorithm}~\themyalg%
\ifthenelse{\isempty{#1}}{}{:\ #1}% Typeset name (if provided)
}{% \end{myalg}
\noindent \rule{\linewidth}{1pt}% Bottom rule
}%
\begin{document}
\lipsum[1-4]
Here is Algorithm~\ref{first-alg}:
\begin{myalg}[My first algorithm]
\label{first-alg}
\begin{algorithmic}[1]
\State This is some code
\State This is some more code
\State Here is some code
\State This is some code
\State This is some more code
\State Here is some code
\State This is some code
\State This is some more code
\State Here is some code
\State This is some code
\State This is some more code
\State Here is some code
\end{algorithmic}
\end{myalg}
That was Algorithm~\ref{first-alg}.
\lipsum[4-6]
\end{document}
在上面的例子中,myalg
环境不浮动,并替换原始algorithm
环境。作为可选参数,myalg
将排版标题。xifthen
包裹提供条件子句来检查是否有标题。needspace
包裹页面上剩余空间的大小。为了避免页面底部出现规则或标题,needspace
如果\break
剩余空间少于2\baselineskip
如果页面上剩余hyperref
包裹也包括向您展示超链接正常工作,而lipsum
包裹提供虚拟文本。
如果你想要为你的算法添加更多鲜艳的装饰,那么mdframed
包裹可以轻松打破跨页面的装饰框架:
这可以扩展为将项目也包含到“算法列表”中。