引文和章节号之间的垂直间距相等,与行距无关

引文和章节号之间的垂直间距相等,与行距无关

类似于在 stackoverflow 上的问题,我已经更新了\begin{savequote}\end{savequote}环境,无论文档的其余部分是什么,它总是单倍行距。

但是,使用\doublespace会在引用和章节编号之间产生巨大的额外空间,如下图所示。

在此处输入图片描述

如何确保无论文档使用何种间距,引文和章节编号之间的间距始终相同?

对于图像我使用了以下 MWE:

\documentclass[a4paper,twoside,10pt]{book}

\usepackage{lipsum}
\usepackage{quotchap}
\usepackage{setspace}


\makeatletter
\let\oldquote\savequote
\def\savequote{\@ifnextchar[\savequote@i \savequote@ii}
\def\savequote@i[#1]{\oldquote[#1]\singlespace}
\def\savequote@ii{\oldquote\singlespace}
\makeatother

\begin{document}

%\doublespace

\mainmatter

\begin{savequote}[10pc]
\sffamily There is always something to say, in nice quote boxes, that spans more than one line.
\qauthor{Some person}
\end{savequote} 

\chapter{First chapter}
\lipsum[1]

\end{document}

答案1

我不会直接重新定义环境的内部结构,而是savequote加载etoolbox包并使用其\BeforeBeginEnvironmentAfterEndEnvironment宏将整个环境的材料放置savequotesinglespace环境中。请区分setspace包的宏的环境版本(例如singlespace)和包的直接宏(例如,、\singlespacing\doublespacing

为了确保页面顶部与章节标题之间的垂直距离以及章节标题与章节正文之间的垂直距离不受的影响,需要修改\doublespacingLaTeX 宏\chapter\@chapter\@schapter。这可以直接实现,如下面的代码所示,也可以借助诸如 之类的包来实现titlesec

修改后的 MWE 可能如下所示:

\documentclass[a4paper]{book}
\usepackage{lipsum,quotchap,setspace}

\usepackage{etoolbox}
\BeforeBeginEnvironment{savequote}{\begin{singlespace}}
\AfterEndEnvironment{savequote}{\end{singlespace}}
\pretocmd{\chapter}{\begin{singlespace}}{}{}
\makeatletter
\apptocmd{\@chapter}{\end{singlespace}\nointerlineskip}{}{}
\apptocmd{\@schapter}{\end{singlespace}\nointerlineskip}{}{}
\makeatother         

\begin{document}
\doublespacing

\mainmatter

\begin{savequote}[10pc]
\sffamily There is always something to say, in nice quote boxes, that spans more than one line.
\qauthor{Some person}
\end{savequote} 

\chapter{First chapter}
\lipsum[2]
\end{document}

相关内容