Ich bin verwirrt über die Pakete zum Schreiben einfacher „Algorithmen“. Es gibt zu viele Optionen und es ist verwirrend, wann was verwendet werden soll. Wenn ich beispielsweise algpseudocode
verwende, kann ich algorithmic
nicht hinzufügen, da es bereits in -Paket.
Gibt es endgültige Richtlinien für einen optimierten Ansatz? Jeder Vorschlag wird geschätzt.
Kommentare
-
algpseudocode
ist Teil des Bundlesalgorithmicx
und bietet Ihnen eine verbesserte Version vonalgorithmic
bietet neben einigen anderen Funktionen auch - Verwandte Themen: Drucken Sie Programme mit der richtigen Syntax
Antwort
TL; DR-Version:
- Algorithmus – Float-Wrapper für Algorithmen.
- algorithmisch – erste Algorithmus-Satzumgebung.
- algorithmicx – zweiter Algorithmus-Typ ng Umgebung.
- Algpseudocode – Layout für
algorithmicx
. - algorithm2e – dritte Algorithmus-Satzumgebung.
Ich verwende algorithmicx
mit algpseudocode
, da sie algorithmic
überlegen sind. Ich denke, algorithmicx
bietet die gleiche Funktionalität wie algorithm2e
, aber ich finde die Syntax klarer als die von algorithm2e
.
Detaillierte Version
Algorithmus
Float-Wrapper für Algorithmen. Es ähnelt den Blockbefehlen table
oder figure
, die Sie um Ihre Tabelle / Figur wickeln, um ihr eine Nummer zu geben und sie zu verhindern auf zwei Seiten aufgeteilt. In der Dokumentation heißt es:
Wenn im Text platziert, ohne in einem Floating gekapselt zu sein Umgebung
algorithmic
Umgebungen können über eine Seitengrenze aufgeteilt werden, was ihr Erscheinungsbild erheblich beeinträchtigt. Darüber hinaus ist es nützlich, Algorithmen als Referenz nummeriert zu haben und Listen von Algorithmen an das Inhaltsverzeichnis anzuhängen. Diealgorithm
-Umgebung soll diese Probleme lösen, indem eine schwebende Umgebung für Algorithmen bereitgestellt wird.
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 allgemeine Strukturen wie if
, while
, procedure
. Alle Befehle werden großgeschrieben, z. \IF{cond} ... \ELSE ...
. In der Dokumentation 1 heißt es:
Die
algorithmic
bietet eine Umgebung zum Beschreiben von Algorithmen und die Umgebungalgorithm
bietet einen „float“ -Wrapper für Algorithmen (implementiert mitalgorithmic
oder einigen andere 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}
algorithmicx
Dieses Paket ist wie algorithmic
aktualisiert. Sie können benutzerdefinierte Befehle definieren, was algorithmic
nicht kann. Wenn Sie also Ihre (verrückten) benutzerdefinierten Befehle nicht schreiben möchten, sind Sie mit algorithmic
. Sie verwenden algorithmicx
genauso wie algorithmic
, nur die Syntax und Details unterscheiden sich geringfügig. Einzelheiten finden Sie im folgenden Beispiel. In der Dokumentation heißt es:
Das Paket algorithmicx selbst definiert keine algorithmischen Befehle , gibt aber eine Reihe von Makros an, um einen solchen Befehlssatz zu definieren. Sie können nur algorithmicx verwenden und die Befehle selbst definieren, oder Sie können 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 versucht, so ähnlich wie möglich zu sein algorithmic
. Es gibt auch andere Layouts wie:
-
algcompatible
(vollständig kompatibel mit dem algorithmischen Paket), -
algpascal
(zielt darauf ab, ein formatiertes Pascal-Programm zu erstellen. Sie können ein Pascal-Programm in einealgpascal
-Algorithmusbeschreibung mit einigen grundlegenden Substitutionsregeln umwandeln.) -
algc
(genau wie der Algpascal, aber für c. Dieses Layout ist unvollständig).
Die Dokumentation sagt:
Wenn Sie mit dem algorithmischen Paket vertraut sind, werden Sie es finden einfach zu wechseln. Sie können die alten Algorithmen mit dem Layout
algcompatible
verwenden, aber bitte verwenden Sie das Layoutalgpseudocode
für neue Algorithmen. Umalgpseudocode
zu verwenden, verwenden Sie einfach\usepackage{algpseudocode}
. Sie müssen dasalgorithmicx
-Paket nicht manuell laden, da dies vonalgpseudocode
.
Siehe Beispiel für algorithmicx
verwendet das Layout algpseudocode
.
algorithm2e
Dies ist eine andere Algorithmusumgebung wie algorithmic
oder algorithmicx
. In der Dokumentation heißt es:
Algorithmus2e ist eine Umgebung zum Schreiben von Algorithmen in LaTeX2e. Ein
algorithm
wird als schwebendes Objekt wie Figuren definiert. Es enthält Makros, mit denen Sie verschiedene Arten von Schlüsselwörtern erstellen können. Daher wird eine Reihe vordefinierter Schlüsselwörter angegeben. 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}
Kommentare
- Eine schöne, detaillierte Antwort! Es klingt wie die TL; DRTL; DR-Version lautet: " Verwenden Sie
algorithmicx
"? Ihre Diskussion ist sehr klar darüber, warum und ob Siealgorithmicx
algorithmic
vorziehen, aber nicht ' bietet nicht viel Vergleich zualgorithm2e
. Liegt das daran, dass Sie weniger damit vertraut sind, weil bekannt ist, dass es minderwertig ist, oder an etwas anderem? - Ja, Sie haben Recht: Ich bin mit
algorithm2e
. Ich denke, sie sollten ähnliche Funktionen bieten, aber ich bevorzuge die Syntax vonalgorithmicx
. Ich habe meine Antwort bearbeitet, um zu verdeutlichen, dass dies nur meine (subjektive) Präferenz ist. - Auch wenn Sie
algorithmicx
laden, müssen Siealgorithm
auch? - Ausführliche Antwort! Für eine schnelle Entscheidung kann es hilfreich sein, Bilder der kompilierten Ausgaben für jedes Paket einzuschließen.
- Wenn ich den Abschnitt über
algorithmicx
gelesen habe, habe ich t sofort erhalten, dassalgpseudocode
auch geladen werden sollte, um das Paket zu verwenden. Vielleicht bin ich ' der einzige, der das erlebt hat, sonst könnte es vielleicht irgendwo hinzugefügt werden.