允许目录部分条目使用不同字体的有效方法

允许目录部分条目使用不同字体的有效方法

考虑一下代码

\documentclass[12pt]{book}
\usepackage{lipsum,tocloft}

\begin{document}

\renewcommand{\cftchapfont}{\bfseries} 
\renewcommand{\cftsecfont}{\itshape}

\tableofcontents

\newpage
\lipsum[1]
\addcontentsline{toc}{chapter}{Chapter with Not All Sections of Italic Font}
\addcontentsline{toc}{section}{Section entry in italics default.}

\newpage
\lipsum[1]
\renewcommand{\cftsubsecfont}{\scshape}
\addcontentsline{toc}{section}{Section entry to appear in small caps.}
\renewcommand{\cftsecfont}{\itshape}

\newpage
\lipsum[1]
\addcontentsline{toc}{section}{Section entry displayed once again in italics.}
\end{document}

生成目录:

在此处输入图片描述

我想暂时将 TOC 分段草书(斜体)字体更改为小写字母;然后将其恢复为斜体。

为此,我\renewcommand{\cftsubsecfont}{\scshape}在第二节条目之前插入该命令;然后,\renewcommand{\cftsubsecfont}{\itshape}在该条目之后立即插入该命令。但这似乎不起作用。

问题:我怎样才能暂时将部分目录默认字体更改为其他字体(在本例中为小写字母),然后将其恢复为默认字体?

评论 \addcontentsline{toc}{section}{\scshape{Subsection entry to appear in small caps.}}确实有效,但我正在寻找一种更自动化的方法来实现这一点,比如说,我有许多这样的条目。

谢谢。

答案1

目录或图表列表的内容将在下一次格式化运行中排版。这意味着,必须在处理 toc 或 lof/lot 文件时更改条目行的预定义字体,而不是在格式化包含章节和子章节标题的文档文本时更改。

为了实现这一点,LaTeX 定义并使用了命令\addcontentsline\addtocontents

如果您想更改某些预定义字体,例如,\cftsecfont\cftsubsecfont如您的示例所示,您必须将这些重新定义添加到 toc 文件中。

在您的示例中,将字体更改命令放在\addtocontents{toc}{...}行中,并将\protect所有可扩展的宏放在移动参数中\addtocontents

\documentclass[12pt]{书}
\usepackage{lipsum,tocloft}

\renewcommand{\cftchapfont}{\bfseries}
\renewcommand{\cftsecfont}{\itshape}

\开始{文档}

\目录

\新一页
\lipsum[1]
\chapter{并非所有章节都采用斜体字体的章节}
\section{斜体部分条目默认。}
\lipsum[1]
\新一页

\addtocontents{toc}{\protect\renewcommand{\protect\cftsecfont}{\protect\scshape}}

\section{章节条目以小写字母显示。}
\lipsum[1]

\addtocontents{toc}{\protect\renewcommand{\protect\cftsecfont}{\protect\itshape}}

\新一页
\section{章节条目再次以斜体显示。}
\lipsum[1]x
\结束{文档}

对于更通用的解决方案 - 如果您想更改更多目录级别的格式 - 最好将所有目录格式\renewcommand设置宏收集到一小组宏中。然后在\addtocontents宏调用中使用这些宏。

在文档中,最好只使用“描述性”宏名,这些宏名代表以下或封闭部分文本的含义并隐藏实现。因此,最好隐藏类似\addtocontents和类似的低级宏,并为文档作者引入描述性宏。最后,您可以将这些宏移动到包内。

应用这两个步骤,你将获得

\documentclass[12pt]{书}
\usepackage{lipsum,tocloft}

\renewcommand{\cftchapfont}{\bfseries}
\renewcommand{\cftsecfont}{\itshape}

\newcommand{\specialTocFormatting}{%
  \renewcommand{\cftsecfont}{\scshape}%
  %...更多变化
}

\newcommand{\standardTocFormatting}{%
  \renewcommand{\cftsecfont}{\itshape}%
  %...更多格式设置
}

\newcommand{\changeToSpecialTocFormatting}{%
   \addtocontents{toc}{\protect\specialTocFormatting}}

\newcommand{\changeToStandardTocFormatting}{%
  \addtocontents{toc}{\protect\standardTocFormatting}}

\开始{文档}

\目录

\新一页
\lipsum[1]
\chapter{并非所有章节都采用斜体字体的章节}
\section{斜体部分条目默认。}
\lipsum[1]
\新一页

\更改特殊目录格式

\section{章节条目以小写字母显示。}
\lipsum[1]

\更改标准目录格式

\新一页
\section{章节条目再次以斜体显示。}
\lipsum[1]x
\结束{文档}

当你将此示例 LaTeX 两次时,.aux 文件将包含以下内容

\放松
\@writefile{toc}{\contentsline {chapter}{\numberline {1}并非所有部分都采用斜体字体的章节}{3}{}\protected@file@percent }
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\@writefile{toc}{\contentsline {section}{\numberline {1.1}章节条目默认为斜体。}{3}{}\protected@file@percent }
\@writefile{toc}{\specialTocFormatting }
\@writefile{toc}{\contentsline {section}{\numberline {1.2}章节条目以小写字母显示。}{4}{}\protected@file@percent }
\@writefile{toc}{\standardTocFormatting }
\@writefile{toc}{\contentsline {section}{\numberline {1.3}章节条目再次以斜体显示。}{5}{}\protected@file@percent }

.toc 文件将包含以下内容

\contentsline {chapter}{\numberline {1}并非所有部分都采用斜体字体的章节}{3}{}%
\contentsline {section}{\numberline {1.1}章节条目默认为斜体。}{3}{}%
\specialTocFormatting
\contentsline {section}{\numberline {1.2}章节条目以小写字母显示。}{4}{}%
\标准目录格式
\contentsline {section}{\numberline {1.3}章节条目再次以斜体显示。}{5}{}%

格式化的目录如下所示

在此处输入图片描述

相关内容