如何消除标题和第一节标题之间的额外垂直空间?

如何消除标题和第一节标题之间的额外垂直空间?

当我使用该类amsart包含大量文内图片时,我发现章节标题并不像我希望的那样突出。因此,我决定在序言中添加以下内容,在每个章节标题前添加一个额外的垂直空间:

\let \oldsection \section
\renewcommand{\section}{\vspace{8pt plus 3pt}\oldsection}

这对我来说很有效,除非我在文档标题后立即有一个部分标题;在这种情况下,我发现不希望添加额外的空间。

我怎样才能“自动”消除这些多余的空间——即,无需明确调整文档正文中的间距?


例子:

以下是三个并列的示例: 在此处输入图片描述

你可能想要放大

左边的例子是下面代码的结果:

\documentclass{amsart}

\let \oldsection \section
\renewcommand{\section}{\vspace{8pt plus 3pt}\oldsection}

\usepackage{lipsum}

\title{Random title}
\author{Fred P.~Author}
\date{\today}

\begin{document}
\maketitle
\section{The first section}
\lipsum[2]
\section{The next section}
\lipsum[4]
\end{document}

在此处输入图片描述 与我想要的结果(并排图片中的右侧图像)相比,请注意“Fred P. Author”后面的额外空格:

\documentclass{amsart}

\usepackage{lipsum}

\title{Random title}
\author{Fred P.~Author}
\date{\today}

\begin{document}
\maketitle
\section{The first section}
\lipsum[2]
\vspace{8pt plus 3pt}
\section{The next section}
\lipsum[4]
\end{document}

在此处输入图片描述

最后,中间的图像只是为了说明该titlesec包似乎没有解决问题——至少没有以任何显而易见的方式。我为此使用的代码如下(我不认为它们完全相同,但它仍然显示了文档标题/作者后面的相同额外空间):

\documentclass{amsart}

\usepackage{titlesec}
\titleformat{\section}[hang]
  {\scshape\filcenter}
  {\thesection.}
  {1ex}
  {}
\titlespacing{\section}
  {0pt}{18pt}{6pt}

\usepackage{lipsum}

\title{Random title}
\author{Fred P.~Author}
\date{\today}

\begin{document}
\maketitle
\section{The first section}
\lipsum[2]
\section{The next section}
\lipsum[4]
\end{document}

答案1

我不会\section那样重新定义,而是使用标准方法。如果你当然您的文档以章节标题开头,使用

\documentclass{amsart}

\makeatletter
\def\amsartsection{\@startsection{section}{1}%
  \z@{2.5\linespacing\@plus\linespacing}{.5\linespacing}%
  {\normalfont\scshape\centering}}
\def\section{\vspace*{-34pt}\vspace{\baselineskip}\let\section\amsartsection\section}
\makeatother

\usepackage{lipsum}

\title{Random title}
\author{Fred P.~Author}
\date{\today}

\begin{document}
\maketitle
\section{The first section}
\lipsum[2]
\section{The next section}
\lipsum[4]
\end{document}

\maketitle命令添加 34pt 空间减去 的值。调整定义中使用的\baselineskip的倍数(即文档中实际使用的 的定义)。\linespacing\amsartsection\section

答案2

据我所知,以下代码似乎有效。当\maketitle后紧接着一个\section(或\section*) 命令时, 后会立即添加一些负空间\maketitle

但是,有几种简单的方法可以打破它 - 例如,跳过\maketitle和第一个\section命令之间的一行,或者(我假设)将放在\comment同一个位置(或\newcommand或任何其他通常不会影响布局的命令)。

附加说明:如果此hyperref包与此 hack 一起使用,hyperref则应加载此包第一的

\documentclass{amsart}

\let \oldsection \section
\def \newsection {\vspace{8pt plus 3pt}\oldsection}
\renewcommand{\section}{\newsection}

\let \oldmaketitle = \maketitle
\def \newmaketitle {\oldmaketitle \vspace*{-34pt}\vspace{\baselineskip}}

\def \titleDecide {%
    \ifx \nextToken \section
        \let \next = \newmaketitle
    \else
        \let \next = \oldmaketitle
    \fi
    \next
}

\renewcommand{\maketitle}{\futurelet \nextToken \titleDecide}

\usepackage{lipsum}

\title{Random title}
\author{Fred P.~Author}
\date{\today}

\begin{document}
\maketitle
\section{The first section}
\lipsum[2]
\section{The next section}
\lipsum[4]
\end{document}

在此处输入图片描述

相关内容