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 avalgorithmicx
-paketet, det ger dig en förbättrad version avalgorithmic
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 ochalgorithm
-miljön tillhandahåller ett ”float” -omslag för algoritmer (implementerat medalgorithmic
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:
-
algcompatible
(helt kompatibel med det algoritmiska paketet), -
algpascal
(syftar till att skapa ett formaterat pascal-program, du kan förvandla ett pascal-program till enalgpascal
algoritmbeskrivning med några grundläggande substitutionsregler). -
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ändalgpseudocode
-layouten för nya algoritmer. För att användaalgpseudocode
använder du bara\usepackage{algpseudocode}
. Du behöver inte laddaalgorithmicx
-paketet, eftersom detta görs avalgpseudocode
.
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}
algorithmicx
"? Din diskussion är mycket tydlig om varför och om du föredraralgorithmicx
framföralgorithmic
, men inte ' t erbjuder mycket jämförelse medalgorithm2e
. Ä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?algorithm2e
. Jag tycker att de borde erbjuda liknande funktioner, men jag föredrar syntaxen föralgorithmicx
. Jag redigerade mitt svar för att klargöra att det bara är min (subjektiva) preferens.algorithmicx
Jag förstår att du fortfarande måste laddaalgorithm
också?algorithmicx
gjorde jag inte ' t får omedelbart attalgpseudocode
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.