自定义目录 — 仅将 vspace 放在包含章节的章节下方

自定义目录 — 仅将 vspace 放在包含章节的章节下方

我正在使用titletoc类中的包book。目前,我的章节条目配置如下(为简单起见,我省略了不重要的参数):

\titlecontents{chapter}[0pc]
{\addvspace{1pc}}
{}
{}
{}
[\addvspace{4pt}]

看看4pt章节条目下方的空间。我想改变这一点,让这个4pt空间不是当章节中没有节时出现。它应该只出现在有节的章节中。我该如何实现这一点?

答案1

以下是一种方法:

  • 定义一个布尔开关\ifafterchapter

  • 重新定义(或者简单地使用etoolbox\chapter包和补丁)负责排版和低级章节标题的内部命令,以便在.toc文件中添加一行,将上述布尔开关设置为trueafter\chapter并将falseafter\section和下面的所有内容;

  • titletocToC 条目部分的定义中(即在“之前”参数中),根据 的状态添加垂直空间\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}

相关内容