如何目录中的部件编号是显示于通常可以找到相应页码的位置;即目录行的末尾。
另一方面,零件编号应为完全从前面移除。
我希望通过 tocloft 包实现这一点,但却找不到它。
下面是我所说的内容的一个最小工作示例:
\documentclass{scrbook}
%% toc manipulation:
\usepackage[titles]{tocloft}
% chap:
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}} % leading dots
% part:
\renewcommand\cftpartafterpnum{\par\vspace{-8pt}\hrulefill\par}
\setlength{\cftpartnumwidth}{0pt}
%% dummy document
\begin{document}
\tableofcontents
\part{Part Foo} \chapter{Bla} \chapter{Blabb}
\part{Part Bar} \chapter{Blu} \chapter{Blubb}
\part{Part Foobar} \chapter{Blo} \chapter{Blobb}
\end{document}
答案1
\numberline
这里有一个通过重新定义本地命令来解决的问题\l@part
:
\documentclass{scrbook}
%% toc manipulation:
\usepackage[titles]{tocloft}
% chap:
\renewcommand{\cftchapleader}{\cftdotfill{\cftdotsep}} % leading dots
% part:
\renewcommand\cftpartafterpnum{\par\nopagebreak\vspace{-8pt}\hrulefill\par}
\setlength{\cftpartnumwidth}{0pt}
\makeatletter
\renewcommand{\cftpartfont}{\large\bfseries%
\def\numberline##1{\gdef\@temp@numberline{##1}}%
}
\renewcommand{\cftpartfillnum}[1]{%
{\cftpartleader}%
{\makebox[8em][\cftpnumalign]{\cftpartpagefont\partname~\@temp@numberline}\cftpartafterpnum\par}%
}
\makeatother
%% dummy document
\begin{document}
\tableofcontents
\part{Part Foo} \chapter{Bla} \chapter{Blabb}
\part{Part Bar} \chapter{Blu} \chapter{Blubb}
\part{Part Foobar} \chapter{Blo} \chapter{Blobb}
\end{document}
这里提供一种避免使用 tocloftxpatch
进行修补的l@part
方法l@chapter
。
\documentclass{scrbook}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\l@chapter}{\hfill\nobreak}{\dotfill\nobreak}{}{}
\addtokomafont{partentry}{\def\numberline#1{\gdef\@temp@numberline{#1}}}
\xpatchcmd{\l@part}{\hb@xt@\@pnumwidth}{\hbox to 8em {\hss\partname~\@temp@numberline}\par\nopagebreak\vspace{-8pt}\hspace{-\leftskip}\hrulefill\@gobble}{}{}
\makeatother
\begin{document}
\tableofcontents
\part{Part Foo} \chapter{Bla} \chapter{Blabb}
\part{Part Bar} \chapter{Blu} \chapter{Blubb}
\part{Part Foobar} \chapter{Blo} \chapter{Blobb}
\end{document}