% \iffalse % % Copyright (C) 1996-1998 by Jochen R"utschlin. All rights reserved. % % This file is part of the `algorthm' package. % % IMPORTANT NOTICE: % % You are not allowed to change this file. % % You are NOT ALLOWED to distribute this file alone. You are NOT % ALLOWED to take money for the distribution or use of this file (or % a changed version). % % If you receive only some of these files from someone, complain! % % \fi % % \CheckSum{100} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \iffalse %<*driver> \documentclass[a4paper,11pt]{ltxdoc} \DisableCrossrefs \OnlyDescription \pagestyle{empty} \usepackage[german]{babel} \usepackage{typearea} \typearea{15} \usepackage{multicol} \renewcommand{\meta}[1]{{\normalfont\textit{#1}}} \renewcommand{\DescribeMacro}[1]{\relax} \renewcommand{\DescribeEnv}[1]{\relax} \newcommand*{\Describe}[1]{% \bigskip\noindent\fbox{\footnotesize\texttt{\bslash{}#1}}\par\smallskip} \begin{document} \DocInput{algorthm.dtx} \end{document} % % \fi % % \title{Das \textsf{algorthm} Paket v1.2b} % \author{Jochen R"utschlin} % \date{19.\ M"arz 1998} % \maketitle % % \thispagestyle{empty} % % \begin{abstract} % Makros f"ur die Darstellung von Algorithmen in einer % Pseudo-Programmiersprache. % \end{abstract} % % \noindent\rule{\hsize}{.4pt} % % \begin{multicols}{2} % \Describe{begin\{algorithm\}\oarg{Name}\ \ldots\ \bslash{}end\{algorithm\}}% % \DescribeEnv{algorithm}% % Die Umgebung, innerhalb der die folgenden Befehle angewendet werden % k"onnen und die die korrekte Formatierung (Einr"uckung) der Befehle % steuert. Optional kann ein \meta{Name} f"ur den Algorithmus bzw.\ % die Prozedur angegeben werden, der in Capit"alchen "uber den % Algorithmus gesetzt wird. Die Zeilen der Algorithmusdarstellung % werden fortlaufend durchnumeriert. % % % % % \Describe{keyword\marg{Schl"usselwort}}% % \DescribeMacro{\keyword}% % Darstellung des \meta{Schl"usselwort}es in der Schriftart f"ur % Schl"usselw"orter. % % % % \Describe{assign\marg{Variable}\marg{Wert}}% % \DescribeMacro{\assign}% % Darstellung einer Wertzuweisung ohne Zeilenvorschub zur Verwendung % innerhalb eines anderen Befehls (z.\,B.\ als Initialisierung einer % \texttt{for}-Schleife). Die Verarbeitung von \meta{Variable} und % \meta{Wert} erfolgt im Mathematikmodus. % % % % \Describe{assignment\marg{Variable}\marg{Wert}}% % \DescribeMacro{\assignment}% % Darstellung einer Wertzeugweisung als eigenst"andige Anweisung (wie % \verb+\assign+, nur mit einem Zeilenvorschub am Ende der Zeile). Die % Verarbeitung von \meta{Variable} und \meta{Wert} erfolgt im % Mathematikmodus. % % % % \Describe{function\marg{Funktionsname}\oarg{Argument}}% % \DescribeMacro{\function}% % Darstellung eines Funktionsaufrufes ohne Zeilenvorschub zur Verwendung % innerhalb eines anderen Befehls (z.\,B.\ als rechte Seite einer % Wertzuweisung). Die Verarbeitung von \meta{Argument} erfolgt im % Mathematikmodus. % % % % \Describe{functioncall\marg{Funktionsname}\oarg{Argument}}% % \DescribeMacro{\functioncall}% % Darstellung eines Funktionsaufrufes als eigenst"andige Anweisung (wie % \verb+\function+, nur mit einem Zeilenvorschub am Ende der Zeile). Die % Verarbeitung von \meta{Argument} erfolgt im Mathematikmodus. % % % % \Describe{command\marg{Anweisung}\marg{Argument}}% % \DescribeMacro{\command}% % Darstellung einer Anweisung mit der Bezeichnung \meta{Anweisung} in der % Schl"usselwortschriftart mit zus"atzlichem \meta{Argument} (z.\,B.\ zur % Darstellung einer \texttt{return}-Anweisung). Die Verarbeitung von % \meta{Argument} erfolgt im Mathematikmodus. % % % % \Describe{command*\marg{Anweisung}\marg{Argument}}% % \DescribeMacro{\command*}% % Darstellung einer Anweisung mit der Bezeichnung \meta{Anweisung} in der % Schl"usselwortschriftart mit zus"atzlichem \meta{Argument} in % Anf"uhrungszeichen (z.\,B.\ zur Darstellung einer Fehlermeldung). % % % % \Describe{metacommand\marg{Text}}% % \DescribeMacro{\metacommand}% % Darstellung einer Anweisung, die aus erkl"arendem \meta{Text} besteht. % % % % \Describe{whileloop\marg{boolean}\marg{Rumpf\}}}% % \DescribeMacro{\whileloop}% % Darstellung einer \texttt{while}-Schleife mit der % Aus"-f"uhr"-ungs"-be"-ding"-ung \meta{boolean} und dem Schleifenrumpf % \meta{Rumpf}. Die Verarbeitung von \meta{boolean} erfolgt im % Mathematikmodus. % % % % \Describe{repeatloop\marg{Rumpf}\marg{boolean}}% % \DescribeMacro{\repeatloop}% % Darstellung einer \texttt{repeat}-\texttt{until}-Schleife mit der % Abbruchbedingung \meta{boolean} und dem Schleifenrumpf \meta{Rumpf}. % Die Verarbeitung von \meta{boolean} erfolgt im Mathematikmodus. % % % % \Describe{doloop}% % \DescribeMacro{doloop\marg{Rumpf}}% % Darstellung einer \texttt{do}-Schleife (Endlosschleife) mit dem % Schleifenrumpf \meta{Rumpf}. % % % % \Describe{forloop\marg{von}\marg{bis}\oarg{Schritte}\marg{Rumpf}} % \DescribeMacro{\forloop}% % Darstellung einer \texttt{for}-Schleife mit der Initialisierungsanweisung % \meta{von}, der Abbruchbedingung (obere oder unter Grenze der Laufvariablen) % \meta{bis}, einer Optionalen Angabe der Schrittweite \meta{Schritte} und % dem Schleifenrumpf \meta{Rumpf}. Die Verarbeitung von \meta{von}, % \meta{bis} und \meta{Schritte} erfolgt im Mathematikmodus. % % % % \Describe{forloop*\marg{von}\marg{bis}\oarg{Schritte}\marg{Rumpf}} % \DescribeMacro{\forloop*} % Eine Sternform des vorherigen Befehls stellt ebenfalls eine % \texttt{for}-Schleife dar, f"ugt jedoch zwischen den Werten \meta{von} % und \meta{bis} anstelle des Schl"usselwortes \glqq{}to\grqq{} das Wort % \glqq{}downto\grqq{} ein. % % % % \Describe{foreachloop\marg{Menge}\marg{Rumpf}} % \DescribeMacro{\foreachloop}% % Darstellung einer \texttt{for}-Schleife, die "uber die Elemente % einer \meta{Menge} l"auft und den Schleifenrumpf \meta{Rumpf} % hat. Die Verarbeitung von \meta{Menge} erfolgt im Mathematikmodus. % % % % \Describe{conditional\marg{boolean}\marg{then-Zweig}\oarg{else-Zweig}} % \DescribeMacro{\conditional}% % Darstellung einer \texttt{if}-Anweisung, deren Wahrheitswert % \meta{boolean} ist und die einen (zwingenden) \meta{then-Zweig} % und einen optionalen \meta{else-Zweig} hat. Die Verarbeitung von % \meta{boolean} erfolgt im Mathematikmodus. % \end{multicols} % \StopEventually{} % \iffalse %<*package> % \fi % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{algorthm} [1997/03/19 v1.2b algorithm formating package (jr)] % \end{macrocode} % % \begin{macrocode} \DeclareOption{german}{% \RequirePackage{babel.def}% \def\alg@qq#1{\glqq#1\grqq}} \DeclareOption{english}{\def\alg@qq#1{``#1''}} \ExecuteOptions{english} \ProcessOptions* % \end{macrocode} % % \begin{macrocode} \newcommand{\keyword}[1]{\textbf{#1}} % \end{macrocode} % % \begin{macrocode} \newlength{\alg@indent} \setlength{\alg@indent}{0pt} \newlength{\alg@tmp} \newlength{\loop@wd} \settowidth{\loop@wd}{\keyword{for}~} \newlength{\do@wd} \settowidth{\do@wd}{\keyword{do}~} \newlength{\if@wd} \settowidth{\if@wd}{\keyword{if}~} \newlength{\then@wd} \settowidth{\then@wd}{\keyword{then}~} % \end{macrocode} % % \doindent{#1}[#2]{#3}[#4] % #1 Schluesselwort % #2 Boxbreite, in die `Schluesselwort' gesetzt wird (mit ~ am Ende); % wenn nicht gegeben, dann wird Breite von `Schluesselwort' genommen % #3 Breite der Einrueckung ab der folgenden Zeile % #4 Text, der noch hinter das Schluesselwort muss % % \begin{macro}{\doindent} % \begin{macrocode} \newif\if@itemrequest \@itemrequesttrue \newcommand{\doindent}[1]{\alg@item% \@ifnextchar[{\d@indent{#1}}% {\d@indent{#1}[\@empty]}} \def\d@indent#1[#2]#3{% \ifx\@empty#2% \settowidth{\alg@tmp}{\keyword{#1}~}% \hbox to\alg@tmp{\keyword{#1}\hfill}% \else \hbox to#2{\keyword{#1}\hfill}% \fi% \addtolength{\alg@indent}{#3}% \@ifnextchar[{\d@ind@nt} {\@itemrequestfalse\ignorespaces}} \def\d@ind@nt[#1]{\ifx\@empty#1\else\ifmmode#1\else$#1$\fi\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\unindent} % \begin{macrocode} \newcommand{\unindent}[1]{% \addtolength{\alg@indent}{-#1}\ignorespaces} % \end{macrocode} % \end{macro} % % \begin{macro}{\assign} % \begin{macrocode} \newcommand{\assign}[2]{\ifmmode#1\leftarrow#2\else$#1\leftarrow#2$\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\assignment} % \begin{macrocode} \newcommand{\assignment}[2]{\alg@item\assign{#1}{#2}} % \end{macrocode} % \end{macro} % % \begin{macro}{\function} % \begin{macrocode} \newcommand{\function}[1]{% \@ifnextchar[{\functi@n{#1}} {\functi@n{#1}[\@empty]}} \def\functi@n#1[#2]{% \textsc{#1}\ifx\@empty#2\else(\ifmmode#2\else$#2$\fi)\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\functioncall} % \begin{macrocode} \newcommand{\functioncall}[1]{% \@ifnextchar[{\functi@ncall{#1}} {\functi@ncall{#1}[\@empty]}} \def\functi@ncall#1[#2]{\alg@item\function{#1}[#2]} % \end{macrocode} % \end{macro} % % \begin{macro}{\command} % \begin{macrocode} \newcommand{\command}{\@ifstar{\comm@ndtxt}{\comm@nd}} \def\comm@nd#1#2{\alg@item% \keyword{#1}~\ifmmode#2\else$#2$\fi} \def\comm@ndtxt#1#2{\alg@item% \keyword{#1}~\ifmmode\mbox{\alg@qq{#2}}\else\alg@qq{#2}\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\metacommand} % \begin{macrocode} \newcommand*{\metacommand}[1]{% \alg@item #1} % \end{macrocode} % \end{macro} % % \begin{macro}{\whileloop} % \begin{macrocode} \newcommand*{\whileloop}[2]{% \doindent{while}{\loop@wd}[#1] \doindent{do}{\do@wd} #2 \unindent{\do@wd} \unindent{\loop@wd}} % \end{macrocode} % \end{macro} % % \begin{macro}{\repeatloop} % \begin{macrocode} \newcommand*{\repeatloop}[2]{% \doindent{repeat}{\loop@wd}[] #1 \unindent{\loop@wd} \alg@item\keyword{until} \ifmmode#2\else$#2$\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\doloop} % \begin{macrocode} \newcommand*{\doloop}[1]{% \doindent{do}{\loop@wd}[] #1 \unindent{\loop@wd} \alg@item\keyword{od}} % \end{macrocode} % \end{macro} % % \begin{macro}{\forloop} % \begin{macrocode} \newcommand{\forloop}{% \@ifstar{\f@rloop{downto}} {\f@rloop{to}}} \def\f@rloop#1#2#3{% \@ifnextchar[{\forl@@p{#1}{#2}{#3}} {\forl@@p{#1}{#2}{#3}[\@empty]}} \long\def\forl@@p#1#2#3[#4]#5{% \doindent{for}{\loop@wd}[#2\ \keyword{#1}\ #3% \ifx#4\@empty\else\ \keyword{step}\ #4\fi]% \doindent{do}{\do@wd} #5 \unindent{\do@wd} \unindent{\loop@wd}} % \end{macrocode} % \end{macro} % % \begin{macro}{\foreachloop} % \begin{macrocode} \newcommand*{\foreachloop}[2]{% \doindent{for each}{\loop@wd}[#1] \doindent{do}{\do@wd} #2 \unindent{\do@wd} \unindent{\loop@wd}} % \end{macrocode} % \end{macro} % % \begin{macro}{\conditional} % \begin{macrocode} \newcommand{\conditional}[2]{% \@ifnextchar[{\conditi@nal{#1}{#2}}% {\conditi@nal{#1}{#2}[\@empty]}} \long\def\conditi@nal#1#2[#3]{% \doindent{if}{\if@wd}[#1]% \doindent{then}{\then@wd}% #2% \unindent{\then@wd}% \ifx\@empty#3% \else% \doindent{else}[\then@wd]{\then@wd}% #3% \unindent{\then@wd}% \fi% \unindent{\if@wd}} % \end{macrocode} % \end{macro} % % \begin{macrocode} \newcommand{\alg@item}{% \if@itemrequest% \item\hspace*{\alg@indent}\ignorespaces% \else% \@itemrequesttrue% \fi} % \end{macrocode} % % \begin{environment}{algorithm} % \begin{macrocode} \newcounter{enuma} \newcommand{\labelenuma}{\theenuma} \newenvironment{algorithm}[1][\@empty]{% \begin{list}{\labelenuma}{% \addtolength{\labelsep}{1em}% \addtolength{\leftmargin}{1em}% \setlength{\itemsep}{0pt}% \setlength{\parsep}{0pt}% \setlength{\parskip}{0pt}% \usecounter{enuma}% \renewcommand{\makelabel}[1]{\hss\llap{##1}}}% \ifx\@empty#1 \else \item[]\hspace*{-\leftmargin}\textsc{#1}\vspace{1mm} \fi} {\end{list}} % \end{macrocode} % \end{environment} % \iffalse % % \fi % \Finale