Je suis confus au sujet des paquets pour écrire des « algorithmes » simples. Il y a trop doptions et il est difficile de savoir quand utiliser quoi. Par exemple, si jutilise algpseudocode
, alors je ne peux « t ajouter algorithmic
car il est déjà inclus dans le algorithm
package.
Existe-t-il des directives définitives pour une approche simplifiée? Toute suggestion sera appréciée.
Commentaires
-
algpseudocode
fait partie du bundlealgorithmicx
, il vous offre une version améliorée dealgorithmic
en plus de fournir dautres fonctionnalités. - Connexes: Imprimer les programmes avec leur syntaxe appropriée
Réponse
TL; version DR:
- algorithme – wrapper float pour les algorithmes.
- algorithmique – premier environnement de composition dalgorithmes.
- algorithmicx – deuxième algorithme typesetti ng environnement.
- algpseudocode – mise en page pour
algorithmicx
. - algorithm2e – troisième environnement de composition dalgorithmes.
Jutilise algorithmicx
avec algpseudocode
car ils sont supérieurs à algorithmic
. Je pense que algorithmicx
offre la même fonctionnalité que algorithm2e
, mais je trouve sa syntaxe plus claire que celle fournie par algorithm2e
.
Version détaillée
algorithme
Emballage flottant pour les algorithmes. Il est similaire aux commandes de bloc table
ou figure
, que vous enroulez autour de votre tableau / figure pour lui donner un nombre et pour éviter quil ne soit divisé sur deux pages. La documentation dit:
Lorsquil est placé dans le texte sans être encapsulé dans un flottant environnement
algorithmic
les environnements peuvent être répartis sur une limite de page, ce qui nuit considérablement à leur apparence. De plus, il est utile davoir des algorithmes numérotés pour référence et pour que des listes dalgorithmes soient annexées à la liste des contenus. Lenvironnementalgorithm
est censé répondre à ces préoccupations en fournissant un environnement flottant pour les algorithmes.
Exemple:
\begin{algorithm} \caption{Algorithm caption} \label{alg:algorithm-label} \begin{algorithmic} ... Your pseudocode ... \end{algorithmic} \end{algorithm}
algorithmique
Cest lenvironnement dans lequel vous écrivez votre pseudocode. Vous avez des commandes prédéfinies pour des structures courantes telles que if
, while
, procedure
. Toutes les commandes sont en majuscules, par exemple \IF{cond} ... \ELSE ...
. La documentation 1 dit:
Le
algorithmic
fournit un environnement pour décrire les algorithmes et lenvironnementalgorithm
fournit un wrapper «float» pour les algorithmes (implémenté en utilisantalgorithmic
ou certains autre méthode au choix des utilisateurs). La raison pour laquelle deux environnements sont fournis est de permettre à lutilisateur une flexibilité maximale.
Exemple:
\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
Ce paquet est comme algorithmic
mis à jour. Il vous permet de définir des commandes personnalisées, ce que algorithmic
ne peut pas faire. Donc, si vous ne voulez pas écrire vos commandes personnalisées (folles), tout ira bien avec algorithmic
. Vous utilisez algorithmicx
de la même manière que vous utilisez algorithmic
, seules la syntaxe et les détails sont légèrement différents. Voir lexemple ci-dessous pour plus de détails. La documentation dit:
Le package algorithmicx lui-même ne définit aucune commande algorithmique , mais donne un ensemble de macros pour définir un tel jeu de commandes. Vous pouvez utiliser uniquement algorithmicx et définir les commandes vous-même, ou vous pouvez utiliser lun des ensembles de commandes prédéfinis
Exemple:
\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
Ceci est juste une mise en page pour algorithmicx
qui essaie dêtre aussi similaire que possible pour algorithmic
. Il existe également dautres mises en page, telles que:
-
algcompatible
(entièrement compatible avec le package algorithmique), -
algpascal
(vise à créer un programme pascal formaté, vous pouvez transformer un programme pascal en une description dalgorithmealgpascal
avec quelques règles de substitution de base). -
algc
(tout comme lalgpascal, mais pour c. Cette mise en page est incomplète).
Le documentation dit:
Si vous êtes familier avec le paquet algorithmique, vous le trouverez facile à changer. Vous pouvez utiliser les anciens algorithmes avec la disposition
algcompatible
, mais veuillez utiliser la dispositionalgpseudocode
pour les nouveaux algorithmes. Pour utiliseralgpseudocode
, utilisez simplement\usepackage{algpseudocode}
. Vous navez pas besoin de charger manuellement le packagealgorithmicx
, car cela est fait paralgpseudocode
.
Voir lexemple pour algorithmicx
, il utilise la disposition algpseudocode
.
algorithm2e
Ceci est un autre environnement dalgorithme tout comme algorithmic
ou algorithmicx
. La documentation dit:
Algorithm2e est un environnement pour écrire des algorithmes en LaTeX2e. Un
algorithm
est défini comme un objet flottant comme des figures. Il fournit des macros qui vous permettent de créer différentes sortes de mots clés, ainsi un ensemble de mots clés prédéfinis est donné. Vous pouvez également modifier la typographie des mots-clés.
Exemple:
\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
"? Votre discussion est très claire sur pourquoi et si vous préférezalgorithmicx
àalgorithmic
, mais ' t offre beaucoup de comparaison avecalgorithm2e
. Est-ce parce que vous le connaissez moins, parce quil est bien connu pour être inférieur, ou autre chose?algorithm2e
. Je pense quils devraient offrir des fonctionnalités similaires, mais je préfère la syntaxe dealgorithmicx
. Jai modifié ma réponse pour préciser que ce nest que ma préférence (subjective).algorithmicx
Je comprends que vous devez toujours chargeralgorithm
aussi?algorithmicx
, je nai pas ' t obtenir immédiatement quealgpseudocode
doit également être chargé afin dutiliser le paquet. Peut-être que je ' suis le seul à avoir vécu cela, sinon cela pourrait peut-être être ajouté quelque part.