我正在使用titletoc
类中的包book
。目前,我的章节条目配置如下(为简单起见,我省略了不重要的参数):
\titlecontents{chapter}[0pc]
{\addvspace{1pc}}
{}
{}
{}
[\addvspace{4pt}]
看看4pt
章节条目下方的空间。我想改变这一点,让这个4pt
空间不是当章节中没有节时出现。它应该只出现在有节的章节中。我该如何实现这一点?
答案1
以下是一种方法:
定义一个布尔开关
\ifafterchapter
;重新定义(或者简单地使用
etoolbox
\chapter
包和补丁)负责排版和低级章节标题的内部命令,以便在.toc
文件中添加一行,将上述布尔开关设置为true
after\chapter
并将false
after\section
和下面的所有内容;在
titletoc
ToC 条目部分的定义中(即在“之前”参数中),根据 的状态添加垂直空间\ifafterchapter
。
\documentclass{book}
\newif\ifafterchapter
\usepackage{etoolbox}
\makeatletter
\apptocmd{\@makechapterhead}{%
\addtocontents{toc}{\protect\afterchaptertrue}%
}{}{}
\apptocmd{\@xsect}{%
\addtocontents{toc}{\protect\afterchapterfalse}%
}{}{}
\makeatother
\usepackage{titletoc}
\titlecontents{chapter}
[1.5em]
{\addvspace{1pc}\bfseries}
{\contentslabel{1.5em}}
{\hspace*{-1.5em}}
{\hfill\contentspage}
\titlecontents{section}
[3.8em] % ie, 1.5em (chapter) + 2.3em
{\ifafterchapter\addvspace{4pt}\fi}
{\contentslabel{2.3em}}
{\hspace*{-2.3em}}
{\titlerule*[1pc]{.}\contentspage}
\begin{document}
\tableofcontents
\chapter{First}
\chapter{Second}
\section{Second-First}
\section{Second-Second}
\chapter{Third}
\end{document}
答案2
这里有不同的方法,不需要额外的包;其思想是重新定义,\section
如在 中实现的book.cls
。在重新定义中,您测试计数器的值section
;如果该值大于一,则不执行任何操作;如果该值等于一,则将空间添加到 ToC::
\documentclass{book}
\usepackage{titletoc}
\titlecontents{chapter}
[1.5em]
{\addvspace{1pc}\bfseries}
{\contentslabel{1.5em}}
{\hspace*{-1.5em}}
{\hfill\contentspage}
\makeatletter
\renewcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\large\bfseries%
\ifnum\value{section}>1 \else \addtocontents{toc}{\protect\addvspace{4pt}}\fi}}
\makeatother
\begin{document}
\tableofcontents
\chapter{First}
\chapter{Second}
\section{Second-First}
\section{Second-Second}
\chapter{Third}
\end{document}
借助该etoolbox
包,代码稍微简化了一些:
\documentclass{book}
\usepackage{titletoc}
\usepackage{etoolbox}
\titlecontents{chapter}
[1.5em]
{\addvspace{1pc}\bfseries}
{\contentslabel{1.5em}}
{\hspace*{-1.5em}}
{\hfill\contentspage}
\patchcmd{\section}{\bfseries}%
{\bfseries\ifnum\value{section}>1 \else \addtocontents{toc}{\protect\addvspace{4pt}}\fi}{}{}
\begin{document}
\tableofcontents
\chapter{First}
\chapter{Second}
\section{Second-First}
\section{Second-Second}
\chapter{Third}
\end{document}