在目录中的条目前添加字符串“part”

在目录中的条目前添加字符串“part”

我想在目录中的条目前添加单词“部分”。

我读这里我可以使用 \renewcommand\cftpartpresnum{Part~}。我尝试添加并对 partpresnum 和 partleader 命令进行一些修改,但没有成功。

我使用的是 classicthesis 样式,它对各个部分的目录定义如下:(完整样式文件可见这里

    \ifthenelse{\boolean{@parts}}%
    {%
      \renewcommand{\thepart}{\roman{part}}%
      \renewcommand{\cftpartpresnum}{\scshape}%  \MakeTextLowercase
%      \renewcommand{\cftpartaftersnum}{\cftchapaftersnum}%
%      \renewcommand{\cftpartaftersnumb}{\quad}%
%      \setlength{\cftpartnumwidth}{\cftpartnumwidth}
      \renewcommand{\cftpartfont}{\color{Maroon}\normalfont}%
      \renewcommand{\cftpartpagefont}{\normalfont}%
      \ifthenelse{\boolean{@dottedtoc}}{\relax}%
      {%
        \renewcommand{\cftpartleader}{\hspace{1.5em}}% 
        \renewcommand{\cftpartafterpnum}{\cftparfillskip}%
      }%        
      \setlength{\cftbeforepartskip}{1em}%
      \setlength{\cftbeforechapskip}{.1em}%
      \setlength{\beforebibskip}{\cftbeforepartskip}%
     }{\relax}
    % chapters
    \ifthenelse{\boolean{@nochapters}}%
        {\relax}%
        {%
            \renewcommand{\cftchappresnum}{\scshape\MakeTextLowercase}%
            \renewcommand{\cftchapfont}{\normalfont}%
            \renewcommand{\cftchappagefont}{\normalfont}%
            \ifthenelse{\boolean{@dottedtoc}}{\relax}%
                {%
                \renewcommand{\cftchapleader}{\hspace{1.5em}}% 
                \renewcommand{\cftchapafterpnum}{\cftparfillskip}% 
            }
            %\setlength{\cftbeforechapskip}{.1em}%           
        }

... 请参阅样式文件以获取完整代码。

有什么建议吗?我是否尝试在正确的地方进行更改?

以下是一个简化的示例。我尝试仅使用样式文件的一部分,但无法使其正常工作。

\documentclass[parskip=half,10pt,twoside]{scrbook}
\usepackage{classicthesis}


\begin{document}

\tableofcontents
\part{First test part}
\chapter{Test chapter}
\chapter{Test chapter}
\part{Second  test part}
\chapter{Test chapter}
\chapter{Test chapter}

\end{document}

答案1

由于内部classicthesis使用该tocloft包来生成目录,因此可以使用以下代码添加“Part~”字符串(假设您的 LaTeX 安装具有该tocloft包的最新版本):

\renewcommand{\cftpartpresnum}{Part~}

\newlength{\mylen} % a "scratch" length
\settowidth{\mylen}{\cftpartpresnum} % extra space
\addtolength{\cftpartnumwidth}{\mylen} % add the extra space

请注意,通过重新定义\cftpartpresnum命令以添加“Part~”字符串,除了零件编号外,我们还将文本添加到数字框中。因此,我们需要增加框的宽度以包含附加文本。一种可能的方法是创建一个新的长度,以存储附加文本的宽度并将额外的空间添加到宏中\cftpartnumwidth

在此处输入图片描述

编辑:我正在添加产生所需结果的完整代码(基于提供的 MWE)。此外,tocloft我使用的软件包(v2.3f,2013/05/02)是从下载的这里

\documentclass[parskip=half,10pt,twoside]{scrbook}
\usepackage{classicthesis}

\renewcommand{\cftpartpresnum}{Part~}

\newlength{\mylen} % a "scratch" length
\settowidth{\mylen}{\cftpartpresnum} % extra space
\addtolength{\cftpartnumwidth}{\mylen} % add the extra space

\begin{document}

\tableofcontents
\part{First test part}
\chapter{Test chapter}
\chapter{Test chapter}
\part{Second  test part}
\chapter{Test chapter}
\chapter{Test chapter}

\end{document}

笔记:对于该包的早期版本,tocloft文档指出将其与 KOMA 类(和其他类)一起使用可能会导致\cftpartpresnum输出加倍。此行为至少自 2.3f 版起已得到修复。

编辑2:将选项传递partsclassicthesis包似乎会禁用此解决方法。原因是,当使用此选项时,classicthesis类依赖于titlesec包来生成零件的 ToC 条目。幸运的是,包的文档指出:

  • \part不封装目录中的标签,除非您使用该newparttoc选项。[第 10 页]

该选项本身的描述还补充道:

标准部分以非标准方式写入目录条目编号。您可以使用以便更改它,newparttoc或者titletoc类似的包可以操作条目。(这仅在\part已重新定义时才有效。)[第 8 页]

因此,为了获得所需的行为,只需在加载包之前将此选项传递给titlesec包即可。\PassOptionsToPackage{newparttoc}{titlesec}classicthesis

最终的代码如下:

\documentclass[parskip=half,10pt,twoside]{scrbook}
\PassOptionsToPackage{newparttoc}{titlesec} % MUST be called before classicthesis
\usepackage[dottedtoc,floatperchapter,parts]{classicthesis}

\renewcommand{\cftpartpresnum}{Part~}

\newlength{\mylen} % a "scratch" length
\settowidth{\mylen}{\cftpartpresnum} % extra space
\addtolength{\cftpartnumwidth}{\mylen} % add the extra space

\begin{document}

\tableofcontents
\part{First test part}
\chapter{Test chapter}
\chapter{Test chapter}
\part{Second  test part}
\chapter{Test chapter}
\chapter{Test chapter}

\end{document}

并产生输出: 在此处输入图片描述

相关内容