
¿Cuál es la razón detrás de definir operadores como \coloneq
en el mathtools.sty
uso \AtBeginDocument
?
\AtBeginDocument{
...
\providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}}
...
}
¿Qué se rompería si estos comandos se definieran al final de mathtools.sty
? ¿Cuáles son los beneficios de este desvío?
Acabo de notar que en el documento
\documentclass{article}
\usepackage{mathtools}
\let\defeq\coloneqq
\begin{document}
$a\defeq b$
\end{document}
\defeq
permanece indefinido debido a esto y que uno tiene que usar
\AtBeginDocument{\let\defeq\coloneqq}
en cambio.
Respuesta1
Como ocurre con cualquier uso de \AtBeginDocument
, retrasa la ejecución hasta después del preámbulo. El beneficio es que se pueden evaluar las interacciones con otros paquetes que se cargaron (antesodespués).
El uso \providecommand
garantiza que si cualquier otro paquete (por cualquier motivo) crea alguna macro llamada \coloneq
, no la redefinirá. Sin embargo, si no existe, lo definirá.
Como escritor de paquetes, no sabe qué otros paquetes se cargarán con el suyo y, por lo tanto, intenta acomodar esto con definiciones retrasadas (usando \AtBeginDocument
), usando \def
s (para sobrescribir independientemente de su existencia) o condicionamiento.