L'utilisation des listes, comment maintenir le regroupement des numéros de la liste?

StackOverflow https://stackoverflow.com/questions/3165221

  •  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.

Était-ce utile?

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}
}{
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top