操作目录:如何将零件号移动到页码的位置?

操作目录:如何将零件号移动到页码的位置?

如何目录中的部件编号显示于通常可以找到相应页码的位置;即目录行的末尾

另一方面,零件编号应为完全从前面移除

我希望通过 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}

黑色:MWE 的结果,红色:梦见的操纵

答案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}

相关内容