Usando elenchi, come faccio a mantenere il raggruppamento di elencare i numeri?
-
02-10-2019 - |
Domanda
Sto usando il pacchetto listings
per mostrare il codice, così come gli algoritmi in pseudocodice.
Questo è quello che vorrei accadere:
Algorithm 1.1: myFirstAlgorithm()
... content ...
Algorithm 1.2: mySecondAlgorithm()
... content ...
Code 1.1: My First Code Block
... content ...
Algorithm 1.3: myThirdAlgorithm()
... content ...
Anche se questo è ciò che ottengo:
Algorithm 1.1: myFirstAlgorithm()
... content ...
Algorithm 1.2: mySecondAlgorithm()
... content ...
Code 1.3: My First Code Block
... content ...
Algorithm 1.4: myThirdAlgorithm()
... content ...
Per modificare il nome didascalia, sto usando \renewcommand*{\lstlistingname}{Code}
e \renewcommand*{\lstlistingname}{Algorithm}
.
Ci potrebbe essere un modo migliore per fare questo, ma in ogni caso io sono ancora all'oscuro su come reimpostare la numerazione, o il modo per tenere traccia di raggruppamento. Qualsiasi aiuto sarebbe molto apprezzato.
Soluzione
Nonostante il mio commento sopra, ecco qualche codice per creare due nuovi ambienti, algorithm
e code
, che fanno quello che chiedi.
\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}}
}
Utilizzo:
\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}
Queste numero per capitolo, come probabilmente previsto, e sono numerati in modo indipendente di ambienti lstlisting
"regolari". Inoltre, è possibile specificare gli argomenti \lstset
aggiuntive (ad esempio language=...
) nella definizione dell'ambiente, se si vuole.
Aggiornamento: Per utilizzare la stessa numerazione per tutti loro, è sufficiente rimuovere tutto il codice anti-correlato:
\lstnewenvironment{algorithm}[1][]{
\renewcommand*{\lstlistingname}{Algorithm}
\lstset{#1}
}{
}
\lstnewenvironment{code}[1][]{
\renewcommand*{\lstlistingname}{Code}
\lstset{#1}
}{
}