Команда \write в TeX иногда приводит к появлению ложного вертикального пробела

Команда \write в TeX иногда приводит к появлению ложного вертикального пробела

В процессе отладки проблемы с 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решает эту проблему, но он слишком инвазивный, поэтому его приходится ловитькаждыйкоманда пытается добавить что-либо в вертикальном режиме и заставить его отложить действие и переупорядочить элементы так, чтобы все пробелы можно было объединить.

Связанный контент