[这本质上是一个回忆录特定版本这个问题。
如何在memoir
不影响上方正文间距的情况下减少章节(或其他)标题内的行距?
在以下示例中,修改\baselineskip
可以解决问题,但也会影响标题与上一节正文之间的间距。我想消除这种意外的副作用。
关于我的示例的进一步说明:请注意,减半\baselineskip
太多了,但它可以很好地说明问题。我已包含并使用( )\tableofcontents
的可选参数版本来提醒大家注意,无论我们对节标题进行何种修改,我们可能都不想影响目录。对于那些对示例的视觉效果有异议的人(“原始行距在下面显示的内容中很好!”),实际问题来自其他方面(我的其他实际文档有可怕的双倍行距);\section
\section[what appears in the TOC]{what appears in the document body}
更新:我还附加了一张屏幕截图。
帮助解决问题的人请注意:1. 似乎\par
无法在章节标题内发布。2. \setstretch
(从链接问题的解决方案)在内不起作用memoir
。
\DoubleSpacing
双倍行距(在序言中添加)使这个问题更加严重:
\documentclass[12pt]{memoir}
%\DoubleSpacing
\begin{document}
\tableofcontents
\chapter{This is a chapter heading}
Look at the distance of this line to the following heading (as intended):
\section{This is a section heading spanning two lines}
Look at the distance of this line to the following heading (slightly too small):
\section[This is a section heading spanning two lines]%
{\setlength{\baselineskip}{0.5\baselineskip}%
This is a section heading spanning two lines}
Text.
\end{document}
答案1
双倍行距是文档中最糟糕的设置。我知道大学办公室里有些固执的秘书一直要求使用这种可怕的排版方式,这种方式在过去打字论文的时代可能是合理的,但现在却没有理由了。
咆哮结束。
我不会将标题中的行间空间减少到正常范围(单倍行距),但可以稍微减少一点;毕竟,对于双倍行距的文档来说,这只是一个很小的过失。
\documentclass[12pt]{memoir}
\usepackage{lipsum}
\DoubleSpacing
\renewcommand\secheadstyle{\setSpacing{0.95}\Large\bfseries\memRTLraggedright}
\begin{document}
\tableofcontents
\chapter{This is a chapter heading}
Look at the distance of this line to the following heading (as intended)
\section{This is a section heading spanning two lines}
\lipsum[3]
\end{document}
答案2
简单的答案(针对\DoubleSpacing
上下文):
\preto{\secheadstyle}{\setSpacing{1}} % requires package "etoolbox"
\addtolength{\beforesecskip}{-14.41pt}
的调整为\beforesecskip
负数,因为\beforesecskip
已经为负数,并且正如用户egreg
指出的那样,在其正/绝对值中使用了负跳过,但以负数给出以表明标题后的段落不会缩进。
\beforesecskip
当然,为了保持标题与标题前任何文本的间距不变,所需的调整取决于文档间距(此处\DoubleSpacing
)和间距的重置(此处1
,输入到memoir
-internal\setSpacing
宏)。 可以按如下方式手动计算此值:memoir
执行\DoubleSpacing
,\setSpacing{1.655}
我们12pt
可以计算 22pt*(1.655-1)=14.41pt,其中\baselineskip
=22pt
在节标题内为正常单倍行距。 的原因22pt
是调用了\secheadstyle
节标题的 。 修改的官方方式\secheadstyle
是通过\setsecheadstyle
,但我尽可能保持通用,并简单地通过 的 加上我的etoolbox
更改\preto
。
我将演示这种方法是否有效,但需要进行手动调整,将“无调整”与“调整”进行对比,以适应非页首和页首的节标题。以下屏幕截图显示了非页首场景中的对比,其中节标题与紧接在前的文本之间的距离对于两者而言都是相同的(由于我对 进行了调整\beforesecskip
):
\documentclass[12pt]{memoir}
\usepackage{calc}
\DoubleSpacing
\begin{document}
\tableofcontents
% computing the required adjustment:
\newlength{\secbaselineskip}
\newlength{\secbaselineskipAdjusted}
\newlength{\secbaselineskipDiff}
{
\secheadstyle
\setlength{\secbaselineskip}{\the\baselineskip}%
\global\secbaselineskip=\secbaselineskip
% evaluates to 36.40997pt
\setSpacing{1}
\global\setlength{\secbaselineskipAdjusted}{\the\baselineskip}%
\global\secbaselineskipAdjusted=\secbaselineskipAdjusted
% evaluates to 22.0pt
}
\setlength{\secbaselineskipDiff}{\secbaselineskip-\secbaselineskipAdjusted}
% evaluates to 14.40997pt
\newpage
\noindent
Text.
% no adjustment, non-page-initial section heading
\section{This is a section heading spanning two lines}
Text.
% adjustment, non-page-initial section heading
\addtolength{\beforesecskip}{-\secbaselineskipDiff}
\section[This is a section heading spanning two lines]{\setSpacing{1}\relax
This is a section heading spanning two lines}
\addtolength{\beforesecskip}{\secbaselineskipDiff}
Text.
\newpage
% no adjustment, page-initial section heading
\section{This is a section heading spanning two lines}
Text.
\newpage
% adjustment, page-initial section heading
\addtolength{\beforesecskip}{-\secbaselineskipDiff}
\section[This is a section heading spanning two lines]{\setSpacing{1}\relax
This is a section heading spanning two lines}
\addtolength{\beforesecskip}{\secbaselineskipDiff}
Text.
\end{document}
在计算\baselineskip
s 的差异时,我使用了一个技巧Heiko Oberdiek,由 Andrew Swann 传达:\global\setlength
不适用于calc
,但书写\setlength{\mylength}{...}\global\mylength=\mylength
可以避免这种情况。
[该解决方案的大部分功劳应归功于egreg
。]