使算法显示在段落后并分成几页

使算法显示在段落后并分成几页

我用algorithmicx它来编写算法。我希望能够编写算法,使它们紧跟在编写的段落之后,并且如果空间不够,可以将它们从一页的末尾拆分到下一页的开头。

如何做?

答案1

要分解你的帖子,你需要:

  1. 让算法在讨论它的段落之后立即出现;
  2. 将算法分成多个页面(如果可能的话)。

为了实现两个都请求,您不能将您的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包裹可以轻松打破跨页面的装饰框架:

在此处输入图片描述

这可以扩展为将项目也包含到“算法列表”中。

相关内容