Sono confuso sui pacchetti per scrivere semplici “algoritmi”. Ci sono troppe opzioni e non è chiaro quando usare cosa. Ad esempio, se utilizzo algpseudocode
, non posso “aggiungere algorithmic
perché è già incluso nel algorithm
pacchetto.
Esistono linee guida definitive per un approccio semplificato? Qualsiasi suggerimento sarà apprezzato.
Commenti
-
algpseudocode
fa parte delalgorithmicx
bundle, ti offre una versione migliorata dialgorithmic
oltre a fornire alcune altre funzionalità. - Correlati: Stampa i programmi con la sintassi corretta
Risposta
TL; versione DR:
- algoritmo – wrapper float per algoritmi.
- algoritmico – primo ambiente di composizione dellalgoritmo.
- algoritmox – secondo algoritmo typesetti ng ambiente.
- algpseudocode – layout per
algorithmicx
. - algoritmom2e – terzo ambiente di composizione dellalgoritmo.
Utilizzo algorithmicx
con algpseudocode
poiché sono superiori a algorithmic
. Penso che algorithmicx
offra la stessa funzionalità rispetto a algorithm2e
, ma trovo la sua sintassi più chiara di quella fornita da algorithm2e
.
Versione dettagliata
algoritmo
Wrapper mobile per algoritmi. È simile ai comandi di blocco table
o figure
, che avvolgi intorno alla tabella / cifra per assegnargli un numero e per evitare che venga diviso in due pagine. La documentazione dice:
Quando inserita nel testo senza essere incapsulata in un floating environment
algorithmic
gli ambienti possono essere suddivisi su un limite di pagina, riducendo notevolmente il loro aspetto. Inoltre, è utile avere algoritmi numerati per riferimento e per elenchi di algoritmi da aggiungere allelenco dei contenuti. Lambientealgorithm
ha lo scopo di affrontare questi problemi fornendo un ambiente mobile per gli algoritmi.
Esempio:
\begin{algorithm} \caption{Algorithm caption} \label{alg:algorithm-label} \begin{algorithmic} ... Your pseudocode ... \end{algorithmic} \end{algorithm}
algoritmico
Questo è lambiente in cui scrivi il tuo pseudocodice. Hai comandi predefiniti per strutture comuni come if
, while
, procedure
. Tutti i comandi sono in maiuscolo, ad es. \IF{cond} ... \ELSE ...
. La documentazione 1 dice:
Il
algorithmic
fornisce un ambiente per descrivere algoritmi ealgorithm
fornisce un wrapper “float” per algoritmi (implementato utilizzandoalgorithmic
o alcuni altro metodo a scelta dellutente). Il motivo per cui vengono forniti due ambienti è consentire allutente la massima flessibilità.
Esempio:
\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
Questo pacchetto è come algorithmic
aggiornato. Ti consente di definire comandi personalizzati, cosa che algorithmic
non può “fare. Quindi se non vuoi scrivere i tuoi (pazzi) comandi personalizzati, starai bene con algorithmic
. Utilizzi algorithmicx
nello stesso modo in cui utilizzi algorithmic
, solo la sintassi e i dettagli sono leggermente diversi. Vedere lesempio di seguito per i dettagli. La documentazione dice:
Il pacchetto algoritmicx stesso non definisce alcun comando algoritmico , ma fornisce una serie di macro per definire tale insieme di comandi. Puoi utilizzare solo algoritmicx e definire i comandi da solo, oppure puoi utilizzare uno dei set di comandi predefiniti
Esempio:
\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
Questo è solo un layout per algorithmicx
che cerca di essere il più simile possibile a algorithmic
. Sono disponibili anche altri layout, come:
-
algcompatible
(completamente compatibile con il pacchetto algoritmico), -
algpascal
(mira a creare un programma pascal formattato, puoi trasformare un programma pascal in una descrizione di algoritmoalgpascal
con alcune regole di sostituzione di base). -
algc
(proprio come lalgpascal, ma per c. Questo layout è incompleto).
Il documentazione dice:
Se hai familiarità con il pacchetto algoritmico, lo troverai facile da cambiare. Puoi utilizzare i vecchi algoritmi con il layout
algcompatible
, ma utilizza il layoutalgpseudocode
per i nuovi algoritmi. Per utilizzarealgpseudocode
, utilizza semplicemente\usepackage{algpseudocode}
. Non è necessario caricare manualmente il pacchettoalgorithmicx
, poichéalgpseudocode
.
Guarda lesempio per algorithmicx
, utilizza il layout algpseudocode
.
algoritmom2e
Questo è un altro ambiente algoritmo proprio come algorithmic
o algorithmicx
. La documentazione dice:
Algorithm2e è un ambiente per la scrittura di algoritmi in LaTeX2e. Un
algorithm
è definito come oggetti fluttuanti come figure. Fornisce macro che consentono di creare diversi tipi di parole chiave, quindi viene fornito un insieme di parole chiave predefinite. Puoi anche modificare la tipografia delle parole chiave.
Esempio:
\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
"? La tua discussione è molto chiara sul perché e se preferirealgorithmicx
aalgorithmic
, ma ' t offre molto confronto conalgorithm2e
. È perché lo conosci meno, perché è risaputo che è inferiore o qualcosaltro?algorithm2e
. Penso che dovrebbero offrire funzionalità simili, ma preferisco la sintassi dialgorithmicx
. Ho modificato la mia risposta per chiarire che è solo una mia preferenza (soggettiva).algorithmicx
capisco che devi ancora caricarealgorithm
troppo?algorithmicx
, non ho ' t ottenere immediatamente chealgpseudocode
dovrebbe essere caricato anche per poter utilizzare il pacchetto. Forse ' sono lunico che lha sperimentato, altrimenti potrebbe essere aggiunto da qualche parte.