我想让列表与默认列表略有不同。例如,对于图形,我使用了包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}