类似于这在 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
包并使用其\BeforeBeginEnvironment
和AfterEndEnvironment
宏将整个环境的材料放置savequote
在singlespace
环境中。请区分setspace
包的宏的环境版本(例如singlespace
)和包的直接宏(例如,、\singlespacing
)\doublespacing
。
为了确保页面顶部与章节标题之间的垂直距离以及章节标题与章节正文之间的垂直距离不受的影响,需要修改\doublespacing
LaTeX 宏\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}