Permalink
Cannot retrieve contributors at this time
tps/algorithmic.sty
Go to file% ALGORITHMIC STYLE for LaTeX version 2e | |
% | |
% 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{algorithmic}[2005/07/05] | |
\typeout{Document Style `algorithmic' - environment} | |
% | |
\RequirePackage{ifthen} | |
\RequirePackage{calc} | |
\RequirePackage{keyval} | |
\newboolean{ALC@noend} | |
\setboolean{ALC@noend}{false} | |
\newcounter{ALC@line} | |
\newcounter{ALC@rem} | |
\newcounter{ALC@depth} | |
\newlength{\ALC@tlm} | |
% | |
\DeclareOption{noend}{\setboolean{ALC@noend}{true}} | |
% | |
\ProcessOptions | |
% | |
% For keyval-style options | |
\def\algsetup{\setkeys{ALG}} | |
% | |
% For indentation of algorithms | |
\newlength{\algorithmicindent} | |
\setlength{\algorithmicindent}{0pt} | |
\define@key{ALG}{indent}{\setlength{\algorithmicindent}{#1}} | |
\ifthenelse{\lengthtest{\algorithmicindent=0pt}}% | |
{\setlength{\algorithmicindent}{1em}}{} | |
% | |
% For line numbers' delimiters | |
\newcommand{\ALC@linenodelimiter}{:} | |
\define@key{ALG}{linenodelimiter}{\renewcommand{\ALC@linenodelimiter}{#1}} | |
% | |
% For line numbers' size | |
\newcommand{\ALC@linenosize}{\footnotesize} | |
\define@key{ALG}{linenosize}{\renewcommand{\ALC@linenosize}{#1}} | |
% | |
% ALGORITHMIC | |
\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}} | |
\newcommand{\algorithmicprint}{\textbf{print}} | |
\newcommand{\algorithmicreturn}{\textbf{return}} | |
\def\ALC@setref{% | |
\def\@currentlabel{\theALC@line}% | |
} | |
\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}} | |
{{\ALC@linenosize \arabic{ALC@line}\ALC@linenodelimiter}}{}% | |
} | |
\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 \algorithmicindent%1em | |
\addtolength{\ALC@tlm}{\leftmargin} | |
} | |
} | |
{\end{list}} | |
\newcommand{\ALC@it}{\refstepcounter{ALC@line}\refstepcounter{ALC@rem}\ifthenelse{\equal{\arabic{ALC@rem}}{#1}}{\setcounter{ALC@rem}{0}}{}\item\ALC@setref} | |
\newcommand{\ALC@com}[1]{\ifthenelse{\equal{##1}{default}}% | |
{}{\ \algorithmiccomment{##1}}} | |
\newcommand{\REQUIRE}{\item[\algorithmicrequire]} | |
\newcommand{\ENSURE}{\item[\algorithmicensure]} | |
\newcommand{\PRINT}{\ALC@it\algorithmicprint{}\ \ } | |
\newcommand{\RETURN}{\ALC@it\algorithmicreturn{}\ \ } | |
\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 | |
} | |
} | |
{\end{list}} |