上市:不同的上市环境有不同的柜台

上市:不同的上市环境有不同的柜台

如何创建两个具有各自计数器的 lstlisting 环境?

例如如果我使用

\lstnewenvironment{algorithm}[2]{
    \renewcommand\lstlistingname{Algorithm}
    \lstset{ ... }
} {}

\lstnewenvironment{program}[2]{
    \renewcommand\lstlistingname{Program}
    \lstset{ ... }
} {}

进而

\begin{algorithm}{Algorithm caption}{alg-label}
...
\end{algorithm}

\begin{program}{Program caption}{prg-label}
...
\end{program}

然后他们将共享计数器,例如

Algorithm 1.1
    ...
Program 1.2
    ...

我希望对于不同的列表环境,计数是独立的。

我还使用 caption 包来创建漂亮的标题。我已经尝试了很多方法,但都没有成功。我发现唯一能指示如何更改计数器/文件扩展名的方法是通过 ie \DeclareCaptionType[fileext=alg]{algorithm},但问题是这个命令已经定义了一个新环境,所以我不知道如何将它与新的 listings 环境和 caption 包一起使用。例如,我使用以下设置:

\DeclareCaptionFont{white}{\color{white}}
\DeclareCaptionFormat{listing}{\colorbox[cmyk]{0.43, 0.35, 0.35,0.01}{\parbox{\textwidth}{\hspace{15pt}#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}}

答案1

本着埃琳娜评论

\newcounter{algorithm}
\lstnewenvironment{algorithm}[2]{
    \renewcommand\lstlistingname{Algorithm}
    \setcounter{lstlisting}{\value{algorithm}}
    \lstset{ ... }
} {\addtocounter{algorithm}{1}}

\newcounter{program}
\lstnewenvironment{program}[2]{
    \renewcommand\lstlistingname{Program}
    \setcounter{lstlisting}{\value{program}}
    \lstset{ ... }
} {\addtocounter{program}{1}}

然后执行以下操作:

\begin{algorithm}{Algorithm caption}{alg-label}
...
\end{algorithm}

\begin{algorithm}{Another algorithm caption}{another-alg-label}
...
\end{algorithm}

\begin{program}{Program caption}{prg-label}
...
\end{program}

结果是:

Algorithm 1.1
    ...
Algorithm 1.2
    ...
Program 1.1
    ...

答案2

也许您应该尝试手动调用命令setcounter来改变计数器lstlisting

\setcounter{lstlisting}{value}

因此,您将能够为每个新环境重新初始化计数器。

然后,您可以做更复杂的事情,例如使用标签的值自动调用 setcounter。

答案3

并非一切都fraktalek 的回答已明确显示。我无法使用提供的代码并复制他的输出。具体来说,缺少标题和(我假设)标签。

我发现这个答案这对我有帮助,我注意到 中有一个标题字段lstset。因此,这是一个完整的工作示例,其中包含两个自定义 中的标题和标签lstnewenvironment

\documentclass[11pt, english, letterpaper]{article}
\usepackage[utf8]{inputenc}
\usepackage[scaled=0.9]{couriers}  % Typewriter font which supports bold
\usepackage[scaled]{helvet}

\usepackage{listings}

\newcounter{algorithm}
\lstnewenvironment{algorithm}[2]{
    \renewcommand\lstlistingname{Algorithm}
    \setcounter{lstlisting}{\value{algorithm}}
    \lstset
    {
        language=C,
        basicstyle=\ttfamily,
        frame = tb,
        caption={[#1]{#1}},      % <------------- NOTICE
        label={#2},              % <------------- NOTICE
    }
}{\addtocounter{algorithm}{1}}

\newcounter{program}
\lstnewenvironment{program}[2]{
    \renewcommand\lstlistingname{Program}
    \setcounter{lstlisting}{\value{program}}
    \lstset
    {
        language=Python,
        basicstyle=\ttfamily,
        frame = tb,
        caption={[#1]{#1}},
        label={#2},
    }
}{\addtocounter{program}{1}}


\begin{document}

Text before, referencing Algorithm \ref{alg-label}.

\begin{algorithm}{Something descriptive}{alg-label}
#include <stddef.h>
\end{algorithm}

\begin{algorithm}{Something descriptive}{alg-label2}
char * foo(unsigned char bar);
\end{algorithm}

\begin{program}{Something descriptive}{prog-label}
def foo(bar: int) -> str:
    print(bar)
\end{program}

Text after, referencing Algorithm \ref{alg-label2} and Program \ref{prog-label}.

\end{document}

由此产生...

LaTeX 列出带有标题和标签的不同计数器

相关内容