Почему пакет mathtools определяет только операторы \AtBeginDocument?

Почему пакет mathtools определяет только операторы \AtBeginDocument?

\coloneqВ чем смысл определения операторов типа « mathtools.styиспользование» \AtBeginDocument?

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

Что сломалось бы, если бы эти команды были определены в конце mathtools.sty? Каковы преимущества этого обходного пути?

Я только что заметил, что в документе

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

\defeqостается неопределенным из-за этого и того, что нужно использовать

\AtBeginDocument{\let\defeq\coloneqq}

вместо.

решение1

Как и при любом использовании\AtBeginDocument , он откладывает выполнение до окончания преамбулы. Преимущество в том, что можно оценить взаимодействие с другими пакетами, которые были загружены (доилипосле).

Использование \providecommandгарантирует, что если какой-либо другой пакет (по какой-либо причине) создаст какой-либо макрос с именем \coloneq, он не будет его переопределять. Однако если он не существует, он его определит.

Как автор пакетов, вы не знаете, какие еще пакеты будут загружены вместе с вашим, и поэтому вы пытаетесь учесть это с помощью отложенных определений (с помощью \AtBeginDocument), использования \defs (для перезаписи независимо от существования) или кондиционирования.

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