Jag är förvirrad över paketen för att skriva enkla ”algoritmer”. Det finns för många alternativ, och det är förvirrande när man ska använda vad. Om jag till exempel använder algpseudocode kan jag inte lägga till algorithmic eftersom det redan ingår i algorithm -paket.

Finns det några definitiva riktlinjer för ett strömlinjeformat tillvägagångssätt? Alla förslag kommer att uppskattas.

Kommentarer

  • algpseudocode är en del av algorithmicx -paketet, det ger dig en förbättrad version av algorithmic förutom att tillhandahålla några andra funktioner.
  • Relaterat: Skriv ut program med rätt syntax

Svar

TL; DR-version:

  • algoritm – flottörslag för algoritmer.
  • algoritmisk – första algoritmensättningsmiljö.
  • algoritmicx – andra algoritm typesetti ng-miljö.
  • algpseudocode – layout för algorithmicx .
  • algoritm2e – tredje algoritmens inställningsmiljö.

Jag använder algorithmicx med algpseudocode eftersom de är överlägsna algorithmic. Jag tror att algorithmicx erbjuder samma funktion jämfört med algorithm2e, men jag tycker att dess syntax är tydligare än den som tillhandahålls av algorithm2e.

Detaljerad version

algoritm

Flytpaket för algoritmer. Det liknar blockkommandon table eller figure, som du lindar runt ditt bord / figur för att ge det ett nummer och för att förhindra att det blir delas över två sidor. -dokumentationen säger:

När den placeras i texten utan att vara inkapslad i en flytande miljö algorithmic miljöer kan delas över en sidgräns, vilket i hög grad försämrar deras utseende. Dessutom är det användbart att ha algoritmer numrerade för referens och att listor över algoritmer ska läggas till innehållsförteckningen. algorithm -miljön är tänkt att hantera dessa problem genom att tillhandahålla en flytande miljö för algoritmer.

Exempel:

\begin{algorithm} \caption{Algorithm caption} \label{alg:algorithm-label} \begin{algorithmic} ... Your pseudocode ... \end{algorithmic} \end{algorithm} 

algoritmiskt

Detta är den miljö där du skriver din pseudokod. Du har fördefinierade kommandon för vanliga strukturer som if, while, procedure. Alla kommandon är stora, t.ex. \IF{cond} ... \ELSE .... Dokumentationen 1 säger:

algorithmic -miljön ger en miljö för beskrivning av algoritmer och algorithm -miljön tillhandahåller ett ”float” -omslag för algoritmer (implementerat med algorithmic annan metod efter användarens val). Anledningen till att två miljöer tillhandahålls är att ge användaren maximal flexibilitet.

Exempel:

\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

Detta paket är som algorithmic uppgraderat. Det gör att du kan definiera anpassade kommandon, vilket är något algorithmic inte kan göra. Så om du inte vill skriva dina (galna) anpassade kommandon kommer du att ha det bra med algorithmic. Du använder algorithmicx på samma sätt som du använder algorithmic, bara syntaxen och detaljerna är lite annorlunda. Se exemplet nedan för mer information. -dokumentationen säger:

I själva paketets algoritmicx definieras inga algoritmiska kommandon , men ger en uppsättning makron för att definiera en sådan kommandosats. Du kan bara använda algoritmicx och definiera kommandona själv, eller så kan du använda en av de fördefinierade kommandosatserna

Exempel:

\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

Detta är bara en layout för algorithmicx som försöker vara så likadan som möjligt för algorithmic. Det finns också andra layouter, till exempel:

  1. algcompatible (helt kompatibel med det algoritmiska paketet),
  2. algpascal (syftar till att skapa ett formaterat pascal-program, du kan förvandla ett pascal-program till en algpascal algoritmbeskrivning med några grundläggande substitutionsregler).
  3. algc (precis som algpascal, men för c. Denna layout är ofullständig).

dokumentation säger:

Om du känner till det algoritmiska paketet hittar du det lätt att byta. Du kan använda de gamla algoritmerna med algcompatible -layouten, men använd algpseudocode -layouten för nya algoritmer. För att använda algpseudocode använder du bara \usepackage{algpseudocode}. Du behöver inte ladda algorithmicx -paketet, eftersom detta görs av algpseudocode.

Se exemplet för algorithmicx använder den algpseudocode -layouten.


algoritm2e

Detta är en annan algoritmmiljö precis som algorithmic eller algorithmicx. -dokumentationen säger:

Algorithm2e är en miljö för att skriva algoritmer i LaTeX2e. En algorithm definieras som flytande objekt som figurer. Det ger makron som låter dig skapa olika typer av nyckelord, vilket ger en uppsättning fördefinierade nyckelord. Du kan också ändra nyckelordens typografi.

Exempel:

\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} 

Kommentarer

  • Ett härligt, detaljerat svar! Det låter som TL; DRTL; DR-versionen är: " använd algorithmicx "? Din diskussion är mycket tydlig om varför och om du föredrar algorithmicx framför algorithmic, men inte ' t erbjuder mycket jämförelse med algorithm2e. Är det för att du är mindre bekant med det, för att det är välkänt att vara underlägset eller något annat?
  • Ja, du har rätt: Jag känner inte så mycket till algorithm2e. Jag tycker att de borde erbjuda liknande funktioner, men jag föredrar syntaxen för algorithmicx. Jag redigerade mitt svar för att klargöra att det bara är min (subjektiva) preferens.
  • Även om du laddar algorithmicx Jag förstår att du fortfarande måste ladda algorithm också?
  • Omfattande svar! För ett snabbt beslut kan det vara bra att inkludera bilder de kompilerade utmatningarna för varje paket
  • När jag läser avsnittet om algorithmicx gjorde jag inte ' t får omedelbart att algpseudocode också ska laddas för att kunna använda paketet. Kanske är jag ' den enda som upplevde det, annars kan det kanske läggas till någonstans.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *