更改未编号部分标题上方的垂直间距

更改未编号部分标题上方的垂直间距

如何更改没有数字的章节标题上方的垂直间距(例如目录、图表和参考书目),同时保持所有其他章节的间距相同?(我正在使用报告类。)

答案1

这个答案大部分是逐字逐句地摘自如何删除上面的顶部边距\tableofcontents

在标准文档类中(如bookreport), \tableofcontents(和朋友) 设置为\chapter*

\newcommand\tableofcontents{%
    \if@twocolumn
      \@restonecoltrue\onecolumn
    \else
      \@restonecolfalse
    \fi
    \chapter*{\contentsname
        \@mkboth{%
           \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
    \@starttoc{toc}%
    \if@restonecol\twocolumn\fi
    }

因此,可以暂时修改章节标题宏,以不插入太多垂直空间。以下是\chapter*标题宏\@makeschapterhead

\def\@makeschapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright
    \normalfont
    \interlinepenalty\@M
    \Huge \bfseries  #1\par\nobreak
    \vskip 40\p@
  }}

\vspace*{50\p@}注意在设置标题之前插入垂直空间( )。因此,我们可以暂时重新定义此宏以不插入垂直空间(或将其修改为您需要的任何内容):

在此处输入图片描述

\documentclass{report}

\begin{document}

\begingroup
\makeatletter
% Redefine the \chapter* header macro to remove vertical space
\def\@makeschapterhead#1{%
  %\vspace*{50\p@}% Remove the vertical space
  {\parindent \z@ \raggedright
    \normalfont
    \interlinepenalty\@M
    \Huge \bfseries  #1\par\nobreak
    \vskip 40\p@
  }}
\makeatother

\tableofcontents
\endgroup
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\end{document}

对重新定义进行分组使它成为局部的。因此,所有修改都会在 之后恢复\endgroup。同样的想法也适用于\listoffigures\listoftables等。当然,对 进行全局更改\@makeschapterhead也足够了,因为 ToC、LoF 和 LoT 通常都是未编号的章节。

这是另一个建议,\@makeschapterhead使用补丁etoolbox

\documentclass{report}
\usepackage{etoolbox}

\makeatletter
% \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\patchcmd{\@makeschapterhead}{\vspace*{50\p@}}{}{}{}
\makeatother

\begin{document}

\tableofcontents

\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}

\end{document}

由于\chapter*标题宏仅用于\vspace*{..}插入文本块和章节标题之间的间隙,因此您也可以重新定义\vspace以吞噬两个参数(*{50\p@}):

\documentclass{book}
\begin{document}
\begingroup
\renewcommand{\vspace}[2]{}% Gobble 2 arguments after \vspace
\tableofcontents
\endgroup
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\chapter{A chapter}\section{A section}\subsection{A subsection}
\end{document}

虽然上述建议看似简单,但\vspace如果更改是全局的(而不是建议的通过分组进行本地化),则可能会对您使用的文档中的其他地方产生负面影响(可能是间接的)。因此,不建议在全局用例中使用。

其他套餐(包括titlesec) 也可以用来获得这个结果。

相关内容