Der \write-Befehl von TeX erzeugt manchmal einen falschen vertikalen Abstand

Der \write-Befehl von TeX erzeugt manchmal einen falschen vertikalen Abstand

beim Debuggen eines Problems mit FiXme (gemeldet von Lars Madsen) bin ich auf dieses Problem gestoßen, das leider über mein Fachwissen hinausgeht. Betrachten Sie das folgende 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}

Der Aufruf \writeerzeugt einen unechten vertikalen Zwischenraum im Dokument (kommentieren Sie diese Zeile oder rufen Sie ein Makro auf, das den Unterschied nicht sichtbar macht). Ich würde gerne verstehen, was hier vor sich geht und ob dies irgendwo als Fehler betrachtet werden sollte oder nicht (in der Theorem-Umgebung?).

Danke schön!

Antwort1

Anzeigeumgebungen wie Beweise/Theoreme usw. und Abschnittsüberschriften fügen vor und nach dem sichtbaren Text Leerzeichen hinzu. \addvspaceDieser Befehl versucht zu prüfen, ob der vertikalen Liste gerade ein Leerzeichen hinzugefügt wurde, und fügt das neue Leerzeichen in diesem Fall nicht hinzu, wenn das vorhandene Leerzeichen größer ist. Dies bedeutet, dass beispielsweise zwischen zwei benachbarten Theoremen kein doppeltes Leerzeichen zwischen ihnen steht, vom Ende des einen bis zum Anfang des anderen. (Die Aktion mit einer primitiven Anzeigemathematik ist im Grunde ähnlich.)

ein Dingsbums \write(oder \colorhat ähnliche Probleme) bedeutet, dass es unmöglich ist, den vorherigen Speicherplatz zu sehen, und daher fügt die spätere Umgebung immer den gesamten angeforderten Speicherplatz am Anfang hinzu.

Da können Sie nicht viel machen, außer das Ding dort nicht hinzuzufügen. Wenn Sie es zum Beispiel nach dem P in Proof hinzufügen, ist es OK.

Der expl3- xgalleyCode befasst sich damit, ist aber massiv invasiv und muss abfangenjedenBefehl, der versucht, etwas im vertikalen Modus hinzuzufügen und seine Aktion zu verzögern und die Dinge neu anzuordnen, sodass alle Abstände zusammengeführt werden können.

verwandte Informationen