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

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. De algorithm -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 de algorithm -omgeving biedt een “float” -wrapper voor algoritmen (geïmplementeerd met algorithmic 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:

  1. algcompatible (volledig compatibel met het algoritmische pakket),
  2. algpascal (heeft tot doel een opgemaakt pascal-programma te maken, je kunt een pascal-programma transformeren in een algpascal algoritme-beschrijving met enkele basisvervangingsregels).
  3. 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 indeling algpseudocode voor nieuwe algoritmen. Om algpseudocode te gebruiken, gebruik gewoon \usepackage{algpseudocode}. U hoeft het algorithmicx -pakket niet handmatig te laden, aangezien dit wordt gedaan door algpseudocode.

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} 

Opmerkingen

  • Een mooi, gedetailleerd antwoord! Het klinkt als de TL; DRTL; DR-versie is: " gebruik algorithmicx "? Uw discussie is heel duidelijk over waarom en of u algorithmicx verkiest boven algorithmic, maar ' biedt niet veel vergelijking met algorithm2e. Is dat omdat u er minder bekend mee bent, omdat het algemeen bekend is dat het inferieur is, of iets anders?
  • Ja, u hebt gelijk: ik ben niet erg bekend met algorithm2e. Ik denk dat ze vergelijkbare functionaliteit zouden moeten bieden, maar ik geef de voorkeur aan de syntaxis van algorithmicx. Ik heb mijn antwoord aangepast om duidelijk te maken dat het alleen mijn (subjectieve) voorkeur is.
  • Zelfs als je algorithmicx laadt, begrijp ik dat je nog steeds algorithm ook?
  • Uitgebreid antwoord! Voor een snelle beslissing kan het handig zijn om afbeeldingen toe te voegen aan de gecompileerde uitvoer voor elk pakket
  • Toen ik de sectie over algorithmicx las, deed ik ' begrijp meteen dat algpseudocode ook moet worden geladen om het pakket te gebruiken. Misschien ben ik ' de enige die dat heeft meegemaakt, anders kan het ergens worden toegevoegd.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *