Warum definiert das Mathtools-Paket nur Operatoren \AtBeginDocument?

Warum definiert das Mathtools-Paket nur Operatoren \AtBeginDocument?

Was ist der Grund für die Definition von Operatoren wie \coloneqbei der mathtools.styVerwendung \AtBeginDocument?

\AtBeginDocument{
  ...
  \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
  ...
}

Was würde schiefgehen, wenn diese Befehle am Ende von definiert würden mathtools.sty? Welche Vorteile bietet dieser Umweg?

Mir ist gerade aufgefallen, dass im Dokument

\documentclass{article}
\usepackage{mathtools}
\let\defeq\coloneqq
\begin{document}
$a\defeq b$
\end{document}

\defeqbleibt undefiniert, weil man dies und jenes verwenden muss

\AtBeginDocument{\let\defeq\coloneqq}

stattdessen.

Antwort1

Wie bei jeder Verwendung von \AtBeginDocumentverzögert es die Ausführung bis nach der Präambel. Der Vorteil besteht darin, dass man Interaktionen mit anderen Paketen bewerten kann, die geladen wurden (vorodernach).

Die Verwendung von \providecommandstellt sicher, dass ein Makro mit dem Namen nicht neu definiert wird, wenn es von einem anderen Paket (aus welchem ​​Grund auch immer) erstellt wird \coloneq. Wenn es jedoch nicht existiert, wird es definiert.

Als Paketautor wissen Sie nicht, welche anderen Pakete mit Ihrem geladen werden, und versuchen daher, dies mit verzögerten Definitionen (mithilfe von \AtBeginDocument), der Verwendung von \defs (zum Überschreiben unabhängig von der Existenz) oder Konditionierung zu berücksichtigen.

verwandte Informationen