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
-
algpseudocode
er en del afalgorithmicx
-pakken, det giver dig en forbedret version afalgorithmic
udover at give nogle andre funktioner. - Relateret: Udskriv programmer med den korrekte syntaks
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, ogalgorithm
-miljøet giver en “float” -indpakning til algoritmer (implementeret ved hjælp afalgorithmic
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:
-
algcompatible
(fuldt kompatibel med den algoritmiske pakke), -
algpascal
(sigter mod at oprette et formateret pascal-program, du kan omdanne et pascal-program til enalgpascal
algoritmebeskrivelse med nogle grundlæggende substitutionsregler). -
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 brugalgpseudocode
layoutet til nye algoritmer. For at brugealgpseudocode
skal du blot bruge\usepackage{algpseudocode}
. Du behøver ikke at indlæsealgorithmicx
-pakken, da dette gøres vedalgpseudocode
.
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}
algorithmicx
"? Din diskussion er meget klar over, hvorfor og om du foretrækkeralgorithmicx
frem foralgorithmic
, men ikke ' t tilbyder meget sammenligning medalgorithm2e
. Er det fordi du er mindre fortrolig med det, fordi det er velkendt at være ringere eller noget andet?algorithm2e
. Jeg synes, de burde tilbyde lignende funktionalitet, men jeg foretrækker syntaksen foralgorithmicx
. Jeg redigerede mit svar for at gøre det klart, at det kun er min (subjektive) præference.algorithmicx
Jeg forstår, at du stadig skal indlæsealgorithm
også?algorithmicx
, gjorde jeg ikke ' t straks atalgpseudocode
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.