Используя списки, как мне сохранить группировку номеров списков? - PullRequest
1 голос
/ 02 июля 2010

Я использую пакет 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 Ответ

0 голосов
/ 02 июля 2010

Несмотря на мой комментарий выше, вот некоторый код для создания двух новых сред, 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}
}{
}
...