
\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
), использования \def
s (для перезаписи независимо от существования) или кондиционирования.