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

StackOverflow https://stackoverflow.com/questions/3165221

  •  02-10-2019
  •  | 
  •  

Вопрос

Я использую 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}.

Там может быть лучший способ сделать это, но в любом случае я все еще не знаю, как для сброса нумерации или как отслеживать группировку. Любая помощь будет очень ценится.

Это было полезно?

Решение

Несмотря на мой комментарий выше, вот какой-то код для создания двух новых сред, 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=...) в определении окружающей среды, если вы хотите.


Обновление: использовать то же самое для всех из них, просто удалите весь счетчик Counce:

\lstnewenvironment{algorithm}[1][]{
    \renewcommand*{\lstlistingname}{Algorithm}
    \lstset{#1}
}{
}
\lstnewenvironment{code}[1][]{
    \renewcommand*{\lstlistingname}{Code}
    \lstset{#1}
}{
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top