我想自定义 LaTeX 提供目录的方式:
这是我的(最小)工作代码(我真正的前言大约有 300 行):
\documentclass[12pt]{book}
% For French
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\begin{document}
\tableofcontents
\part{First part}
% A numbered chapter
\chapter{First}
%An unnumbered chapter
\chapter*{Appendix}
\addcontentsline{toc}{chapter}{Appendix}
\end{document}
我想要获得这样的目录:
Partie I - First Part . . . . 1
Chapitre 1 - First . . . . . .2
Appendix . . . . . . . . . . .3
使用我的代码我得到:
I First Part . . . . . . . . . 1
1 First . . . . . . . . . . . .2
Appendix . . . . . . . . . . . 3
事实上,管理未编号的章节很简单,我确实在我的代码中解决了这个问题。但是当章节编号时,我不知道如何在目录中更改它。我还希望 pdf 中的书签(我用 pdflatex 编译)与目录中的书签相同,例如这里的“第 1 章 - 第一章”
此外,但仍然不是最重要的,如果可能的话,我想把“Partie”一词的“Chapitre”用小写字母表示。
我确信这个问题可能以前被问过,但我没有找到我的问题的答案。
提前谢谢了。
答案1
在这里,我使用了软件包的标准功能tocloft
。但请注意,文档的第 10 页tocloft
指出\cftpartaftersnum
不起作用标准文档类别。因此,我无法在零件编号后添加短划线。
编辑后将单词“Partie”和“Chapitre”改为小写。编辑后将章节的短划线置于空白处的中心。
\documentclass[12pt]{book}
\usepackage{tocloft}
\renewcommand\cftpartpresnum{\textsc{Partie}\ }
\renewcommand\cftpartaftersnum{\ --}% ACCORDING TO p.10 OF THE DOCS, THIS MAY NOT WORK
\renewcommand\cftpartafterpnum{\bigskip}
\renewcommand\cftchappresnum{\textsc{Chapitre}\ }
\renewcommand\cftchapaftersnum{\hfill--\hfill}
\renewcommand\cftchapnumwidth{3.2cm}
\renewcommand\cftdotsep{2}
\renewcommand{\cftpartleader}{\cftdotfill{\cftdotsep}}
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}}
% For French
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\begin{document}
\tableofcontents
\part{First part}
% A numbered chapter
\chapter{First}
%An unnumbered chapter
\chapter*{Appendix}
\addcontentsline{toc}{chapter}{Appendix}
\end{document}
答案2
处理零件tocloft
总是很麻烦。
我可以为book
班级提出两个补丁和两个备选设置,具体取决于所需的章节标题对齐方式。没有尝试对齐部分标题,因为罗马数字的宽度变化太大。
第一个提案
如果章节标题超过九个,则它们彼此不对齐。在拒绝此操作之前,请考虑两个章节标题之间会有一些节标题。
\documentclass[12pt]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[titles]{tocloft}
\usepackage{xpatch}
\makeatletter
\patchcmd{\@part}
{\thepart\hspace{1em}}
{\protect\partnumberline{\thepart}}
{}{}
\patchcmd{\@chapter}
{\numberline}
{\chapternumberline}
{}{}
\makeatother
\newcommand\partnumberline[1]{\textsc{Partie} #1 -- }
\newcommand\chapternumberline[1]{\textsc{\chaptername} #1 -- }
\renewcommand\cftpartafterpnum{\par\nobreak\bigskip}
\renewcommand\cftdotsep{2}
\renewcommand{\cftpartleader}{\cftdotfill{\cftdotsep}}
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}}
\begin{document}
\tableofcontents
\part{First part}
% A numbered chapter
\chapter{First}
\setcounter{chapter}{9}
\chapter{Tenth}
%An unnumbered chapter
\chapter*{Appendix}
\addcontentsline{toc}{chapter}{Appendix}
\end{document}
第二个建议
章节标题对齐,并且数字设置为右对齐(因此当只有一位数字时会留下一个空洞)。
\documentclass[12pt]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage[titles]{tocloft}
\usepackage{xpatch}
\makeatletter
\patchcmd{\@part}
{\thepart\hspace{1em}}
{\protect\partnumberline{\thepart}}
{}{}
\patchcmd{\@chapter}
{\numberline}
{\chapternumberline}
{}{}
\makeatother
\newcommand\partnumberline[1]{\textsc{Partie} #1 -- }
\newcommand\chapternumberline[1]{%
\textsc{\chaptername} %
\ifnum#1<10 \hphantom{0}\fi
#1 -- %
}
\renewcommand\cftpartafterpnum{\par\nobreak\bigskip}
\renewcommand\cftdotsep{2}
\renewcommand{\cftpartleader}{\cftdotfill{\cftdotsep}}
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}}
\begin{document}
\tableofcontents
\part{First part}
% A numbered chapter
\chapter{First}
\setcounter{chapter}{9}
\chapter{Tenth}
%An unnumbered chapter
\chapter*{Appendix}
\addcontentsline{toc}{chapter}{Appendix}
\end{document}