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.

È stato utile?

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}
}{
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top