L'utilisation des listes, comment maintenir le regroupement des numéros de la liste?
-
02-10-2019 - |
Question
J'utilise le paquet listings
pour montrer le code, ainsi que des algorithmes en pseudo-code.
Voici ce que je voudrais arriver:
Algorithm 1.1: myFirstAlgorithm()
... content ...
Algorithm 1.2: mySecondAlgorithm()
... content ...
Code 1.1: My First Code Block
... content ...
Algorithm 1.3: myThirdAlgorithm()
... content ...
Bien que ce soit ce que je reçois:
Algorithm 1.1: myFirstAlgorithm()
... content ...
Algorithm 1.2: mySecondAlgorithm()
... content ...
Code 1.3: My First Code Block
... content ...
Algorithm 1.4: myThirdAlgorithm()
... content ...
Pour modifier le nom de la légende, j'utilise \renewcommand*{\lstlistingname}{Code}
et \renewcommand*{\lstlistingname}{Algorithm}
.
Il pourrait y avoir une meilleure façon de le faire, mais en tout cas, je suis encore aucune idée sur la façon de réinitialiser la numérotation, ou comment garder une trace de regroupement. Toute aide serait grandement appréciée.
La solution
Malgré mon commentaire ci-dessus, voici un code pour créer deux nouveaux environnements, algorithm
et code
, qui font ce que vous demandez.
\newcounter{oldlstlisting}
\newcounter{algorithm}[chapter]
\newcounter{code}[chapter]
\lstnewenvironment{algorithm}[1][]{
\setcounter{oldlstlisting}{\value{lstlisting}}
\setcounter{lstlisting}{\value{algorithm}}
\renewcommand*{\lstlistingname}{Algorithm}
\lstset{#1}
}{
\stepcounter{algorithm}
\setcounter{lstlisting}{\value{oldlstlisting}}
}
\lstnewenvironment{code}[1][]{
\setcounter{oldlstlisting}{\value{lstlisting}}
\setcounter{lstlisting}{\value{code}}
\renewcommand*{\lstlistingname}{Code}
\lstset{#1}
}{
\stepcounter{code}
\setcounter{lstlisting}{\value{oldlstlisting}}
}
Utilisation:
\begin{algorithm}[caption={myFirstAlgorithm()}]
... content ...
\end{algorithm}
\begin{algorithm}[caption={mySecondAlgorithm()}]
... content ...
\end{algorithm}
\begin{code}[caption={My First Code Block}]
... content ...
\end{code}
\begin{algorithm}[caption={myThirdAlgorithm()}]
... content ...
\end{algorithm}
Ce numéro par chapitre, comme vous avez probablement prévu et sont dénombrées indépendamment des environnements lstlisting
« réguliers ». En outre, vous pouvez spécifier des arguments de \lstset
supplémentaires (par exemple language=...
) dans la définition de l'environnement, si vous voulez.
Mise à jour: Pour utiliser la même numérotation pour tous, il suffit de retirer tous les contre-connexes code:
\lstnewenvironment{algorithm}[1][]{
\renewcommand*{\lstlistingname}{Algorithm}
\lstset{#1}
}{
}
\lstnewenvironment{code}[1][]{
\renewcommand*{\lstlistingname}{Code}
\lstset{#1}
}{
}