В процессе отладки проблемы с FiXme (о которой сообщил Ларс Мэдсен) я наткнулся на эту проблему, которая, боюсь, находится за пределами моей компетенции. Рассмотрим следующий 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
эту команду, пытаясь проверить, был ли только что добавлен пробел в вертикальный список, и если да, не добавлять новый пробел, если существующий пробел больше. Это означает, что, скажем, две соседние теоремы не получают двойной пробел между собой, начиная с конца одной и начала другой. (Действие с примитивной математикой отображения в основном аналогично)
whatsit from \write
(или \color
имеет похожие проблемы) означает, что невозможно увидеть предыдущее пространство, и поэтому более поздняя среда всегда добавляет полное запрошенное пространство в начале.
С этим ничего нельзя поделать, кроме как не добавлять то, что там есть, например, если вы добавили это после P в Proof, то все будет в порядке.
Код expl3 xgalley
решает эту проблему, но он слишком инвазивный, поэтому его приходится ловитькаждыйкоманда пытается добавить что-либо в вертикальном режиме и заставить его отложить действие и переупорядочить элементы так, чтобы все пробелы можно было объединить.