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íčkualgorithmicx
, nabízí vylepšenou verzialgorithmic
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:
-
algcompatible
(plně kompatibilní s algoritmickým balíčkem), -
algpascal
(jeho cílem je vytvořit formátovaný program Pascal, program Pascal můžete transformovat doalgpascal
popisu algoritmu s některými základními pravidly náhrady). -
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žítalgpseudocode
, jednoduše použijte\usepackage{algpseudocode}
. Balíčekalgorithmicx
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}
algorithmicx
"? Vaše diskuse je zcela jasná o tom, proč a zda upřednostňovatalgorithmicx
předalgorithmic
, ale ' nenabízejí mnoho srovnání salgorithm2e
. 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?algorithm2e
. Myslím, že by měli nabízet podobné funkce, ale dávám přednost syntaxialgorithmicx
. Upravil jsem svou odpověď, aby bylo jasné, že je to jen moje (subjektivní) preference.algorithmicx
chápu, že stále musíte načístalgorithm
příliš?algorithmicx
, neudělal jsem ' t okamžitě zjistí, žealgpseudocode
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.