更改 `lstlistoflistings` 编号

更改 `lstlistoflistings` 编号

我正在使用该listings包来格式化 LaTeX 中的程序代码,最后的列表列表按以下方式编号:

3.1 Code A
3.2 Code B
3.3 Code C
4.1 Code D
4.2 Code E

它会在每一章重新开始编号。但是,我需要的编号方案如下所示:

Listing 1 Code A
Listing 2 Code B
Listing 3 Code C
Listing 4 Code D
Listing 5 Code E

我已经尝试了其他问题推荐的解决方案:

\renewcommand*{\thelisting}{\sffamily\small\arabic{listing}}
% or
\renewcommand*{\thelstlisting}{\sffamily\small\arabic{lstlisting}}

但是,两个命令都会返回LaTeX Error: \thelstlisting undefined. [\renewcommand*{\thelstlisting}](或者thelisting是第一个命令)。

还有其他方法可以实现这一目标吗?

请注意,我正在使用来自我所在大学的自定义文档类,如果您需要任何信息,请直接询问。

编辑:

我的文档包含以下软件包:

inputenc, ulem, listings, textcomp, color, courier, url, tabto, multirow, tabularx, xcolor, amssymb, pifont, rotating, enumitem, chngcntr

文档类包含以下包:

remreset, scrhack, color, xcolor, xifthen, ifpdf, wallpaper, palatino, scrpage2, acronym, amsmath, amssymb, amsfonts, amstext, babel, array, iftex, hyperref, graphicx

答案1

这应该可以工作,但可能需要根据您所使用的类的设置进行一些调整。

\documentclass{report}

\usepackage{chngcntr}
\usepackage{listings}

\AtBeginDocument{% the counter is defined later
  \counterwithout{lstlisting}{chapter}%
}
\makeatletter
\renewcommand{\l@lstlisting}[2]{%
  \@dottedtocline{1}{0em}{1.5em}{\lstlistingname\ #1}{#2}%
}
\makeatother


\begin{document}
\lstlistoflistings

\chapter{A}

\begin{lstlisting}[caption=Code A]
xyz
\end{lstlisting}

\begin{lstlisting}[caption=Code A]
xyz
\end{lstlisting}

\chapter{B}

\begin{lstlisting}[caption=Code A]
xyz
\end{lstlisting}

\begin{lstlisting}[caption=Code A]
xyz
\end{lstlisting}

\end{document}

在此处输入图片描述

答案2

对于您的章节编号问题,有一个更简单的解决方案。该listings软件包提供了\lstset配置输出的命令。该numberbychapter=false选项的作用与宣传的完全一致。

代码:

\documentclass{scrbook}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}

\usepackage{xcolor}

\usepackage[final]{listings}
\lstset{numberbychapter=false, captionpos=b, caption=\lstname,frame=single,%
numbers=left, stepnumber=1, numbersep=2pt, xleftmargin=15pt, framexleftmargin=15pt,%
numberstyle=\tiny, tabsize=4, columns=fixed,%
basicstyle={\fontfamily{pcr}\selectfont\footnotesize},%
keywordstyle=\bfseries, commentstyle={\color[gray]{0.33}\itshape},%
stringstyle=\color[gray]{0.25}, breaklines, breakatwhitespace, breakautoindent}
\lstset{literate=
  {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
  {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
  {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
  {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
  {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
  {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
  {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
  {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
  {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
  {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
  {€}{{\EUR}}1 {£}{{\pounds}}1
}
\lstloadlanguages{[ANSI]C, C++, [gnu]make, gnuplot, Matlab}

\begin{document}
\chapter{TEST}
\begin{lstlisting}[language=C++,name={Example 1},label={sc:bsp}]
#include <iostream>

void SayHello(void)
{
    // Kommentar
    cout << "Hello World!" << endl;
}

int main(int argc, char **argv)
{
    SayHello();
    return 0;
}
\end{lstlisting}
\chapter{TEST}
\begin{lstlisting}[language=C++,name={Example 2},label={sc:bsp}]
#include <iostream>

void SayHello(void)
{
    // Kommentar
    cout << "Hello World!" << endl;
}

int main(int argc, char **argv)
{
    SayHello();
    return 0;
}
\end{lstlisting}
\chapter{TEST}
\begin{lstlisting}[language=C++,name={Example 3},label={sc:bsp}]
#include <iostream>

void SayHello(void)
{
    // Kommentar
    cout << "Hello World!" << endl;
}

int main(int argc, char **argv)
{
    SayHello();
    return 0;
}
\end{lstlisting}

\clearpage
\lstlistoflistings
\end{document}

输出: 在此处输入图片描述

您肯定不需要我提供的完整 lst-setup。但它应该可以让您大致了解什么是可能的。

更新——还添加了列表的条目前缀

要获得所需的输出,您必须拥有scrhack包和scr-class。使用选项加载类listof=entryprefix并使用指定条目前缀\listoflolentryname。然而,egreg 的解决方案对您现有的文档的改动要小得多,因为它只重新定义了如何将一行打印到您的列表列表中,并因此将其合并为您的 LoL。

\documentclass[listof=entryprefix]{scrbook}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}

\usepackage{scrhack}
\usepackage{xcolor}

\usepackage[final]{listings}
\lstset{numberbychapter=false}
\lstloadlanguages{C++}

%Rename How the Code should be named
\renewcommand\lstlistingname{Code}
%rename how the List should be named
\renewcommand\lstlistlistingname{List of Code}
%Add entry-prefix for listings
\newcommand\listoflolentryname\lstlistingname

\begin{document}
\tableofcontents
\chapter{TEST}
\begin{lstlisting}[language=C++,name={Example 1}, caption={Example 1},label={sc:bsp}]
#include <iostream>

void SayHello(void)
{
    // Kommentar
    cout << "Hello World!" << endl;
}

int main(int argc, char **argv)
{
    SayHello();
    return 0;
}
\end{lstlisting}
\chapter{TEST}
\begin{lstlisting}[language=C++,name={Example 2}, caption={Example 2},label={sc:bsp}]
#include <iostream>

void SayHello(void)
{
    // Kommentar
    cout << "Hello World!" << endl;
}

int main(int argc, char **argv)
{
    SayHello();
    return 0;
}
\end{lstlisting}
\chapter{TEST}
\begin{lstlisting}[language=C++,name={Example 3}, caption={Example 3},label={sc:bsp}]
#include <iostream>

void SayHello(void)
{
    // Kommentar
    cout << "Hello World!" << endl;
}

int main(int argc, char **argv)
{
    SayHello();
    return 0;
}
\end{lstlisting}

\clearpage
\lstlistoflistings
\end{document}

产生以下输出: 在此处输入图片描述

相关内容