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

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. Lambiente algorithm 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 e algorithm fornisce un wrapper “float” per algoritmi (implementato utilizzando algorithmic 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:

  1. algcompatible (completamente compatibile con il pacchetto algoritmico),
  2. algpascal (mira a creare un programma pascal formattato, puoi trasformare un programma pascal in una descrizione di algoritmo algpascal con alcune regole di sostituzione di base).
  3. 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 layout algpseudocode per i nuovi algoritmi. Per utilizzare algpseudocode, utilizza semplicemente \usepackage{algpseudocode}. Non è necessario caricare manualmente il pacchetto algorithmicx, 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} 

Commenti

  • Una bella e dettagliata risposta! Sembra che la versione TL; DRTL; DR sia: " use algorithmicx "? La tua discussione è molto chiara sul perché e se preferire algorithmicx a algorithmic, ma ' t offre molto confronto con algorithm2e. È perché lo conosci meno, perché è risaputo che è inferiore o qualcosaltro?
  • Sì, hai ragione: non ho molta familiarità con algorithm2e. Penso che dovrebbero offrire funzionalità simili, ma preferisco la sintassi di algorithmicx. Ho modificato la mia risposta per chiarire che è solo una mia preferenza (soggettiva).
  • Anche se carichi algorithmicx capisco che devi ancora caricare algorithm troppo?
  • Ampia risposta! Per una decisione rapida può essere utile includere immagini degli output compilati per ogni pacchetto
  • Quando ho letto la sezione su algorithmicx, non ho ' t ottenere immediatamente che algpseudocode dovrebbe essere caricato anche per poter utilizzare il pacchetto. Forse ' sono lunico che lha sperimentato, altrimenti potrebbe essere aggiunto da qualche parte.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *