Pourquoi préférer \newcommand à \def ?#

Une activité essentielle dans l’usage de est la définition de macros. Pour cela, propose des méthodes qui lui sont propres (\newcommand, \renewcommand, etc.) en plus des méthodes de qui restent disponibles. Comme souvent, on a intérêt sauf raison particulière à préférer les méthodes de pour définir les commandes.

La première raison est que opère beaucoup d’opérations de contrôle pour vous empêcher de tout casser par maladresse. En l’occurrence, le danger est de redéfinir sans le savoir une commande qui existe déjà (vous ne connaissez sans doute pas par coeur la liste des 300 primitives de et encore moins celle des commandes ). S’il s’agit d’une commande ayant un rôle essentiel (comme \par ou \output), les conséquences peuvent être catastrophique et difficiles à comprendre.

Pour cela, distingue la définition d’une nouvelle commande qui se fait avec \newcommand de la redéfinition qui se fait avec \renewcommand. Par ailleurs, il faut savoir qu’en il est dangereux de définir des commandes dont le nom commence par \end car elles sont utilisée en interne par les environnements. Là aussi, \newcommand se charge de la vérification et vous évite des problèmes.

Par ailleurs, une raison un peu plus personnelle de préférer \newcommand est sa syntaxe plus simple pour la spécification du nombre d’arguments, et en un sens plus puissante avec la possibilité de rendre optionnel le premier argument. Concernant les arguments, \def offre d’autres possibilités, comme les arguments délimités, dont on a rarement besoin sauf pour des techniques un peu avancées.

Dans les rares cas où on a vraiment besoin de \def (ou d’autres commandes comme \let ou \edef), un usage prudent est de faire précéder la définition de la macro (par exemple \def\macro) par un \newcommand\macro{} pour vérifier qu’on est bien autorisé à définir \macro.