我设置了目录以粗体小写字母显示各部分,然后使用类似的设置显示参考文献(例如参考书目和图表列表等)和附录的开头。在 MWE 中,我\addpart
对两个“部分”参考文献和附录使用相同的命令 ( ),但只有参考文献的格式正确。我无法将附录写成小写字母和粗体。即使在本地直接修改文本,我也最多只能将其设为小写字母,而不能以任何方式设为粗体。有人能告诉我怎么做吗?
注意:在实际文档中的附录之前,我有一个类似于介绍部分内容的页面,但没有列举。它似乎不会影响问题,因为当目录中没有附录时,我也无法更改附录的格式。但如果有人能想出任何影响此问题的解决方案,你应该知道。
大多数代码都是根据其他人在这里建议的内容稍微修改过的版本(我现在找不到它来赞扬作者……)。
我使用 MiKTeX 2.7 来制作 LaTeX
\documentclass[a4paper, 11pt, english]{report}
\usepackage{fontenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage{tocloft}
\usepackage{geometry, fancyhdr, fix-cm}
% Modifies chapters to appear like sections under parts that are added to the toc (a modified version of )
\makeatletter
\def\@part[#1]#2{%
\ifnum \c@secnumdepth >-2\relax
\refstepcounter{part}%
\addcontentsline{toc}{part}{%
Part \thepart: \textsc{#1}}%
\else
\addcontentsline{toc}{part}{\scshape{#1}}%
\fi
\markboth{}{}%
{\centering
\interlinepenalty \@M
\normalfont
\ifnum \c@secnumdepth >-2\relax
\huge\bfseries \partname\nobreakspace\thepart
\par
\vskip 20\p@
\fi
\Huge \bfseries \textsc{#2}\par}%
\@endpart}
\def\@endpart{%
\thispagestyle{empty}%
\vfil\newpage
\if@twoside
\if@openright
\null
\thispagestyle{empty}%
\newpage
\fi
\fi
\if@tempswa
\twocolumn
\fi}
\makeatother
%Adds a ''part'' to the toc that is not numbered and does not have a page in the document
\newcommand{\addpart}[1]{
\phantomsection
\addcontentsline{toc}{part}{\textsc{\textbf{#1}}}
\addtocontents{toc}{
\setlength{\cftbeforechapskip}{\cftbeforesecskip}
\setlength{\cftchapindent}{\cftsecindent}
\protect\renewcommand{\cftchapfont}{\cftsecfont}
\protect\renewcommand{\protect\cftchapdotsep}{\cftsecdotsep}
}
}
\begin{document}
\selectlanguage{english}
\input{toc}
\newpage
\part{First part}
\chapter{Chapter 1}
\newpage
\addpart{References}
\chapter*{Lists}
\addcontentsline{toc}{chapter}{Lists}
\clearpage
\part*{\textsc{Appendices}}
%\newpage
\addpart{Appendices}
\appendix
\chapter{First appendix}
\end{document}
答案1
问题出在这条线上
\protect\renewcommand{\cftchapfont}{\cftsecfont}
由于您正在写入文件,因此将的.toc
“值”定义为\cftchapfont
的值\cftsecfont
。这导致.toc
文件包含
\renewcommand {\bfseries }{\normalfont }
因此,在合并目录后,所有“粗体”系列的咒语都变得正常。我不太确定你打算用你的各种咒语做什么,但你可能也想\protect\cftchapfont
在我上面引用的那行中这样做。(命令及其第一个参数可能也类似\setlength
……)
但原则上,我很困惑,为什么你要传递里面的所有那些格式化命令\addtocontents
;加载的整个目的肯定tocloft
是为了你可以配置外观而不用在.toc
文件中写入奇怪的咒语?
如果你\addpart
用
\newcommand{\addpart}[1]{
\phantomsection
\addcontentsline{toc}{part}{\textsc{\textbf{#1}}}
}
并分别调用格式化命令
\setlength{\cftbeforechapskip}{\cftbeforesecskip}
\setlength{\cftchapindent}{\cftsecindent}
\renewcommand{\cftchapfont}{\cftsecfont}
\renewcommand{\cftchapdotsep}{\cftsecdotsep}
编译后为