![memoir 中 \section 后面的 \addvspace 总是会添加所有空格](https://linux22.com/image/256513/memoir%20%E4%B8%AD%20%5Csection%20%E5%90%8E%E9%9D%A2%E7%9A%84%20%5Caddvspace%20%E6%80%BB%E6%98%AF%E4%BC%9A%E6%B7%BB%E5%8A%A0%E6%89%80%E6%9C%89%E7%A9%BA%E6%A0%BC.png)
了解后,\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
。更改后解决了我的问题。