在网上学习后,我设法得到了以下类型的数字列表:
我想要的与列表完全相同的内容,但是我得到的却是: 我的代码是这样的:
\documentclass[12pt,a4paper]{book}
% For french
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
% For figures
\usepackage{caption}
\usepackage{subcaption}
\addto\captionsfrench{%
\renewcommand{\listfigurename}{Liste des figures}%
\renewcommand{\listtablename}{Liste des tables}%
}
\usepackage{tocloft}
\renewcommand{\cftfigfont}{\textsc{Figure} }
\renewcommand{\cftfigaftersnum}{~~--}
\renewcommand{\cftfignumwidth}{3em}
% Numbering
\makeatletter
\renewcommand{\thefigure}{\ifnum \c@chapter>\z@ \thechapter.\fi
\@arabic\c@figure}
\@addtoreset{figure}{chapter}
\makeatother
% Listings
\usepackage{listings}
\addto\captionsfrench{%
\renewcommand{\lstlistlistingname}{Liste des codes}%
}
%Refs
\usepackage{hyperref}
% Begining of the document
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{Introduction}
\begin{figure}
\centering
A figure
\caption{Caption}
\label{fig:draw}
\end{figure}
\begin{lstlisting}[caption=Hello,label={hello}]
A code
\end{lstlisting}
\chapter{Conclusion}
\begin{figure}
\centering
A figure
\caption{Other caption}
\label{fig:drawbis}
\end{figure}
\begin{lstlisting}[caption=Good bye,label={bye}]
Another code
\end{lstlisting}
\backmatter
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{\listfigurename}
\listoffigures
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{\lstlistlistingname}
\lstlistoflistings
\end{document}
我所需要写的只是代码的模拟:
\usepackage{tocloft}
\renewcommand{\cftfigfont}{\textsc{Figure} }
\renewcommand{\cftfigaftersnum}{~~--}
\renewcommand{\cftfignumwidth}{3em}
但对于列表来说。有什么办法吗tocloft
?如果没有,该怎么做?
非常感谢。
答案1
默认情况下,tocloft
无法挂接到由其他软件包制作的 ToC,但是,可以使用 来\newlistof{...}
重新定义\lstoflistings
-- 不幸的是,这需要了解正在使用的计数器listings
(其名称为lstlisting
)并且...尝试为此定义一个新的计数器 -- 这必定会失败(在我看来,\newlistof
这是 的设计缺陷)tocloft
\let\c@lstlisting\relax
然而,如果这个\newlistof
工作完成,那么这是可能的。
使用可选参数\newlistof
重置计数器来获取正确的超链接。
\documentclass[12pt,a4paper]{book}
% For french
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
% For figures
\usepackage{caption}
\usepackage{subcaption}
\addto\captionsfrench{%
\renewcommand{\listfigurename}{Liste des figures}%
\renewcommand{\listtablename}{Liste des tables}%
}
\usepackage{tocloft}
\renewcommand{\cftfigfont}{\textsc{Figure} }
\renewcommand{\cftfigaftersnum}{~~--}
\renewcommand{\cftfignumwidth}{3em}
% Numbering
\makeatletter
\renewcommand{\thefigure}{\ifnum \c@chapter>\z@ \thechapter.\fi
\@arabic\c@figure}
\@addtoreset{figure}{chapter}
\makeatother
% Listings
\usepackage{listings}
\makeatletter
\AtBeginDocument{%
\let\c@lstlisting\relax
\newlistof[chapter]{lstlisting}{lol}{\lstlistlistingname}
\renewcommand{\cftlstlistingindent}{20pt}
\renewcommand{\cftlstlistingfont}{\textsc{Listing} }
\renewcommand{\cftlstlistingaftersnum}{~~--}
\renewcommand{\cftlstlistingnumwidth}{3em}
\renewcommand{\theHlstlisting}{listings.\thelstlisting}
}
\makeatother
\addto\captionsfrench{%
\renewcommand{\lstlistlistingname}{Liste des codes}%
}
\renewcommand{\lstlistoflistings}{%
\listoflstlisting
}
%Refs
\usepackage{hyperref}
% Begining of the document
\begin{document}
\frontmatter
\tableofcontents
\lstlistoflistings
\listoffigures
\mainmatter
\chapter{Introduction}
\begin{figure}
\centering
A figure
\caption{Caption}
\label{fig:draw}
\end{figure}
\begin{lstlisting}[caption=Hello,label={hello}]
A code
\end{lstlisting}
\chapter{Conclusion}
\begin{figure}
\centering
A figure
\caption{Other caption}
\label{fig:drawbis}
\end{figure}
\begin{lstlisting}[caption=Good bye,label={bye}]
Another code
\end{lstlisting}
\backmatter
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{\listfigurename}
\listoffigures
\cleardoublepage
\phantomsection
\addcontentsline{toc}{chapter}{\lstlistlistingname}
\lstlistoflistings
\end{document}
答案2
如果这tocloft.sty
不是必须的,我可以提供一个解决方案titletoc.sty
。我认为界面更干净。最后还有一个解决方案,如何摆脱 LOF 中的额外垂直空间。
\documentclass[12pt,a4paper,draft,openany]{book}
% For french
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
% For figures
\usepackage{caption}
\usepackage{subcaption}
\addto\captionsfrench{%
\renewcommand{\listfigurename}{Liste des figures}%
\renewcommand{\listtablename}{Liste des tables}%
}
% Listings
\usepackage{listings}
\addto\captionsfrench{%
\renewcommand{\lstlistlistingname}{Liste des codes}%
}
\usepackage{titletoc}
\contentsuse{lstlisting}{lol}
\titlecontents{figure}
[2.6cm]
{}
{\contentslabel[\textsc{Figure}~\thecontentslabel~--]{2.6cm}}
{\hspace*{0em}}
{\titlerule*[1pc]{.}\contentspage}
\titlecontents{lstlisting}
[2.65cm]
{}
{\contentslabel[\textsc{Listing}~\thecontentslabel~--]{2.65cm}}
{\hspace*{0em}}
{\titlerule*[1pc]{.}\contentspage}
%Refs
\usepackage{hyperref}
% Begining of the document
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{Introduction}
\begin{figure}
\centering
A figure
\caption{Caption}
\label{fig:draw}
\end{figure}
\begin{lstlisting}[caption=Hello,label={hello}]
A code
\end{lstlisting}
\chapter{Conclusion}
\begin{figure}
\centering
\fbox{A figure}
\caption{Other caption}
\label{fig:drawbis}
\end{figure}
\begin{lstlisting}[caption=Good bye,label={bye}]
Another code
\end{lstlisting}
\backmatter
\clearpage
\phantomsection
\addcontentsline{toc}{chapter}{\listfigurename}
\begingroup
\makeatletter
\let\addvspace\@gobble
\listoffigures
\endgroup
\clearpage
\phantomsection
\addcontentsline{toc}{chapter}{\lstlistlistingname}
\lstlistoflistings
\end{document}