Jsem zmatený ohledně balíčků pro psaní jednoduchých „algoritmů“. Existuje příliš mnoho možností a je matoucí, kdy co použít. Například pokud používám algpseudocode, pak nemohu přidat algorithmic, protože je již součástí algorithm balíček.

Existují nějaké definitivní pokyny pro efektivní přístup? Jakýkoli návrh bude oceněn.

Komentáře

  • algpseudocode je součástí balíčku algorithmicx, nabízí vylepšenou verzi algorithmic kromě poskytování některých dalších funkcí.
  • Související: Tisk programů se správnou syntaxí

Odpověď

Verze TL; DR:

  • algoritmus – float wrapper pro algoritmy.
  • algoritmický – první prostředí pro sazbu prvního algoritmu.
  • algorithmicx – druhý typ algoritmu ng prostředí.
  • algpseudocode – rozložení pro algorithmicx .
  • algorithm2e – prostředí pro sazbu třetího algoritmu.

Používám algorithmicx s algpseudocode, protože jsou lepší než algorithmic. Myslím, že algorithmicx nabízí stejnou funkčnost ve srovnání s algorithm2e, ale jeho syntaxe mi připadá jasnější než ta, kterou poskytuje algorithm2e.

Podrobná verze

algoritmus

Float wrapper pro algoritmy. Je to podobné jako blokovat příkazy table nebo figure, které omotáte kolem svého stolu / obrázku, abyste mu přidělili číslo a zabránili jeho rozdělit na dvě stránky. dokumentace říká:

Při umístění do textu bez zapouzdření v plovoucím textu Prostředí algorithmic mohou být rozdělena přes hranice stránky, což výrazně zhoršuje jejich vzhled. Kromě toho je užitečné mít číslované algoritmy pro referenci a pro přidání seznamů algoritmů k seznamu obsahu. Prostředí algorithm má tyto obavy řešit poskytnutím plovoucího prostředí pro algoritmy.

Příklad:

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

algoritmický

Toto je prostředí, ve kterém píšete svůj pseudokód. Máte předdefinované příkazy pro běžné struktury, jako jsou if, while, procedure. Všechny příkazy jsou psány velkými písmeny, např. \IF{cond} ... \ELSE .... Dokumentace 1 říká:

algorithmic poskytuje prostředí pro popis algoritmů a prostředí algorithm poskytuje obálku „float“ pro algoritmy (implementováno pomocí algorithmic nebo některých jiná metoda podle volby uživatele). Důvodem dvou poskytovaných prostředí je umožnit uživateli maximální flexibilitu.

Příklad:

\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

Tento balíček je upgradován jako algorithmic. Umožňuje vám definovat vlastní příkazy, což algorithmic nemůže udělat. Takže pokud nechcete psát své (bláznivé) vlastní příkazy, budete s algorithmic. algorithmicx používáte stejně jako algorithmic, pouze syntaxe a podrobnosti se mírně liší. Podrobnosti viz níže uvedený příklad. dokumentace říká:

Samotný balíček algorithmicx nedefinuje žádné algoritmické příkazy , ale dává sadu maker k definování takové sady příkazů. Můžete použít pouze algorithmicx a definovat příkazy sami, nebo můžete použít jednu z předdefinovaných sad příkazů

Příklad:

\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

Toto je pouze rozložení pro algorithmicx, které se snaží být co nejpodobnější algorithmic. Existují také další rozvržení, například:

  1. algcompatible (plně kompatibilní s algoritmickým balíčkem),
  2. algpascal (jeho cílem je vytvořit formátovaný program Pascal, program Pascal můžete transformovat do algpascal popisu algoritmu s některými základními pravidly náhrady).
  3. algc (stejně jako algpascal, ale pro c. Toto rozložení je neúplné).

dokumentace říká:

Pokud jste obeznámeni s algoritmickým balíčkem, najdete ho snadné přepínání. Staré algoritmy můžete použít s rozložením algcompatible, ale pro nové algoritmy použijte rozložení algpseudocode. Chcete-li použít algpseudocode, jednoduše použijte \usepackage{algpseudocode}. Balíček algorithmicx nemusíte načítat ručně, protože to provádí algpseudocode.

Viz příklad pro algorithmicx , používá algpseudocode rozložení.


algorithm2e

Toto je další prostředí algoritmu stejně jako algorithmic nebo algorithmicx. dokumentace říká:

Algorithm2e je prostředí pro psaní algoritmů v LaTeX2e. algorithm je definován jako plovoucí objekt jako čísla. Poskytuje makra, která vám umožňují vytvářet různé druhy klíčových slov, takže je dána sada předdefinovaných klíčových slov. Můžete také změnit typografii klíčových slov.

Příklad:

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

Komentáře

  • Krásná, podrobná odpověď! Zní to jako verze TL; DRTL; DR je: " použít algorithmicx "? Vaše diskuse je zcela jasná o tom, proč a zda upřednostňovat algorithmicx před algorithmic, ale ' nenabízejí mnoho srovnání s algorithm2e. Je to proto, že jste s tím méně obeznámeni, protože je dobře známo, že je podřadný, nebo něco jiného?
  • Ano, máte pravdu: algorithm2e. Myslím, že by měli nabízet podobné funkce, ale dávám přednost syntaxi algorithmicx. Upravil jsem svou odpověď, aby bylo jasné, že je to jen moje (subjektivní) preference.
  • I když načtete algorithmicx chápu, že stále musíte načíst algorithm příliš?
  • Rozsáhlá odpověď! Pro rychlé rozhodnutí může být užitečné zahrnout obrázky zkompilovaných výstupů pro každý balíček.
  • Když jsem četl sekci o algorithmicx, neudělal jsem ' t okamžitě zjistí, že algpseudocode by měl být také načten, aby bylo možné balíček použít. Možná jsem ' m jediný, kdo to zažil, jinak by to mohlo být někde přidáno.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *