在调试 FiXme 问题(由 Lars Madsen 报告)的过程中,我遇到了这个问题,恐怕这超出了我的专业知识范围。请考虑以下 MWE:
\documentclass{memoir}
\usepackage{amsmath,amsthm}
\newtheorem{theorem}{Theorem}
\begin{document}
\begin{theorem}
Theorem
\begin{equation*}
Equation
\end{equation*}
\makeatletter\write\@auxout{\string\relax}\makeatother % spurious vspace
\end{theorem}
\begin{proof}
Proof
\end{proof}
\end{document}
调用会\write
在文档中产生虚假的垂直空间(注释此行或调用不执行任何操作的宏来查看差异)。我想了解发生了什么,以及这是否应该被视为某个地方的错误(在定理环境中?)。
谢谢你!
答案1
显示环境(如证明/定理等)和章节标题在可见文本前后添加空格,使用\addvspace
此命令尝试查看是否刚刚将空格添加到垂直列表中,如果是,则在现有空格较大的情况下不添加新空格。这意味着两个相邻的定理之间不会出现双倍空格,从一个定理的结尾到另一个定理的开头。(原始显示数学的操作基本类似)
\write
来自(或有类似问题)的 whatsit\color
意味着不可能看到先前的空间,因此后续环境总是在开始时添加完整的请求空间。
除了不在那里添加任何东西之外,你对此没有太多可以做的事情,例如,如果你将它添加到 Proof 中的 P 之后,那就没问题了。
expl3xgalley
代码解决了这个问题,但它具有极大的侵入性,必须捕获每一个命令尝试在垂直模式下添加任何内容并使其延迟其操作并重新排序,以便所有间距都可以合并。