
Ich bin verwirrt über die Pakete zum Schreiben einfacher „Algorithmen“. Es gibt zu viele Optionen und es ist verwirrend, wann was zu verwenden ist. Wenn ich beispielsweise verwende algpseudocode
, kann ich nicht hinzufügen, algorithmic
da es bereits im algorithm
Paket enthalten ist.
Gibt es definitive Richtlinien für einen rationalisierten Ansatz? Jeder Vorschlag wird geschätzt.
Antwort1
TL;DR-Version:
- Algorithmus- Float-Wrapper für Algorithmen.
- algorithmisch- erste algorithmische Satzumgebung.
- algorithmischx- zweite Algorithmus-Satzumgebung.
- algpseudocode- Layout für
algorithmicx
. - algorithm2e- Satzumgebung für dritten Algorithmus.
Ich verwende algorithmicx
mit algpseudocode
, da es besser ist als algorithmic
. Ich denke, algorithmicx
es bietet die gleiche Funktionalität wie algorithm2e
, finde die Syntax jedoch klarer als die von algorithm2e
.
Ausführliche Version
Algorithmus
Float-Wrapper für Algorithmen. Er ist ähnlich wie Blockbefehle table
oder figure
, die Sie um Ihre Tabelle/Abbildung wickeln, um ihr eine Nummer zu geben und zu verhindern, dass sie auf zwei Seiten aufgeteilt wird. DerDokumentationsagt:
Wenn Umgebungen im Text platziert werden, ohne in einer schwebenden Umgebung gekapselt zu sein,
algorithmic
können sie über eine Seitengrenze hinaus aufgeteilt werden, was ihr Erscheinungsbild erheblich beeinträchtigt. Darüber hinaus ist es nützlich, Algorithmen zur Referenz zu nummerieren und Listen von Algorithmen an das Inhaltsverzeichnis anzuhängen. Diealgorithm
Umgebung soll diese Probleme lösen, indem sie eine schwebende Umgebung für Algorithmen bereitstellt.
Beispiel:
\begin{algorithm}
\caption{Algorithm caption}
\label{alg:algorithm-label}
\begin{algorithmic}
... Your pseudocode ...
\end{algorithmic}
\end{algorithm}
algorithmisch
Dies ist die Umgebung, in der Sie Ihren Pseudocode schreiben. Sie haben vordefinierte Befehle für gängige Strukturen wie if
, while
, procedure
. Alle Befehle werden groß geschrieben, z. B. \IF{cond} ... \ELSE ...
. Die Dokumentation1sagt:
Die
algorithmic
Umgebung stellt eine Umgebung zum Beschreiben von Algorithmen bereit und diealgorithm
Umgebung stellt einen „Float“-Wrapper für Algorithmen bereit (implementiert mitalgorithmic
oder einer anderen Methode nach Wahl des Benutzers). Der Grund für die Bereitstellung von zwei Umgebungen besteht darin, dem Benutzer maximale Flexibilität zu ermöglichen.
Beispiel:
\begin{algorithmic}
\IF{some condition is true}
\STATE do some processing
\ELSIF{some other condition is true}
\STATE do some different processing
\ELSE
\STATE do the default actions
\ENDIF
\end{algorithmic}
algorithmischx
Dieses Paket ist wie algorithmic
ein Upgrade. Es ermöglicht Ihnen, benutzerdefinierte Befehle zu definieren, was algorithmic
nicht möglich ist. Wenn Sie also keine (verrückten) benutzerdefinierten Befehle schreiben möchten, sind Sie mit zufrieden algorithmic
. Sie verwenden es auf algorithmicx
die gleiche Weise wie algorithmic
, nur die Syntax und die Details sind etwas anders. Weitere Informationen finden Sie im folgenden Beispiel. DieDokumentationsagt:
Das Paket algorithmicx selbst definiert keine algorithmischen Befehle, sondern bietet eine Reihe von Makros zum Definieren eines solchen Befehlssatzes. Sie können nur algorithmicx verwenden und die Befehle selbst definieren oder einen der vordefinierten Befehlssätze verwenden.
Beispiel:
\begin{algorithm}
\caption{Euclid’s algorithm}
\label{euclid}
\begin{algorithmic}[1] % The number tells where the line numbering should start
\Procedure{Euclid}{$a,b$} \Comment{The g.c.d. of a and b}
\State $r\gets a \bmod b$
\While{$r\not=0$} \Comment{We have the answer if r is 0}
\State $a \gets b$
\State $b \gets r$
\State $r \gets a \bmod b$
\EndWhile\label{euclidendwhile}
\State \textbf{return} $b$\Comment{The gcd is b}
\EndProcedure
\end{algorithmic}
\end{algorithm}
algpseudocode
Dies ist nur ein Layout für , algorithmicx
das so ähnlich wie möglich zu sein versucht algorithmic
. Es gibt auch andere Layouts, wie zum Beispiel:
algcompatible
(vollständig kompatibel mit dem Algorithmik-Paket),algpascal
(zielt darauf ab, ein formatiertes Pascal-Programm zu erstellen. Sie können ein Pascal-Programmalgpascal
mit einigen grundlegenden Substitutionsregeln in eine Algorithmusbeschreibung umwandeln.)algc
(genau wie algpascal, aber für c. Dieses Layout ist unvollständig).
DerDokumentationsagt:
Wenn Sie mit dem Algorithmenpaket vertraut sind, fällt Ihnen der Wechsel leicht. Sie können die alten Algorithmen mit dem
algcompatible
Layout verwenden, aber verwenden Siealgpseudocode
für neue Algorithmen bitte das Layout. Um zu verwendenalgpseudocode
, verwenden Sie einfach\usepackage{algpseudocode}
.Sie müssen das Paket nicht manuell ladenalgorithmicx
, da dies von erledigt wirdalgpseudocode
.
Siehe das Beispiel für algorithmicx
, es verwendet das algpseudocode
Layout.
algorithm2e
Dies ist eine weitere Algorithmusumgebung wie algorithmic
oder algorithmicx
. DieDokumentationsagt:
Algorithm2e ist eine Umgebung zum Schreiben von Algorithmen in LaTeX2e. Ein Algorithmus
algorithm
wird als schwebendes Objekt wie Figuren definiert. Es bietet Makros, mit denen Sie verschiedene Arten von Schlüsselwörtern erstellen können. Somit wird ein Satz vordefinierter Schlüsselwörter bereitgestellt. Sie können auch die Typografie der Schlüsselwörter ändern.
Beispiel:
\begin{algorithm}[H]
\SetAlgoLined
\KwData{this text}
\KwResult{how to write algorithm with \LaTeX2e }
initialization\;
\While{not at end of this document}{
read current\;
\eIf{understand}{
go to next section\;
current section becomes this one\;
}{
go back to the beginning of current section\;
}
}
\caption{How to write algorithms}
\end{algorithm}
Antwort2
- Ich fand die jüngste
algpseudocodex
Paketein guter Schritt zur Vereinheitlichung der Paketvielfaltalgorithm*
. - Dieses Paket kombiniert auf schöne Weise einige Features (z. B. Allgemeingültigkeit, Vorlagenerstellung) von
algorithmicx
und das schlanke Layout vonalgorithm2e
, d. h. die vertikalen Bereichslinien.