Suivant: , Monter: Definitions   [Table des matières][Index]


12.1 \newcommand & \renewcommand

Synopsis, l’un parmi :

\newcommand{\cmd}{défn}
\newcommand{\cmd}[nargs]{défn}
\newcommand{\cmd}[nargs][optargdéfaut]{défn}
\newcommand*{\cmd}{défn}
\newcommand*{\cmd}[nargs]{défn}
\newcommand*{\cmd}[nargs][optargdéfaut]{défn}

ou parmi :

\renewcommand{\cmd}[nargs]{défn}
\renewcommand{\cmd}[nargs]{défn}
\renewcommand{\cmd}[nargs][optargdéfaut]{défn}
\renewcommand*{\cmd}{défn}
\renewcommand*{\cmd}[nargs]{défn}
\renewcommand*{\cmd}[nargs][optargdéfaut]{défn}

Définit ou redéfinit une commande (voir aussi la discussion de \DeclareRobustCommand dans Class and package commands).

La forme étoilée (en *) de ces commandes interdit que les arguments contiennent une multiplicité de paragraphes de texte (la commande n’est pas \long, dans la terminologie de TeX de base). Avec la forme par défaut, il est possible qu’un argument soit une multiplicité de paragraphes.

Description des paramètres :

cmd

Obligatoire ; \cmd est le nom de la commande. Il doit commencer par une contr’olbique, \, et ne doit pas commencer avec la chaîne de 4 caractères \end. Pour \newcommand, il ne doit pas être déja défini et ne doit pas commencer avec \end ; pour \renewcommand, il doit être déja défini.

nargs

Optionnel ; un entier compris entre 1 et 9 spécifiant le nombre d’arguments que la commande prend, y compris un éventuel argument optionnel. Si cet argument n’est pas présent, alors la spécification par défaut est que la commande ne prend aucun argument. Lorsque on redéfinit une commande, la nouvelle version peut prendre un nombre différent d’arguments par rapport à l’ancienne.

optargdéfaut

Optionnel ; si cet argument est present, alors le premier argument de la commande \cmd en définition est optionnel, et sa valeur par défaut est optargdéfaut (qui peut être une chaîne vide). Si cet argument n’est pas présent, alors \cmd ne prend pas d’argument optionnel.

C’est à dire que si \cmd est utilisé avec des crochets à la suite, comme dans \cmd[valopt], alors au sein de défn le premier paramètre positionnel #1 se développe en valopt. Par contre si \cmd est appelé sans crochet à la suite, alors au sein de défn le paramètre positionnel #1 se développe en la valeur par défaut optargdéfaut. Dans tous les cas, tout argument obligatoire sera désigné en commençant par #2.

Omettre [maval] dans un appel n’est pas la même chose qu’avoir les crochets ne contenant rien, comme dans []. Dans le premier cas le paramètre #1 se développe en optargdéfaut ; alors que dans le second #1 se développe en une chaîne vide.

défn

Obligatoire ; le texte par lequel substituer chaque occurrence de \cmd. Les paramètres #1, #2, ..., #nargs sont remplacés par les valeurs que vous fournissez en appelant la command (ou par la valeur par défaut s’il y a un argument par défaut et que vous n’exercez pas l’option).

TeX ignore les blancs dans le code source à la suite d’un mot de contrôle (voir Control sequences), comme dans ‘\cmd ’. Si vous désirez une espace réellement à cet endroit, une solution est de taper {} après la commande (‘\cmd{} ’), et un autre est d’utiliser un espace de contrôle explicite (‘\cmd\ ’).

Un exemple simple de définition d’une nouvelle commande : \newcommand{\JM}{Jean Martin} a pour effet le remplacement de \JM par le texte plus long de la définition. La redéfinition d’une commande existante est similaire : \renewcommand{\symbolecqfd}{{\small CQFD}}.

Si vous tentez de définir une commande et que son nom a déjà été utilisé alors vous obtenez quelque-chose du genre de ‘LaTeX Error: Command \fred already defined. Or name \end... illegal, see p.192 of the manual’. Si vous tentez de redéfinir une command et que son nom n’a pas encore été utilisé alors vous obtenez quelque-chose du genre de ‘LaTeX Error: \hank undefined’.

Voici une première définition créant une commande sans argument, et une seconde avec un argument obligatoire.

\newcommand{\etudiant}{Melle~O'Leary}
\newcommand{\defref}[1]{Définition~\ref{#1}}

Utilisez la première commande comme dans Je confie \etudiant{} à vos bons soins. La seconde commande a un argument variable, de sorte que \defref{def:base} se développe en Definition~\ref{def:base}, ce qui en fin de compte se développera en quelque-chose du genre de ‘Définition~3.14’.

Un exemple avec deux arguments obligatoires : \newcommand{\nbym}[2]{$#1 \times #2$} est invoqué comme \nbym{2}{k}.

Un exemple avec un argument optionnel :

\newcommand{\salutation}[1][Madame, Monsieur]{#1,}

Alors, \salutation donne ‘Madame, Monsieur,’ alors \salutation[Cher Jean] donne ‘Cher Jean,’. Et \salutation[] donne ‘,’.

Cet exemple a un argument optionnel et deux arguments obligatoires.

\newcommand{\avocats}[3][cie]{#2, #3, et~#1}
J'emploie \avocats[Odette]{Devoie}{Trichou}.

En sortie on aura ‘J'elmploie Devoie, Trichou, et Odette’. L’argument optionnel, c-à-d. Odette, est associé à #1, alors que Devoie et Trichou le sont à #2 et #3. À cause de l’argument optionnel, \avocats{Devoie}{Trichou} donnera en sortie ‘J'emploie Devoie, Trichou, et cie’.

Les accolades autour de défn ne définissent pas un groupe, c.-à-d. qu’elle ne délimitent pas la portée du résultat du développement de défn. Ainsi la définition \newcommand{\nomnavire}[1]{\it #1} est problématique dans cette phrase :

Le \nomnavire{Monitor} rencontra le \nomnavire{Merrimac}.

les mots ‘rencontra le’ sont mis incorrectement en italique. Une paire supplémentaire d’accolades est nécessaire, au sein de la définition : \newcommand{\nomnavire}[1]{{\it #1}}.


Suivant: , Monter: Definitions   [Table des matières][Index]