Jeg er forvirret over pakkerne til at skrive enkle “algoritmer”. Der er for mange muligheder, og det er forvirrende, hvornår man skal bruge hvad. Hvis jeg f.eks. Bruger algpseudocode, kan jeg ikke t tilføje algorithmic, fordi det allerede er inkluderet i algorithm pakke.

Er der nogen endelige retningslinjer for en strømlinet tilgang? Ethvert forslag vil blive værdsat.

Kommentarer

Svar

TL; DR-version:

  • algoritme – svæveindpakning til algoritmer.
  • algoritmisk – første miljøindstillingsmiljø.
  • algoritmicx – anden algoritme typesetti ng miljø.
  • algpseudocode – layout til algorithmicx .
  • algoritm2e – tredje algoritmesættemiljø.

Jeg bruger algorithmicx med algpseudocode, da de er bedre end algorithmic. Jeg synes algorithmicx tilbyder den samme funktionalitet sammenlignet med algorithm2e, men jeg finder dens syntaks klarere end den, der leveres af algorithm2e.

Detaljeret version

algoritme

Float wrapper til algoritmer. Det ligner blokkommandoer table eller figure, som du vikler rundt om din tabel / figur for at give det et tal og for at forhindre, at det bliver delt over to sider. dokumentationen siger:

Når den placeres i teksten uden at være indkapslet i en flydende miljø algorithmic miljøer kan opdeles over en sidegrænse, hvilket i høj grad forringer deres udseende. Derudover er det nyttigt at have algoritmer nummereret til reference og at lister over algoritmer skal føjes til indholdslisten. algorithm -miljøet er beregnet til at løse disse bekymringer ved at tilvejebringe et flydende miljø til algoritmer.

Eksempel:

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

algoritmisk

Dette er det miljø, hvor du skriver din pseudokode. Du har foruddefinerede kommandoer til almindelige strukturer såsom if, while, procedure. Alle kommandoer er stort, f.eks. \IF{cond} ... \ELSE .... Dokumentationen 1 siger:

algorithmic miljø giver et miljø til beskrivelse af algoritmer, og algorithm -miljøet giver en “float” -indpakning til algoritmer (implementeret ved hjælp af algorithmic eller nogle anden metode efter brugerens valg). Årsagen til, at der leveres to miljøer, er at give brugeren maksimal fleksibilitet.

Eksempel:

\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

Denne pakke er som algorithmic opgraderet. Det giver dig mulighed for at definere brugerdefinerede kommandoer, hvilket er noget algorithmic ikke kan gøre. Så hvis du ikke vil skrive dine (skøre) brugerdefinerede kommandoer, har du det fint med algorithmic. Du bruger algorithmicx på samme måde som du bruger algorithmic, kun syntaksen og detaljerne er lidt forskellige. Se eksemplet nedenfor for detaljer. dokumentationen siger:

Selve pakkealgoritmicx definerer ingen algoritmiske kommandoer , men giver et sæt makroer til at definere et sådant kommandosæt. Du kan kun bruge algoritmicx og definere kommandoerne selv, eller du kan bruge et af de foruddefinerede kommandosæt

Eksempel:

\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

Dette er bare et layout til algorithmicx som forsøger at være så lig som muligt for algorithmic. Der er også andre layouter, såsom:

  1. algcompatible (fuldt kompatibel med den algoritmiske pakke),
  2. algpascal (sigter mod at oprette et formateret pascal-program, du kan omdanne et pascal-program til en algpascal algoritmebeskrivelse med nogle grundlæggende substitutionsregler).
  3. algc (ligesom algpascal, men for c. Dette layout er ufuldstændigt).

dokumentation siger:

Hvis du er bekendt med den algoritmiske pakke, finder du den let at skifte. Du kan bruge de gamle algoritmer med algcompatible layoutet, men brug algpseudocode layoutet til nye algoritmer. For at bruge algpseudocode skal du blot bruge \usepackage{algpseudocode}. Du behøver ikke at indlæse algorithmicx -pakken, da dette gøres ved algpseudocode.

Se eksemplet for algorithmicx , det bruger algpseudocode -layoutet.


algoritm2e

Dette er et andet algoritmemiljø ligesom algorithmic eller algorithmicx. dokumentationen siger:

Algorithm2e er et miljø til skrivning af algoritmer i LaTeX2e. En algorithm er defineret som flydende objekt som figurer. Det giver makroer, der giver dig mulighed for at oprette forskellige slags nøgleord, så der gives et sæt foruddefinerede nøgleord. Du kan også ændre typografien for nøgleordene.

Eksempel:

\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

  • Et dejligt, detaljeret svar! Det lyder som TL; DRTL; DR-versionen er: " brug algorithmicx "? Din diskussion er meget klar over, hvorfor og om du foretrækker algorithmicx frem for algorithmic, men ikke ' t tilbyder meget sammenligning med algorithm2e. Er det fordi du er mindre fortrolig med det, fordi det er velkendt at være ringere eller noget andet?
  • Ja, du har ret: Jeg er ikke særlig fortrolig med algorithm2e. Jeg synes, de burde tilbyde lignende funktionalitet, men jeg foretrækker syntaksen for algorithmicx. Jeg redigerede mit svar for at gøre det klart, at det kun er min (subjektive) præference.
  • Selvom du indlæser algorithmicx Jeg forstår, at du stadig skal indlæse algorithm også?
  • Omfattende svar! For en hurtig beslutning kan det være nyttigt at medtage billeder de kompilerede output for hver pakke
  • Når jeg læser afsnittet om algorithmicx, gjorde jeg ikke ' t straks at algpseudocode også skal indlæses for at kunne bruge pakken. Måske er jeg ' den eneste, der oplevede det, ellers kunne det måske tilføjes et eller andet sted.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *