如何更改没有数字的章节标题上方的垂直间距(例如目录、图表和参考书目),同时保持所有其他章节的间距相同?(我正在使用报告类。)
答案1
这个答案大部分是逐字逐句地摘自如何删除上面的顶部边距\tableofcontents
。
在标准文档类中(如book
和report
), \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
) 也可以用来获得这个结果。