【问题标题】:Using listings, how do I maintain grouping of listing numbers?使用列表,我如何维护列表编号的分组?
【发布时间】:2010-07-02 11:22:22
【问题描述】:

我正在使用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.6,引理 3.2,练习 3.6,备注 3.1,很难找到任何东西,因为你必须搜索相同类型的对象,甚至在查看它们的数字之前。使用单一编号方案,您可以更轻松地“二分查找”。
  • 你可能是对的。我假设读者会发现将伪代码与通用代码分开排序很直观。就像我有一组不同的数字、表格、方程式编号一样。
  • 我必须同意托马斯的观点。我发现一本书中的各种列表都按相同的顺序排列时,浏览它们会容易得多。
  • 公平 :) 我会屈服于普遍共识的意愿。但是,如果有人知道解决方案,我想知道。如果只是为了启用它并回忆可能发生的事情。 叹息

标签: latex listings lstlisting


【解决方案1】:

尽管上面有我的评论,这里有一些代码可以创建两个新环境,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}
}{
}

【讨论】:

  • 太棒了。有一天,我需要完全了解乳胶环境和其中的微妙之处。首先我需要完成我的论文。不过,我会听从您的建议,并对多个上市柜台至关重要。祝您有美好的一天,先生。
  • 而且效果很好!如果我想使用相同的编号,我会在两种环境中使用相同的计数器。我与乳胶的关系最初充满了仇恨和蔑视。现在已经没有仇恨了。我希望我能用语言以外的其他方式表达我的感激之情,但是唉:谢谢。
  • 不客气 :) 但是,如果您想使用相同的编号,则根本无需弄乱计数器。查看我的更新。
猜你喜欢
  • 2015-12-06
  • 2019-07-21
  • 2023-01-18
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
相关资源
最近更新 更多