Sunt confuz cu privire la pachetele pentru scrierea „algoritmilor” simpli. Există prea multe opțiuni și este confuz când trebuie să folosiți ce. De exemplu, dacă folosesc algpseudocode, atunci nu pot „adăuga algorithmic deoarece este deja inclus în algorithm pachet.

Există linii directoare definitive pentru o abordare simplificată? Orice sugestie va fi apreciată.

Comentarii

Răspuns

TL; versiune DR:

  • algoritm – float wrapper pentru algoritmi.
  • algoritmic – primul mediu de tipare a algoritmului.
  • algorithmicx – al doilea algoritm typesetti Mediu înconjurător.
  • algpseudocode – aspect pentru algorithmicx .
  • algorithm2e – al treilea mediu de tipare a algoritmului.

Folosesc algorithmicx cu algpseudocode deoarece sunt superioare algorithmic. Cred că algorithmicx oferă aceeași funcționalitate comparativ cu algorithm2e, dar sintaxul său este mai clar decât cel oferit de algorithm2e.

Versiune detaliată

algoritm

Float wrapper pentru algoritmi. Este similar cu comenzile de blocare table sau figure, pe care le înfășurați în jurul mesei / cifrei pentru a-i da un număr și pentru a preveni ca acesta să fie împărțit pe două pagini. Documentația spune:

Atunci când este plasat în text fără a fi încapsulat într-un flotant mediile algorithmic mediile pot fi împărțite peste o limită a paginii, afectând în mare măsură aspectul lor. În plus, este util să aveți algoritmi numerotați pentru referință și ca listele de algoritmi să fie anexate la lista de conținut. Mediul algorithm este menit să răspundă acestor probleme oferind un mediu plutitor pentru algoritmi.

Exemplu:

\begin{algorithm} \caption{Algorithm caption} \label{alg:algorithm-label} \begin{algorithmic} ... Your pseudocode ... \end{algorithmic} \end{algorithm} 

algoritmic

Acesta este mediul în care vă scrieți pseudocodul. Aveți comenzi predefinite pentru structuri comune precum if, while, procedure. Toate comenzile sunt cu majuscule, de ex. \IF{cond} ... \ELSE .... Documentația 1 spune:

algorithmic oferă un mediu pentru descrierea algoritmilor, iar mediul algorithm oferă un wrapper „float” pentru algoritmi (implementat utilizând algorithmic sau unele altă metodă la alegerea utilizatorilor). Motivul pentru care sunt oferite două medii este de a permite utilizatorului flexibilitate maximă.

Exemplu:

\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} 

algorithmicx

Acest pachet este ca algorithmic actualizat. Vă permite să definiți comenzi personalizate, ceea ce algorithmic nu poate face. Deci, dacă nu doriți să scrieți comenzile personalizate (nebunești), veți fi bine cu algorithmic. Folosiți algorithmicx în același mod în care utilizați algorithmic, doar sintaxa și detaliile sunt ușor diferite. Vedeți exemplul de mai jos pentru detalii. Documentația spune:

Pachetul algoritmicx în sine nu definește nicio comandă algoritmică , dar oferă un set de macrocomenzi pentru a defini un astfel de set de comenzi. Puteți utiliza numai algorithmicx și puteți defini comenzile dvs. sau puteți utiliza unul dintre seturile de comenzi predefinite

Exemplu:

\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

Acesta este doar un aspect pentru algorithmicx care încearcă să fie cât mai similar posibil pentru algorithmic. Există, de asemenea, alte aspecte, cum ar fi:

  1. algcompatible (complet compatibil cu pachetul algoritmic),
  2. algpascal (își propune să creeze un program pascal formatat, puteți transforma un program pascal într-o descriere a algoritmului algpascal cu câteva reguli de substituție de bază).
  3. algc (la fel ca algpascal, dar pentru c. Acest aspect este incomplet).

documentația spune:

Dacă sunteți familiarizat cu pachetul algoritmic, îl veți găsi ușor de schimbat. Puteți utiliza algoritmii vechi cu aspectul algcompatible, dar folosiți aspectul algpseudocode pentru algoritmi noi. Pentru a utiliza algpseudocode, pur și simplu utilizați \usepackage{algpseudocode}. Nu este nevoie să încărcați manual pachetul algorithmicx, deoarece acest lucru este realizat de algpseudocode.

Consultați exemplul pentru algorithmicx , folosește aspectul algpseudocode.


algorithm2e

Acesta este un alt mediu de algoritm la fel ca algorithmic sau algorithmicx. Documentația spune:

Algorithm2e este un mediu pentru scrierea algoritmilor în LaTeX2e. Un algorithm este definit ca figură ca obiect plutitor. Oferă macrocomenzi care vă permit să creați diferite tipuri de cuvinte cheie, astfel se oferă un set de cuvinte cheie predefinite. De asemenea, puteți modifica tipografia cuvintelor cheie.

Exemplu:

\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} 

Comentarii

  • Un răspuns minunat și detaliat! Sună ca versiunea TL; DRTL; DR este: " folosiți algorithmicx "? Discuția dvs. este foarte clară despre motivul și dacă, să preferați algorithmicx decât algorithmic, dar nu ' t oferă multă comparație cu algorithm2e. Se întâmplă asta pentru că îl cunoașteți mai puțin, pentru că este bine cunoscut că este inferior sau altceva?
  • Da, aveți dreptate: nu sunt foarte familiarizat cu algorithm2e. Cred că ar trebui să ofere funcționalități similare, dar prefer sintaxa algorithmicx. Mi-am editat răspunsul pentru a clarifica faptul că este doar preferința mea (subiectivă).
  • Chiar dacă încărcați algorithmicx Înțeleg că tot trebuie să încărcați algorithm de asemenea?
  • Răspuns extins! Pentru o decizie rapidă, poate fi util să includem imagini cu rezultatele compilate pentru fiecare pachet
  • Când am citit secțiunea despre algorithmicx, nu am ' obțineți imediat ca algpseudocode să fie încărcat și pentru a utiliza pachetul. Poate că eu ' sunt singurul care a experimentat asta, altfel ar putea fi adăugat undeva.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *