Использование списков, как я могу поддерживать группировку листинговых номеров?
-
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}
}{
}