2010-07-02 41 views
0

我使用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}

有可能是一个更好的方法来做到这一点,但无论如何,我仍然无法知道如何重置编号,或如何跟踪分组。任何帮助将不胜感激。

+3

我会强烈建议不要更改编号。手稿中的所有对象都有一个编号,这使得读者更容易找到事物。我有一本定理3.6的数学书,接着是引理3.2,然后是练习3.6,然后是备注3.1,很难找到任何东西,因为在查看它们的数字之前,您必须搜索相同类型的对象。使用单一编号方案,您可以更轻松地进行“二分查找”。 – Thomas 2010-07-02 11:28:04

+0

你可能是对的。我认为读者会发现直观地将伪代码与通用代码分开排序。就像我对数字,表格,方程有不同的编号一样。 – swalog 2010-07-02 11:39:50

+0

我必须同意托马斯的观点。我发现,当它们全部按照相同的顺序排列时,可以更轻松地浏览书中的各种列表。 – 2010-07-02 11:42:50

回答

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} 
}{ 
} 
+0

美好。有一天我需要充分了解乳胶环境和微妙之处。首先,我需要完成我的论文。我会听取你的建议,并且对多个上市柜台至关重要。先生,祝你有美好的一天。 – swalog 2010-07-02 11:56:41

+0

它完美的作品!如果我想使用相同的编号,我在两种环境中都使用相同的计数器。我与乳胶的关系最初充满了仇恨和蔑视。现在不再有任何仇恨。我希望我能用言语表达我的感激之情,但唉:谢谢。 – swalog 2010-07-02 12:10:44

+0

不客气:)但如果你想使用相同的编号,根本不需要惹杂计数器。查看我的更新。 – Thomas 2010-07-02 12:15:33