考虑一下代码
\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}{}%
格式化的目录如下所示