当我使用该类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}