了解后,\addvspace
我编写了自己的环境,在它之前和之后添加了最小空间。但是使用memoir
,如果\section
在它之前,\addvspace
总是将其所有空间添加到通常位于某个部分之后的空间中。MWE:
\documentclass{memoir}
\usepackage{lipsum}
\begin{document}
\section{Sec 1}
\lipsum[1]
\section{Sec 2}
\addvspace{\onelineskip}
\lipsum[1]
\section{Sec 3}
\section{Sec 4}
\end{document}
您可以看到第二节后面有太多的 vspace。我查看了 memoir \@startsection 代码,发现它确实(正确地)使用了\vskip
和\addvspace
。阅读后这问题我怀疑这可能是一个\noindent
问题,因为\@afterindent
使用了。但是肯定有一个技巧是我遗漏的,因为 Sec 3 和 Sec 4 有适当的空间。有什么想法可以解决这个问题吗?
答案1
啊哈!感谢 Philippe 的提示,我找到了以下解决方案:
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@xsect}
{\vskip\@tempskipa\vskip-\parskip}{\addvspace{\@tempskipa}\addvspace{-\parskip}}
{}{\typeout{WARNING! Patching \noexpand\@xsect failed!}}
\makeatother
\@xsect
没有使用\addvspace
,但很简单\vskip
。更改后解决了我的问题。