Используя списки, как мне сохранить группировку номеров списков?

Я использую 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}
}{
}
Другие вопросы по тегам