
のよう\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
の使用 (存在に関係なく上書き)、または条件付けによってこれに対応しようとします。