Ik ben in de war over de pakketten voor het schrijven van eenvoudige “algoritmen”. Er zijn te veel opties en het is verwarrend wanneer je wat moet gebruiken. Als ik bijvoorbeeld algpseudocode
gebruik, kan ik “niet algorithmic
toevoegen omdat het al is opgenomen in de algorithm
pakket.
Zijn er definitieve richtlijnen voor een gestroomlijnde aanpak? Elke suggestie wordt op prijs gesteld.
Opmerkingen
-
algpseudocode
maakt deel uit van dealgorithmicx
-bundel, het geeft je een verbeterde versie vanalgorithmic
naast het bieden van enkele andere functies. - Gerelateerd: Druk programmas af met de juiste syntaxis
Answer
TL; DR-versie:
- algoritme – float wrapper voor algoritmen.
- algoritme – eerste omgeving voor het zetten van algoritmen.
- algoritmicx – tweede algoritme typesetti ng omgeving.
- algpseudocode – layout voor
algorithmicx
. - algoritm2e – derde omgeving voor het zetten van algoritmen.
Ik gebruik algorithmicx
met algpseudocode
omdat ze superieur zijn aan algorithmic
. Ik denk dat algorithmicx
dezelfde functionaliteit biedt als algorithm2e
, maar ik vind de syntaxis ervan duidelijker dan die van algorithm2e
.
Gedetailleerde versie
algoritme
Float-wrapper voor algoritmen. Het is vergelijkbaar met blokopdrachten table
of figure
, die u om uw tabel / figuur heen wikkelt om deze een nummer te geven en om te voorkomen dat deze verdeeld over twee paginas. De documentatie zegt:
Indien geplaatst in de tekst zonder te worden ingekapseld in een zwevende environment
algorithmic
omgevingen kunnen worden opgesplitst over een paginagrens, wat sterk afbreuk doet aan hun uiterlijk. Daarnaast is het handig om algoritmen te laten nummeren ter referentie en om lijsten met algoritmen toe te voegen aan de inhoudsopgave. Dealgorithm
-omgeving is bedoeld om deze problemen weg te nemen door een zwevende omgeving voor algoritmen te bieden.
Voorbeeld:
\begin{algorithm} \caption{Algorithm caption} \label{alg:algorithm-label} \begin{algorithmic} ... Your pseudocode ... \end{algorithmic} \end{algorithm}
algoritmisch
Dit is de omgeving waarin u uw pseudocode schrijft. Je hebt vooraf gedefinieerde commandos voor veelgebruikte structuren, zoals if
, while
, procedure
. Alle commandos hebben een hoofdletter, bijv. \IF{cond} ... \ELSE ...
. De documentatie 1 zegt:
De
algorithmic
-omgeving biedt een omgeving voor het beschrijven van algoritmen en dealgorithm
-omgeving biedt een “float” -wrapper voor algoritmen (geïmplementeerd metalgorithmic
of iets dergelijks andere methode naar keuze van de gebruiker). De reden dat er twee omgevingen worden geboden, is om de gebruiker maximale flexibiliteit te bieden.
Voorbeeld:
\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}
algoritmicx
Dit pakket is als algorithmic
geüpgraded. Het stelt je in staat om aangepaste commandos te definiëren, iets wat algorithmic
“niet kan. Dus als je je (gekke) aangepaste commandos niet wilt schrijven, komt het goed met algorithmic
. U gebruikt algorithmicx
op dezelfde manier als algorithmic
, alleen de syntaxis en details zijn iets anders. Zie onderstaand voorbeeld voor details. De documentatie zegt:
Het pakket algoritmicx zelf definieert geen algoritmische commandos , maar geeft een set macros om zon commandoset te definiëren. Je mag alleen algoritmicx gebruiken en de commandos zelf definiëren, of je kunt een van de vooraf gedefinieerde commandosets gebruiken.
Voorbeeld:
\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
Dit is slechts een lay-out voor algorithmicx
die zo veel mogelijk op algorithmic
. Er zijn ook andere lay-outs, zoals:
-
algcompatible
(volledig compatibel met het algoritmische pakket), -
algpascal
(heeft tot doel een opgemaakt pascal-programma te maken, je kunt een pascal-programma transformeren in eenalgpascal
algoritme-beschrijving met enkele basisvervangingsregels). -
algc
(net als de algpascal, maar voor c. Deze lay-out is onvolledig).
De documentatie zegt:
Als je bekend bent met het algoritmische pakket, dan zul je het vinden gemakkelijk om te schakelen. U kunt de oude algoritmen gebruiken met de indeling
algcompatible
, maar gebruik de indelingalgpseudocode
voor nieuwe algoritmen. Omalgpseudocode
te gebruiken, gebruik gewoon\usepackage{algpseudocode}
. U hoeft hetalgorithmicx
-pakket niet handmatig te laden, aangezien dit wordt gedaan dooralgpseudocode
.
Zie het voorbeeld voor algorithmicx
, het gebruikt de algpseudocode
layout.
algoritm2e
Dit is een andere algoritme-omgeving net als algorithmic
of algorithmicx
. De documentatie zegt:
Algorithm2e is een omgeving voor het schrijven van algoritmen in LaTeX2e. Een
algorithm
wordt gedefinieerd als zwevende objectachtige figuren. Het biedt macros waarmee u verschillende soorten sleutelwoorden kunt maken, zodat u een set vooraf gedefinieerde sleutelwoorden krijgt. U kunt ook de typografie van de trefwoorden wijzigen.
Voorbeeld:
\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}
algorithmicx
"? Uw discussie is heel duidelijk over waarom en of ualgorithmicx
verkiest bovenalgorithmic
, maar ' biedt niet veel vergelijking metalgorithm2e
. Is dat omdat u er minder bekend mee bent, omdat het algemeen bekend is dat het inferieur is, of iets anders?algorithm2e
. Ik denk dat ze vergelijkbare functionaliteit zouden moeten bieden, maar ik geef de voorkeur aan de syntaxis vanalgorithmicx
. Ik heb mijn antwoord aangepast om duidelijk te maken dat het alleen mijn (subjectieve) voorkeur is.algorithmicx
laadt, begrijp ik dat je nog steedsalgorithm
ook?algorithmicx
las, deed ik ' begrijp meteen datalgpseudocode
ook moet worden geladen om het pakket te gebruiken. Misschien ben ik ' de enige die dat heeft meegemaakt, anders kan het ergens worden toegevoegd.