Das algorithms Bundle beinhaltet zwei verschiedene Pakete zur Darstellung von Pseudocode. Das algorithmic Paket (Version v0.1, 24.08.2009) dient zum Setzen des Pseudocodes während das algorithm Paket (Version v0.1, 24.08.2009) für die Umsetzung des Pseudocodes in einem Gleitobjekt (float) benötigt wird. Um die volle Funktionalität des Bundles nutzen zu können ist es daher notwendig beide Pakete einzubinden.
Die zwei neuen Umgebungen algorithmic und algorithm sind Bestandteil des Bundles. Innerhalb der erste Umgebung algorithmic wird der Pseudocode gesetzt. Die zweite Umgebung algorithm ist eine so genannte float wrapper Umgebung welche um die erste gesetzt werden kann. Das Zusammenspiel zwischen den beiden Umgebungen ist mit dem Duo tabular und table vergleichbar.
Das algorithmic Paket wird mit \usepackage{algorithmic}
eingebunden und bindet seinerseits noch die Pakete ifthen und keyval ein. Das Paket hat nur eine Option noend. Wenn die Option noend gesetzt wird, wird das END Statement weggelassen um Platz zu sparen.
Die algorithmic Umgebung hat eine Option. Dabei handelt es sich um die Möglichkeit die Schrittweite der Nummerierung der Zeilen angeben zu können. Wenn eine 1 gesetzt wird, wird jede Zeile nummeriert, wenn eine 2 gesetzt wird, wird jede zweite Zeile nummeriert und so weiter.
\begin{algorithmic}[Schrittweite] ... \end{algorithmic}Im Fall, dass keine Nummerierung erfolgen soll wird die Option einfach weggelassen:
\begin{algorithmic} ... \end{algorithmic}
Schleifen unterscheiden sich unter anderem darin, ob sie eine Bedingung haben oder nicht und im Fall das sie eine besitzen wo diese geprüft wird.
\LOOP \STATE{Text} \ENDLOOP
\FOR{Bedingung} \STATE {Text} \ENDFOR
\FOR{Bedingung> \TO } \STATE {Text} \ENDFOR
\FORALL{Bedingung} \STATE{Text} \ENDFOR
\WHILE{Bedingung} \STATE{Text} \ENDWHILE
\REPEAT \STATE{Text} \UNTIL{Bedingung}
Hier kann zwischen einer einfachen Fallunterscheidung und einer mehrfachen hintereinander durchgeführten Fallunterscheidung unterschieden werden.
\IF{Bedingung} \STATE {Text} \ELSE \STATE{Text} \ENDIF
\IF{Bedingung} \STATE {Text} \ELSIF{Bedingung} \STATE{Text} \ENDIF
Für die Ausgabe von Text beziehungsweise den Wert einer Variable gibt es die folgenden Befehle.
\COMMENT{Text}
Kommentar \STATE Text
Aussage \REQUIRE Text
Eingabe \ENSURE Text
Ausgabe \RETURN Text
Rückgabewert \PRINT Text
Print\AND
,
\OR
,
\XOR
,
\NOT
,
\TO
,
\TRUE
,
\FALSE
Das nachfolgende Beispiel zeigt anhand des Euklidischen Algorithmus die Umsetzung der Darstellung von Quellcode mittels der algorithmic Umgebung.
\begin{algorithmic} \IF{$a = 0$} \RETURN $b$ \ELSE \WHILE{$b \neq 0$} \IF{$a > b$} \STATE $a \leftarrow a - b$ \ELSE \STATE $b \leftarrow b - a$ \ENDIF \ENDWHILE \RETURN $a$ \ENDIF \end{algorithmic}
Für den Fall, dass die Ausgabe der einzelnen Befehle angepasst werden muss, kann dies über \renewcommand{\algorithmic<Name des Befehls>}{Neue Ausgabe}
erfolgen.
Name des Befehls | Orginalausgabe |
require | Require: |
ensure | Ensure: |
end | end |
if | if |
then | then |
else | else |
for | for |
forall | for all |
do | do |
while | while |
loop | loop |
repeat | repeat |
until | until |
return | return |
and | and |
or | or |
xor | xor |
not | not |
to | to |
inputs | inputs |
outputs | outputs |
globals | globals |
body | do |
true | true |
false | false |
Angenommen if-then-else soll zu wenn-dann-sonst verändert werden.
\renewcommand{\algorithmicif}{\textbf{wenn}} \renewcommand{\algorithmicthen}{\textbf{dann}} \renewcommand{\algorithmicelse}{\textbf{sonst}}
Das algorithm Paket wird mit \usepackage{algorithm}
eingebunden und bindet seinerseits noch die Pakete float und ifthen ein. Das Paket bietet eine breite Auswahl an Optionen bezüglich der Darstellung des Gleitobjektes in dem der Pseudocode gesetzt wird und der Zählung dieser Objekte.
Die Darstellung des Codeblocks kann über die folgenden drei Optionen verändert werden.
Die Zählung der Codeblöcke beziehungsweise wann der Zähler wieder auf Null zurückgesetzt werden soll lässt sich über die folgenden Optionen festlegen.
\part{...}
gesetzt wurde wird der Zähler der Blöcke zurückgesetzt. Und die Zählung der nachfolgenden Blöcke beginnt wieder bei eins 1.\chapter{...}
beginnt die Zählung wieder neu.\section{...}
beginnt die Zählung wieder neu. \subsection{...}
beginnt die Zählung wieder neu. \subsubsection{...}
beginnt die Zählung wieder neu. \chapter
Befehl gibt und es dem entsprechend dort auch keinen Zähler chapter gibt.
Mit den oben oben gezeigten Optionen lässt sich die Ausgabe des Pseudocodes anpassen.
... \usepackage[plain]{algorithm} ... \begin{algorithm} \caption{Euclid} \begin{algorithmic} \IF{$a = 0$} \RETURN $b$ \ELSE \WHILE{$b \neq 0$} \IF{$a > b$} \STATE $a \leftarrow a - b$ \ELSE \STATE $b \leftarrow b - a$ \ENDIF \ENDWHILE \RETURN $a$ \ENDIF \end{algorithmic} \end{algorithm} ... |
![]() |
... \usepackage[ruled]{algorithm} ... \begin{algorithm} \caption{Euclid} \begin{algorithmic} \IF{$a = 0$} \RETURN $b$ \ELSE \WHILE{$b \neq 0$} \IF{$a > b$} \STATE $a \leftarrow a - b$ \ELSE \STATE $b \leftarrow b - a$ \ENDIF \ENDWHILE \RETURN $a$ \ENDIF \end{algorithmic} \end{algorithm} ... |
![]() |
... \usepackage[boxed]{algorithm} ... \begin{algorithm} \caption{Euclid} \begin{algorithmic} \IF{$a = 0$} \RETURN $b$ \ELSE \WHILE{$b \neq 0$} \IF{$a > b$} \STATE $a \leftarrow a - b$ \ELSE \STATE $b \leftarrow b - a$ \ENDIF \ENDWHILE \RETURN $a$ \ENDIF \end{algorithmic} \end{algorithm} ... |
![]() |
Soll die Beschriftung geändert werden geht dies mit dem Befehl \floatname{algorithm}{Neue Beschriftung}
.
Mit dem Befehl \listofalgorithms
wird an der gewünschten Stelle im Dokument eine Übersicht der im Dokument in Pseudocode gesetzten Programme eingefügt. Vorausgesetzt dass diese sich diese innerhalb einer algorithm Umgebung befinden. Per default ist der Title List of Algorithms.
Der Titel kann durch einen \rennewcommand
Befehl geändert werden. Im nachfolgenden Beispiel wird der Titel zu Pseudocode Liste geändert:
\renewcommand{\listalgorithmname}{Pseudocode Liste}