|
|
- % ALGORITHMICPLUS STYLE
- % for LaTeX version 2e
- % Original ``algorithmic.sty'' by -- 1994 Peter Williams <pwil3058@bigpond.net.au>
- % Bug fix (13 July 2004) by Arnaud Giersch <giersch@icps.u-strasbg.fr>
- % Includes ideas from 'algorithmicext' by Martin Biely
- % <biely@ecs.tuwien.ac.at> and 'distribalgo' by Xavier Defago
- % Modifications: Martin Hutle <martin.hutle@epfl.ch>
- %
- % This style file is free software; you can redistribute it and/or
- % modify it under the terms of the GNU Lesser General Public
- % License as published by the Free Software Foundation; either
- % version 2 of the License, or (at your option) any later version.
- %
- % This style file is distributed in the hope that it will be useful,
- % but WITHOUT ANY WARRANTY; without even the implied warranty of
- % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- % Lesser General Public License for more details.
- %
- % You should have received a copy of the GNU Lesser General Public
- % License along with this style file; if not, write to the
- % Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- % Boston, MA 02111-1307, USA.
- %
- \NeedsTeXFormat{LaTeX2e}
- \ProvidesPackage{algorithmicplus}
- \typeout{Document Style `algorithmicplus' - environment, replaces `algorithmic'}
- %
- \RequirePackage{ifthen}
- \RequirePackage{calc}
- \newboolean{ALC@noend}
- \setboolean{ALC@noend}{false}
- \newcounter{ALC@line}
- \newcounter{ALC@rem}
- \newcounter{ALC@depth}
- \newcounter{ALCPLUS@lastline}
- \newlength{\ALC@tlm}
- %
- \DeclareOption{noend}{\setboolean{ALC@noend}{true}}
- %
- \ProcessOptions
- %
- % ALGORITHMIC
- \newcommand{\algorithmiclnosize}{\small}
- \newcommand{\algorithmiclnofont}{\tt}
- \newcommand{\algorithmiclnodelimiter}{:}
- %
- \newcommand{\algorithmicrequire}{\textbf{Require:}}
- \newcommand{\algorithmicensure}{\textbf{Ensure:}}
- \newcommand{\algorithmiccomment}[1]{\{#1\}}
- \newcommand{\algorithmicend}{\textbf{end}}
- \newcommand{\algorithmicif}{\textbf{if}}
- \newcommand{\algorithmicthen}{\textbf{then}}
- \newcommand{\algorithmicelse}{\textbf{else}}
- \newcommand{\algorithmicelsif}{\algorithmicelse\ \algorithmicif}
- \newcommand{\algorithmicendif}{\algorithmicend\ \algorithmicif}
- \newcommand{\algorithmicfor}{\textbf{for}}
- \newcommand{\algorithmicforall}{\textbf{for all}}
- \newcommand{\algorithmicdo}{\textbf{do}}
- \newcommand{\algorithmicendfor}{\algorithmicend\ \algorithmicfor}
- \newcommand{\algorithmicwhile}{\textbf{while}}
- \newcommand{\algorithmicendwhile}{\algorithmicend\ \algorithmicwhile}
- \newcommand{\algorithmicloop}{\textbf{loop}}
- \newcommand{\algorithmicendloop}{\algorithmicend\ \algorithmicloop}
- \newcommand{\algorithmicrepeat}{\textbf{repeat}}
- \newcommand{\algorithmicuntil}{\textbf{until}}
- \def\ALC@item[#1]{%
- \if@noparitem \@donoparitem
- \else \if@inlabel \indent \par \fi
- \ifhmode \unskip\unskip \par \fi
- \if@newlist \if@nobreak \@nbitem \else
- \addpenalty\@beginparpenalty
- \addvspace\@topsep \addvspace{-\parskip}\fi
- \else \addpenalty\@itempenalty \addvspace\itemsep
- \fi
- \global\@inlabeltrue
- \fi
- \everypar{\global\@minipagefalse\global\@newlistfalse
- \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
- \penalty\z@ \fi
- \everypar{}}\global\@nobreakfalse
- \if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi
- \sbox\@tempboxa{\makelabel{#1}}%
- \global\setbox\@labels
- \hbox{\unhbox\@labels \hskip \itemindent
- \hskip -\labelwidth \hskip -\ALC@tlm
- \ifdim \wd\@tempboxa >\labelwidth
- \box\@tempboxa
- \else \hbox to\labelwidth {\unhbox\@tempboxa}\fi
- \hskip \ALC@tlm}\ignorespaces}
- %
- \newenvironment{algorithmic}[1][0]{
- \setcounter{ALC@depth}{\@listdepth}%
- \let\@listdepth\c@ALC@depth%
- \let\@item\ALC@item
- \newcommand{\ALC@lno}{%
- \ifthenelse{\equal{\arabic{ALC@rem}}{0}}
- {{\algorithmiclnosize\algorithmiclnofont \arabic{ALC@line}\algorithmiclnodelimiter}}{}%
- }
- \let\@listii\@listi
- \let\@listiii\@listi
- \let\@listiv\@listi
- \let\@listv\@listi
- \let\@listvi\@listi
- \let\@listvii\@listi
- \newenvironment{ALC@g}{
- \begin{list}{\ALC@lno}{ \itemsep\z@ \itemindent\z@
- \listparindent\z@ \rightmargin\z@
- \topsep\z@ \partopsep\z@ \parskip\z@\parsep\z@
- \leftmargin 1em
- \addtolength{\ALC@tlm}{\leftmargin}
- }
- }
- {\end{list}}
- \newcommand{\ALC@it}{\refstepcounter{ALC@line}\addtocounter{ALC@rem}{1}\ifthenelse{\equal{\arabic{ALC@rem}}{#1}}{\setcounter{ALC@rem}{0}}{}\item}
- \newcommand{\ALC@com}[1]{\ifthenelse{\equal{##1}{default}}%
- {}{\ \algorithmiccomment{##1}}}
- \newcommand{\REQUIRE}{\item[\algorithmicrequire]}
- \newcommand{\ENSURE}{\item[\algorithmicensure]}
- \newcommand{\STATE}{\ALC@it}
- \newcommand{\COMMENT}[1]{\algorithmiccomment{##1}}
- \newenvironment{ALC@if}{\begin{ALC@g}}{\end{ALC@g}}
- \newenvironment{ALC@for}{\begin{ALC@g}}{\end{ALC@g}}
- \newenvironment{ALC@whl}{\begin{ALC@g}}{\end{ALC@g}}
- \newenvironment{ALC@loop}{\begin{ALC@g}}{\end{ALC@g}}
- \newenvironment{ALC@rpt}{\begin{ALC@g}}{\end{ALC@g}}
- \renewcommand{\\}{\@centercr}
- \newcommand{\IF}[2][default]{\ALC@it\algorithmicif\ ##2\ \algorithmicthen%
- \ALC@com{##1}\begin{ALC@if}}
- \newcommand{\ELSE}[1][default]{\end{ALC@if}\ALC@it\algorithmicelse%
- \ALC@com{##1}\begin{ALC@if}}
- \newcommand{\ELSIF}[2][default]%
- {\end{ALC@if}\ALC@it\algorithmicelsif\ ##2\ \algorithmicthen%
- \ALC@com{##1}\begin{ALC@if}}
- \newcommand{\FOR}[2][default]{\ALC@it\algorithmicfor\ ##2\ \algorithmicdo%
- \ALC@com{##1}\begin{ALC@for}}
- \newcommand{\FORALL}[2][default]{\ALC@it\algorithmicforall\ ##2\ %
- \algorithmicdo%
- \ALC@com{##1}\begin{ALC@for}}
- \newcommand{\WHILE}[2][default]{\ALC@it\algorithmicwhile\ ##2\ %
- \algorithmicdo%
- \ALC@com{##1}\begin{ALC@whl}}
- \newcommand{\LOOP}[1][default]{\ALC@it\algorithmicloop%
- \ALC@com{##1}\begin{ALC@loop}}
- \newcommand{\REPEAT}[1][default]{\ALC@it\algorithmicrepeat%
- \ALC@com{##1}\begin{ALC@rpt}}
- \newcommand{\UNTIL}[1]{\end{ALC@rpt}\ALC@it\algorithmicuntil\ ##1}
- \ifthenelse{\boolean{ALC@noend}}{
- \newcommand{\ENDIF}{\end{ALC@if}}
- \newcommand{\ENDFOR}{\end{ALC@for}}
- \newcommand{\ENDWHILE}{\end{ALC@whl}}
- \newcommand{\ENDLOOP}{\end{ALC@loop}}
- }{
- \newcommand{\ENDIF}{\end{ALC@if}\ALC@it\algorithmicendif}
- \newcommand{\ENDFOR}{\end{ALC@for}\ALC@it\algorithmicendfor}
- \newcommand{\ENDWHILE}{\end{ALC@whl}\ALC@it\algorithmicendwhile}
- \newcommand{\ENDLOOP}{\end{ALC@loop}\ALC@it\algorithmicendloop}
- }
- \renewcommand{\@toodeep}{}
- \begin{list}{\ALC@lno}{\setcounter{ALC@line}{0}\setcounter{ALC@rem}{0}%
- \itemsep\z@ \itemindent\z@ \listparindent\z@%
- \partopsep\z@ \parskip\z@ \parsep\z@%
- \labelsep 0.5em \topsep 0.2em%
- \ifthenelse{\equal{#1}{0}}
- {\labelwidth 0.5em }
- {\labelwidth 1.2em }
- \leftmargin\labelwidth \addtolength{\leftmargin}{\labelsep}
- \ALC@tlm\labelsep
- }
- }
- {%
- \setcounter{ALCPLUS@lastline}{\value{ALC@line}}%
- \end{list}}
-
- \newcommand{\continuecounting}{\setcounter{ALC@line}{\value{ALCPLUS@lastline}}}
- \newcommand{\startcounting}[1]{\setcounter{ALC@line}{#1}\addtocounter{ALC@line}{-1}}
-
- \newcommand{\EMPTY}{\item[]}
- \newcommand{\SPACE}{\vspace{3mm}}
- \newcommand{\SHORTSPACE}{\vspace{1mm}}
- \newcommand{\newlinetag}[3]{\newcommand{#1}[#2]{\item[#3]}}
- \newcommand{\newconstruct}[5]{%
- \newenvironment{ALC@\string#1}{\begin{ALC@g}}{\end{ALC@g}}
- \newcommand{#1}[2][default]{\ALC@it#2\ ##2\ #3%
- \ALC@com{##1}\begin{ALC@\string#1}}
- \ifthenelse{\boolean{ALC@noend}}{
- \newcommand{#4}{\end{ALC@\string#1}}
- }{
- \newcommand{#4}{\end{ALC@\string#1}\ALC@it#5}
- }
- }
-
- \newconstruct{\INDENT}{}{}{\ENDINDENT}{}
-
- \newcommand{\setlinenosize}[1]{\renewcommand{\algorithmiclnosize}{#1}}
- \newcommand{\setlinenofont}[1]{\renewcommand{\algorithmiclnofont}{#1}}
|