Используя списки, как мне сохранить группировку номеров списков?
Я использую listings
пакет для отображения кода, а также алгоритмы в псевдокоде.
Вот что я хотел бы, чтобы произошло:
Algorithm 1.1: myFirstAlgorithm()
... content ...
Algorithm 1.2: mySecondAlgorithm()
... content ...
Code 1.1: My First Code Block
... content ...
Algorithm 1.3: myThirdAlgorithm()
... content ...
Пока вот что я получаю:
Algorithm 1.1: myFirstAlgorithm()
... content ...
Algorithm 1.2: mySecondAlgorithm()
... content ...
Code 1.3: My First Code Block
... content ...
Algorithm 1.4: myThirdAlgorithm()
... content ...
Чтобы изменить название подписи, я использую \renewcommand*{\lstlistingname}{Code}
а также \renewcommand*{\lstlistingname}{Algorithm}
,
Возможно, есть лучший способ сделать это, но в любом случае я все еще не знаю, как сбросить нумерацию или как отслеживать группировку. Любая помощь будет принята с благодарностью.
1 ответ
Несмотря на мой комментарий выше, вот некоторый код для создания двух новых сред, algorithm
а также code
, делай то, что просишь.
\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}}
}
Использование:
\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}
Эти числа по главам, как вы, вероятно, предполагали, и нумеруются независимо от "обычного" lstlisting
сред. Кроме того, вы можете указать дополнительные \lstset
аргументы (например, language=...
) в определении среды, если хотите.
Обновление: чтобы использовать одинаковую нумерацию для всех них, просто удалите весь код, связанный со счетчиком:
\lstnewenvironment{algorithm}[1][]{
\renewcommand*{\lstlistingname}{Algorithm}
\lstset{#1}
}{
}
\lstnewenvironment{code}[1][]{
\renewcommand*{\lstlistingname}{Code}
\lstset{#1}
}{
}