Il existe plusieurs façons de mettre du code sur la page. verbatim reproduit ce que vous avez saisi; listings et minted affichent du vrai code source avec couleur et numéros de ligne; une troisième voie présente une procédure indépendante du langage dans une boîte numérotée « Algorithm 1 » : le pseudocode. Contrairement au vrai code, le pseudocode est composé comme un *flottant* : il se place sur la page comme une figure ou une table et porte une légende, un numéro courant, des renvois et une liste des algorithmes. Cette page explique comment le présenter proprement comme *objet listé*, surtout pour les légendes et la numérotation. Le traitement complet commande par commande se trouve dans /learn/math/algorithms; ici nous donnons la carte des deux écosystèmes et un exemple minimal de chacun.
Le pseudocode se compose comme un flottant
Là où verbatim et listings placent le code dans le flux du texte, le pseudocode est normalement présenté dans un flottant. Un flottant est une boîte, comme figure ou table, que LaTeX positionne automatiquement en évitant les coupures de page maladroites. Cela apporte deux choses. D’abord, une légende numérotée « Algorithm 1 » que le texte peut viser avec \ref. Ensuite, un long algorithme n’est pas coupé maladroitement à une frontière de page : l’environnement interne peut se couper s’il est placé en ligne, mais la boîte flottante reste entière et passe à la page suivante comme unité.
Le premier obstacle vient de plusieurs paquets aux noms proches. La clé est une division du travail : un paquet fournit le contenant, la boîte flottante numérotée, et un autre fournit le contenu, le pseudocode lui-même. Mais cette séparation ne vaut que pour l’un des deux camps. En pratique, il y a deux grands choix.
- Deux couches :
algorithm(contenant) +algpseudocode(contenu). Le flottantalgorithmfournit la boîte flottante, la légende et le numéro;algpseudocode(la mise en page standard d’algorithmicx) fournit le corps du pseudocode :\State,\For,\If, etc. - Un seul paquet :
algorithm2e. Autonome : il apporte son propre flottant, sa légende et ses commandes de corps (\KwIn/\KwOut,\eIf, …). On n’ajoute pasalgorithm(les deux entrent en conflit sur le nom de l’environnement flottant).
La règle la plus importante, d’emblée : choisissez un camp pour tout le document. algpseudocode et algorithm2e diffèrent entièrement par leur syntaxe et leur philosophie, et les charger tous les deux provoque des conflits sur des commandes communes comme \For et \If. Quel que soit le choix, compilez deux fois comme d’habitude pour stabiliser numéros, renvois et liste des algorithmes.
Légendes, numéros, renvois et liste des algorithmes
La présentation est le centre de cette page. Dans les deux camps, \caption{…} produit un titre « Algorithm N », N étant numéroté automatiquement dans l’ordre d’apparition. Placez \label{key} juste après et le texte pourra récupérer ce numéro avec \ref{key} (ou la page avec \pageref{key}), exactement comme pour une figure ou une table.
Un autre avantage du flottant numéroté est la liste des algorithmes. À côté de \listoffigures et \listoftables, \listofalgorithms génère une liste de type table des matières qui rassemble le numéro et la légende de chaque algorithme. Le texte qui y apparaît est celui donné à \caption, et cela fonctionne de la même façon avec le flottant algorithm et avec algorithm2e. Notez qu’algorithm2e propose aussi des macros de titre distinctes de \caption; elles n’ajoutent pas d’entrée à la liste des algorithmes.
L’emplacement de la légende dépend des conventions. Avec le flottant algorithm, vous pouvez placer \caption avant ou après le corps, comme pour une figure (beaucoup la mettent en haut). Avec algorithm2e, l’usage est de placer \caption à la fin de l’environnement, et cette légende sert aussi de nom de référence dans la liste des algorithmes.
Camp 1 : algorithm + algpseudocode
On enveloppe l’ensemble dans un flottant algorithm, puis on écrit le pseudocode dans l’environnement interne algorithmic (le paquet s’appelle algpseudocode, mais l’environnement s’appelle algorithmic). Toutes les commandes du corps sont en casse titre (\State, \While, …), ce qui les distingue de l’ancien algorithmic tout en majuscules (\STATE). Les commandes les plus utiles :
\State— début d’une instruction (ligne); une par instruction.\For{…}…\EndFor/\While{…}…\EndWhile— boucles.\If{…}…\ElsIf{…}…\Else…\EndIf— branchements.\Function{name}{args}…\EndFunction, plus\Return— fonctions et valeurs de retour.\Require/\Ensure— préconditions et postconditions (avec libellé gras).\Comment{…}— commentaire de fin de ligne.
L’argument optionnel [1] règle la numérotation des lignes : 1 numérote chaque ligne, n une ligne sur n, et l’absence d’argument ne numérote pas. Voici un exemple minimal calculant la puissance y = xⁿ; notez le \label placé juste après \caption.
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\begin{document}
\listofalgorithms
\begin{algorithm}
\caption{Calculate $y = x^n$}\label{alg:power}
\begin{algorithmic}[1]
\Require $n \geq 0$
\State $y \gets 1$
\While{$n \neq 0$}
\State $y \gets y \times x$
\State $n \gets n - 1$ \Comment{count down}
\EndWhile
\State \Return $y$
\end{algorithmic}
\end{algorithm}
アルゴリズム~\ref{alg:power} は累乗を計算する。
\end{document}À la compilation, une boîte avec des règles en haut et en bas flotte sur la page, titrée « Algorithm 1 Calculate y = xⁿ » (le numéro est automatique). Chaque ligne est numérotée 1, 2, 3 … sur le bord gauche, et \ref{alg:power} dans le texte se résout en ce numéro (ici 1). Le \listofalgorithms placé en tête produit une entrée du type « 1 Calculate y = xⁿ … page ». Pour la sortie de chaque commande, y compris \ElsIf et \Function, voir /learn/math/algorithms.
Camp 2 : algorithm2e
algorithm2e est un écosystème séparé, autonome dans un seul paquet (version actuelle 5.2, 2017). Chargez-le avec \usepackage[…]{algorithm2e} avant \begin{document}; son environnement algorithm est lui-même le flottant. L’apparence se choisit par options de chargement : ruled (règles en haut et en bas), boxed (boîte autour de tout), vlined/lined (lignes verticales pour les blocs), plain (par défaut, sans décor); linesnumbered ajoute les numéros de ligne. Trois points de syntaxe comptent :
- Entrée/sortie utilisent des commandes dédiées
\KwIn{…}/\KwOut{…}(ou\KwData{…}/\KwResult{…}), composées comme « Input: », « Output: », etc. en gras. - Branches et boucles reçoivent leur corps comme argument entre accolades. Un if–then–else s’écrit
\eIf{cond}{then}{else}; les boucles sont\For{…}{body}et\While{…}{body}(avec\KwTopour « to »). - Chaque instruction se termine par
\\;(barre oblique inverse et point-virgule). Si vous l’oubliez, l’instruction suivante continue sur la même ligne. Pour masquer le « ; » dans la sortie, utilisez\DontPrintSemicolon.
\documentclass{article}
\usepackage[ruled,linesnumbered]{algorithm2e}
\begin{document}
\listofalgorithms
\begin{algorithm}
\caption{Sum of positive entries}\label{alg:sum}
\KwIn{an array $a[1..n]$}
\KwOut{the sum $s$ of its positive entries}
$s \gets 0$\;
\For{$i \gets 1$ \KwTo $n$}{
\eIf{$a[i] > 0$}{
$s \gets s + a[i]$\;
}{
skip\;
}
}
\Return $s$\;
\end{algorithm}
アルゴリズム~\ref{alg:sum} は正の要素を合計する。
\end{document}L’option ruled trace des règles en haut et en bas avec une ligne de légende en haut, et linesnumbered numérote chaque ligne. La boîte commence par « Input: » et « Output: » en gras; la ligne \For se lit for i ← 1 to n do avec le corps indenté; \eIf place le bloc vrai if … then au-dessus du bloc faux else. Chaque \; provoque un saut de ligne, et la dernière ligne affiche return s. Le texte de \caption apparaît tel quel dans \listofalgorithms. Pour un contrôle plus fin, [H] pour fixer l’algorithme en place, \SetAlgoLined pour tracer des lignes verticales de bloc, et le reste, voir /learn/math/algorithms.
Lequel utiliser ?
Les deux sont largement utilisés; c’est une question d’idiome, non de supériorité. Le tableau rapide ci-dessous aide à choisir.
| Aspect | algorithm + algpseudocode | algorithm2e |
|---|---|---|
構成 | Deux couches, deux paquets | Un paquet autonome |
本体の書き方 | Commandes simples menées par \State | Corps de bloc passé entre accolades |
入出力 | \Require / \Ensure | \KwIn / \KwOut (explicite) |
行末 | Non requis | \\; requis |
向く人 | Aspect traditionnel; modèles qui le supposent | E/S explicite, lignes verticales, mots-clés multilingues |
Dans les deux cas, la présentation est la même : \caption donne un titre numéroté, \label/\ref le référencent, et \listofalgorithms construit la liste. À répéter : choisissez un seul paquet pour le corps; si vous utilisez algorithm2e, ne chargez pas le contenant algorithm. La référence exhaustive des commandes et des exemples plus longs se trouvent dans /learn/math/algorithms. Si vous voulez plutôt du vrai code source avec couleur et numéros de ligne, pas du pseudocode, utilisez listings/minted dans /learn/code-verbatim/code-listings.