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

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. Die algorithm -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 Umgebung algorithm bietet einen „float“ -Wrapper für Algorithmen (implementiert mit algorithmic 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:

  1. algcompatible (vollständig kompatibel mit dem algorithmischen Paket),
  2. algpascal (zielt darauf ab, ein formatiertes Pascal-Programm zu erstellen. Sie können ein Pascal-Programm in eine algpascal -Algorithmusbeschreibung mit einigen grundlegenden Substitutionsregeln umwandeln.)
  3. 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 Layout algpseudocode für neue Algorithmen. Um algpseudocode zu verwenden, verwenden Sie einfach \usepackage{algpseudocode}. Sie müssen das algorithmicx -Paket nicht manuell laden, da dies von algpseudocode.

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 Sie algorithmicx algorithmic vorziehen, aber nicht ' bietet nicht viel Vergleich zu algorithm2e. 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 von algorithmicx. Ich habe meine Antwort bearbeitet, um zu verdeutlichen, dass dies nur meine (subjektive) Präferenz ist.
  • Auch wenn Sie algorithmicx laden, müssen Sie algorithm 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, dass algpseudocode 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.