我想在目录中的条目前添加单词“部分”。
我读这里我可以使用 \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:将选项传递parts
给classicthesis
包似乎会禁用此解决方法。原因是,当使用此选项时,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}
并产生输出: