Jeg er forvirret om pakkene for å skrive enkle «algoritmer». Det er for mange alternativer, og det er forvirrende når man skal bruke hva. Hvis jeg for eksempel bruker algpseudocode, kan jeg ikke legge til algorithmic fordi det allerede er inkludert i algorithm -pakke.

Er det noen definitive retningslinjer for en strømlinjeformet tilnærming? Ethvert forslag vil bli satt pris på.

Kommentarer

Svar

TL; DR-versjon:

  • algoritme – float wrapper for algoritmer.
  • algoritmisk – første algoritmesettmiljø.
  • algoritmicx – andre algoritmetyper ng miljø.
  • algpseudocode – layout for algorithmicx .
  • algoritme2 – tredje algoritmesettmiljø.

Jeg bruker algorithmicx med algpseudocode siden de er overlegne algorithmic. Jeg tror algorithmicx tilbyr samme funksjonalitet sammenlignet med algorithm2e, men jeg synes syntaksen er tydeligere enn den som tilbys av algorithm2e.

Detaljert versjon

algoritme

Float wrapper for algoritmer. Det ligner på blokkeringskommandoer table eller figure, som du vikler rundt bordet / figuren for å gi det et tall og for å forhindre at det blir delt over to sider. dokumentasjonen sier:

Når den plasseres i teksten uten å være innkapslet i en flytende miljø algorithmic miljøer kan deles over en sidegrense, noe som i stor grad forringer utseendet. I tillegg er det nyttig å ha algoritmer nummerert for referanse og at lister over algoritmer skal legges til innholdslisten. algorithm -miljøet er ment å løse disse bekymringene ved å gi et flytende miljø for algoritmer.

Eksempel:

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

algoritmisk

Dette er miljøet du skriver pseudokoden din i. Du har forhåndsdefinerte kommandoer for vanlige strukturer som if, while, procedure. Alle kommandoene er stort, f.eks. \IF{cond} ... \ELSE .... Dokumentasjonen 1 sier:

algorithmic miljø gir et miljø for å beskrive algoritmer, og algorithm -miljøet gir et «float» -omslag for algoritmer (implementert ved hjelp av algorithmic eller noen annen metode etter brukernes valg). Årsaken til at to miljøer ble gitt, er å gi brukeren 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 pakken er som algorithmic oppgradert. Den lar deg definere egendefinerte kommandoer, noe algorithmic ikke kan gjøre. Så hvis du ikke vil skrive dine (sprø) egendefinerte kommandoer, vil du ha det bra med algorithmic. Du bruker algorithmicx på samme måte som du bruker algorithmic, bare syntaksen og detaljene er litt forskjellige. Se eksemplet nedenfor for detaljer. dokumentasjonen sier:

Pakkealgoritmiksen definerer ikke noen algoritmiske kommandoer , men gir et sett med makroer for å definere et slikt kommandosett. Du kan bare bruke algoritmicx, og definere kommandoene selv, eller du kan bruke et av de forhåndsdefinerte kommandosettene

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 en layout for algorithmicx som prøver å være så lik som mulig algorithmic. Det er også andre oppsett, for eksempel:

  1. algcompatible (fullt kompatibel med den algoritmiske pakken),
  2. algpascal (tar sikte på å lage et formatert pascal-program, du kan forvandle et pascal-program til en algpascal algoritmebeskrivelse med noen grunnleggende substitusjonsregler).
  3. algc (akkurat som algpascal, men for c. Denne layouten er ufullstendig).

dokumentasjon sier:

Hvis du er kjent med den algoritmiske pakken, vil du finne den lett å bytte. Du kan bruke de gamle algoritmene med algcompatible -oppsettet, men bruk algpseudocode -oppsettet for nye algoritmer. For å bruke algpseudocode, bruk bare \usepackage{algpseudocode}. Du trenger ikke å laste algorithmicx -pakken manuelt, da dette gjøres av algpseudocode.

Se eksemplet for algorithmicx , den bruker algpseudocode -oppsettet.


algoritm2e

Dette er et annet algoritmemiljø akkurat som algorithmic eller algorithmicx. dokumentasjonen sier:

Algorithm2e er et miljø for å skrive algoritmer i LaTeX2e. En algorithm er definert som flytende objekt som figurer. Det gir makroer som lar deg lage forskjellige slags stikkord, og dermed blir det gitt et sett med forhåndsdefinerte stikkord. Du kan også endre typografien til nøkkelordene.

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 deilig, detaljert svar! Det høres ut som TL; DRTL; DR-versjonen er: " bruk algorithmicx "? Diskusjonen din er veldig tydelig om hvorfor og om du foretrekker algorithmicx framfor algorithmic, men ikke ' t tilbyr mye sammenligning med algorithm2e. Er det fordi du er mindre kjent med det, fordi det er kjent for å være mindreverdig, eller noe annet?
  • Ja, du har rett: Jeg er ikke veldig kjent med algorithm2e. Jeg tror de burde tilby lignende funksjonalitet, men jeg foretrekker syntaksen til algorithmicx. Jeg redigerte svaret mitt for å gjøre det klart at det bare er min (subjektive) preferanse.
  • Selv om du laster algorithmicx Jeg forstår at du fortsatt må laste algorithm også?
  • Omfattende svar! For en rask beslutning kan det være nyttig å inkludere bilder de kompilerte utgangene for hver pakke
  • Når jeg leser delen om algorithmicx, gjorde jeg ikke ' t umiddelbart at algpseudocode også skal lastes inn for å kunne bruke pakken. Kanskje jeg ' er den eneste som opplevde det, ellers kan det kanskje legges til et sted.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *