memoir 中 \section 后面的 \addvspace 总是会添加所有空格

memoir 中 \section 后面的 \addvspace 总是会添加所有空格

了解后,\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。更改后解决了我的问题。

相关内容