2010-07-02 36 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