自定义列表

自定义列表

我想让列表与默认列表略有不同。例如,对于图形,我使用了包tocloft。它工作正常,我想知道是否tocloft可以对列表做同样的事情。例如,我想要它像这样:

\renewcommand{\cftfigpresnum}{Figure }
\settowidth{\cftfignumwidth}{Figure 20\quad}
\setlength{\cftfignumwidth}{2.5cm}
\listoffigures

我已经使用了以下几行:

 \renewcommand\lstlistlistingname{List of Programs}
 \addcontentsline{toc}{chapter}{List of Programs}
 \lstlistoflistings

但我希望,在这种情况下,列表显示为程序 1.1,而不是单独的 1.1。我该怎么做??

谢谢,克劳德

答案1

如果float不使用该包,listing则“劫持”命令\@starttoc并“假装”排版 ToC——因为这一切都是在一个组中完成的,所以真实ToC不会受到影响。

tocloft本身不能改变,list of...因为包本身或标准类之一没有提供这些改变。

以下代码更改\l@lstlisting命令定义并在列表编号前插入单词“Program”。\l@lstlisting正在执行与\l@section等等相同的操作。

中的原始定义listings.sty

\def\l@lstlisting#1#2{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}

宽度1.5em表示缩进,表示2.3em数字框的宽度。由于\l@lstlisting#1#2在 内重新定义\renewcommand,所以我必须使用##1##2而不是#1#2

在此处输入图片描述

\documentclass{book}


\usepackage{tocloft}
\usepackage{listings}


\makeatletter
\AtBeginDocument{%
\renewcommand\lstlistoflistings{\bgroup
  \let\contentsname\lstlistlistingname
  \def\l@lstlisting##1##2{\@dottedtocline{1}{1.5em}{2.3em}{\bfseries Program ##1}{##2}}
  \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
  \tableofcontents \egroup}
}
\makeatother

\begin{document}
\tableofcontents
\lstlistoflistings

\chapter{First}
\begin{lstlisting}[caption={My nice program},language=C]
#include<stdio.h>

int main(int argc,char **argv)
{
  printf("Hello World!\n");
  return(0);
}
\end{lstlisting}

\end{document}

相关内容