使用列表,如何维护列表编号的分组?

时间:2010-07-02 11:22:22

标签: latex listings lstlisting

我正在使用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 :(得分:0)

尽管我在上面发表了评论,但这里有一些代码可以创建两个新环境,algorithmcode,可以满足您的要求。

\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}
}{
}
相关问题