mpf@triplea.cs.umd.edu (Martin Farach) (03/16/90)
I recently posted a request for an Algorithm environment for Latex.
It turns out that someone wrote one locally so here it is
algorithm.sty:
%%%%%%%%%%% ALGORITHMS STYLE %%%%%%%%%%%
% This style defines an environment for algorithms with the following
% features:
%
% 1) Defines an Theorem like environment (not exactly one) for
% algorithms called ``algorithm''.
% \begin{algorithm}{NAME} ... \end{algorithm}
% NAME is the NAME of the algorithm.
% Algorithms are numbered using a counter called ``algorithm''.
%
% 2) Inside this environment, the following commands are defined.
%
% \= Put the small left arrow commonly used for assignment.
%
% \invariant{INVARIANT} Use to describe invariants, put its parameter
% between ``{}'' in math mode.
%
% \begin{Block} ... \end{Block} Environment use to start a indented
% block of instructions \end{Block} put
% an ``end'' to close the block.
%
% \nextBlock{SEPARATOR} Inside a Block, it allows to put a separator
% of parts of the indented block. Usefull for
% constructions like ``IF..THEN..ELSE..END''
% i.e. If cond then
% \begin{Block}
% then part
% \nextBlock{else}
% else part
% \end{Block}
%
% 3) \Blockindent and \algorithmindent are length that specify the
% indentention of Blocks and of the algorithm resp.
%
% 4) Instructions are separated by ``\\'', ``\par'' or by leaving a
% blank line. Before an ``\end{Block}'' a ``\\'' can't be used.
%
%
% Created by Jose Alberto Fernandez R.
% e-mail: alberto@cs.umd.edu
%
%
\newcounter{algorithm}
\newtheorem{Alg@orithm}[algorithm]{Algorithm}
% Invariants
\newcommand{\inv@ariant}[1]{\mbox{$\{#1\}$}}
% Steps environment
\newenvironment{ste@ps}[1]{
\begin{list}{}
{\setlength\labelsep{0in}
\addtolength\partopsep\topsep
\addtolength\partopsep\parsep
\setlength\parsep{0in}
\setlength\topsep{0in}
\setlength\itemsep{0in}
\setlength\labelwidth{0in}
\setlength\rightmargin{0in}
\setlength\leftmargin{#1}}
}{
\end{list}
}
% Block environment
% Indentation of the Block
\newlength{\Blockindent}
% NextBlock command
\newcommand{\next@Block}[1]{
\end{ste@ps}
#1
\begin{ste@ps}{\Blockindent}
\item
}
\newenvironment{Blo@ck}{
\let\nextBlock\next@Block
\begin{ste@ps}{\Blockindent}
\item
}{
\end{ste@ps}
end
}
% Algorithm environment
% Assign command
\newcommand{\ass@ign}{\mbox{$\leftarrow$}}
% Indentation of the algorithm
\newlength{\algorithmindent}
% Algorithm definition
\newenvironment{algorithm}[1]{
\let\=\ass@ign
\let\invariant\inv@ariant
\let\Block\Blo@ck
\let\endBlock\endBlo@ck
\begin{Alg@orithm} #1
\rm\par
\begin{ste@ps}{\algorithmindent}
\item
}{
\end{ste@ps}
\bf end
\end{Alg@orithm}
}
% Setting default indentation
\setlength{\algorithmindent}{1em}
\setlength{\Blockindent}{2em}
% End of algorithm.sty
If anyone has any comments, please mail them to me (at mpf@cs.umd.edu)
and I will pass them along.
Thanks,
Martin Farach
mpf@cs.umd.edu
--
*******************************************************************************
* Martin Farach | *
* University of Maryland | *
* Department of Computer Science | *
* College Park, Maryland 20742 | *
* | *
* also know as: | *
* mpf@cs.umd.edu | *
*******************************************************************************