使用 tocloft 将零件置于 toc 的中心

使用 tocloft 将零件置于 toc 的中心

我正在尝试在使用 KOMA 脚本的大型 Latex 文档中创建目录。在目录中,我想将各部分居中并删除所有其他组件(页码、零件号)。我使用 tocloft(出于其他原因,这是一项硬性要求)。

虽然我设法删除了页码,但部件号仍然存在,并且部件位于正确的位置,而不是居中。

一个简化的例子是:

\documentclass{scrbook}
\usepackage[ngerman]{babel}

\usepackage{lipsum}

\usepackage{tocloft}
\renewcommand{\cftpartfont}{\hfill\Large\bfseries}
\renewcommand{\cftpartaftersnum}{\hfill}
\addtocontents{toc}{\cftpagenumbersoff{part}}

\begin{document}
\tableofcontents
\part{A}
\section{a}
\lipsum
\part{B}
\section{b}
\lipsum

\end{document}

我从 tocloft 手册的一个例子中改编了居中命令,其中

\renewcommand{\cftZtitlefont}{\hfill\Large\bfseries} 与 \renewcommand{\cftafterZtitle}{\hfill} 一起使用将产生居中的大号粗体标题。

用于使标题居中(而不是使部分居中)。

所以我的问题是,我怎样才能将零件置于中心并删除零件编号?

答案1

尝试这个:

\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage{lipsum}
\usepackage{tocloft}

\addtocontents{toc}{\cftpagenumbersoff{part}}
\renewcommand*{\addparttocentry}[2]{%
  \addtocentrydefault{part}{}{\protect\parbox{\textwidth}{\protect\centering#2}}% original #1 in second argument
}

\begin{document}

\tableofcontents

\part{A}
\section{a}
\lipsum
\part{B}
\section{b}
\lipsum

\end{document}

在此处输入图片描述

\hfil我使用了而不是\parbox,内容居中,以防某些标题跨越多行。我使用 的简单重新定义来隐藏目录中的零件编号\addparttocentry

您提到您需要使用tocloft,但如果不是这种情况,您可以改用包tocstyle(专门为类设计KOMA)并说类似的话:

\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage{lipsum}
\usepackage{tocstyle}

\usetocstyle{classic}
\settocfeature{pagenumberhook}{}
\renewcommand*{\addparttocentry}[2]{%
  \addtocentrydefault{part}{}{\protect\parbox{\textwidth}{\protect\centering#2}}% original #1 in second argument
}

\begin{document}

\tableofcontents

\part{A}
\section{a}
\lipsum
\part{B}
\section{b}
\lipsum

\end{document}

警告:

应使用以下解决方案仅有的对于旧版本的 KOMA-Script(例如,TeX Live2009 中的版本);对于较新版本(从 TeX Live2010 开始的版本),请参见上面的代码;我在这里只包含这个解决方案,因为 OP 使用的是 TeX Live2009 并且无法更新:

\documentclass{scrbook}
\usepackage[ngerman]{babel}
\usepackage{lipsum}
\usepackage{tocloft}

\makeatletter
\def\@part[#1]#2{%
  \ifnum \c@secnumdepth >-2\relax
    \refstepcounter{part}%
    \@maybeautodot\thepart%
    \addcontentsline{toc}{part}{\protect\makebox[0pt][l]{\protect\parbox{\textwidth}{\protect\centering#1}}}%
  \else
    \addcontentsline{toc}{part}{#1}%
  \fi
  \begingroup
    \setparsizes{\z@}{\z@}{\z@\@plus 1fil}\par@updaterelative
    \raggedpart
    \interlinepenalty \@M
    \normalfont\sectfont\nobreak
    \ifnum \c@secnumdepth >-2\relax
      \size@partnumber{\partformat}%
      \partheadmidvskip
    \fi
    \size@part{#2}\strut%
    \partmark{#1}\par
  \endgroup
  \@endpart
}
\makeatother
\addtocontents{toc}{\cftpagenumbersoff{part}}

\begin{document}

\tableofcontents

\part{A}
\section{a}
\lipsum
\part{B}
\section{b}
\lipsum

\end{document}

相关内容