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
-
algpseudocode
er en del avalgorithmicx
-pakken, det gir deg en forbedret versjon avalgorithmic
i tillegg til å tilby noen andre funksjoner. - Relatert: Skriv ut programmer med riktig syntaks
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, ogalgorithm
-miljøet gir et «float» -omslag for algoritmer (implementert ved hjelp avalgorithmic
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:
-
algcompatible
(fullt kompatibel med den algoritmiske pakken), -
algpascal
(tar sikte på å lage et formatert pascal-program, du kan forvandle et pascal-program til enalgpascal
algoritmebeskrivelse med noen grunnleggende substitusjonsregler). -
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 brukalgpseudocode
-oppsettet for nye algoritmer. For å brukealgpseudocode
, bruk bare\usepackage{algpseudocode}
. Du trenger ikke å lastealgorithmicx
-pakken manuelt, da dette gjøres avalgpseudocode
.
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}
algorithmicx
"? Diskusjonen din er veldig tydelig om hvorfor og om du foretrekkeralgorithmicx
framforalgorithmic
, men ikke ' t tilbyr mye sammenligning medalgorithm2e
. Er det fordi du er mindre kjent med det, fordi det er kjent for å være mindreverdig, eller noe annet?algorithm2e
. Jeg tror de burde tilby lignende funksjonalitet, men jeg foretrekker syntaksen tilalgorithmicx
. Jeg redigerte svaret mitt for å gjøre det klart at det bare er min (subjektive) preferanse.algorithmicx
Jeg forstår at du fortsatt må lastealgorithm
også?algorithmicx
, gjorde jeg ikke ' t umiddelbart atalgpseudocode
også skal lastes inn for å kunne bruke pakken. Kanskje jeg ' er den eneste som opplevde det, ellers kan det kanskje legges til et sted.