Les macros sous LaTeX

Les macros $latex \LaTeX$ constituent un moyen très simple de gagner un temps précieux sur des commandes répétitives et limitent les erreurs de recopie, pour les symboles notamment. Dans ce billet, je vais détailler comment utiliser intelligemment les macros $latex \LaTeX$, dans un document papier comme dans Beamer.

Gestion des espaces après une macro

Par défaut, les espaces après les macros sont mal gérées par $latex \LaTeX$ (il a tendance à supprimer les espaces consécutifs à l’exécution d’une macro).

Je ne saurais donc trop vous conseiller de charger le package xspace, qui fournit la commande éponyme dont le principe est de déterminer si une espace doit être ajoutée ou non lors de l’exécution d’une macro.

 

Macro sans argument

Syntaxe

\newcommand{<nom de la commande>}{%
% Liste des commandes
}

Le « % » à la fin de la première ligne a son importance : il évite à $latex \LaTeX$ d’interpréter le retour à la ligne au début de la macro, ce qui conduirait à une espace en trop en début de macro.

Exemple

\newcommand{\emiss}{%
	\ensuremath{\varepsilon}\xspace
}
Let \emiss be the thermal emissivity of the considered material.

1

 

Macro avec arguments obligatoires

Syntaxe

\newcommand{<nom de la commande>}[<nombre d'arguments>]{%
% Liste des commandes
}

Lors de la définition de la macro, on accède au premier argument avec « #1 », au second avec « #2 » etc.

Exemple

\newcommand{\emiss}[1]{%
	\ensuremath{\varepsilon_{#1}}\xspace
}
Let \emiss{\nu} be the spectral hemispherical emissivity in frequency.

2

 

Macro avec argument optionnel

Syntaxe

\newcommand{<nom de la commande>}[<nombre d'arguments>][<Valeur par défaut de #1>]{%
% Liste des commandes
}

Exemple

\newcommand{\emiss}[2][]{%
	\ensuremath{\varepsilon_{#2}^{#1}}\xspace
}
Let \emiss{\Omega} be the spectral directional emissivity. 
Therefore, one can define \emiss[\nu]{\Omega} as the spectral directional emissivity in frequency.

3

 

Overlays dans Beamer

Principe

Dans le cas particulier de Beamer, sachez qu’il est possible de définir des macros utilisant les overlays, en se basant sur les fonctions standard (vous pouvez consulter les excellentes fiches à Bébert pour rappel). Pour ce faire, il faut utiliser « \newcommand » au lieu de « \newcommand ». Si la macro que l’on souhaite définir est censée prendre n arguments, alors on dispose au sein de sa définition d’un n+1 ième argument, qui correspond aux spécifications des overlays./p>

Exemples

\newcommand<>{\flechalt}{%
	\alt#1{\rightarrow}{\leftarrow}
}
$A\flechalt<2>B$

Beamer

J’ai commencé par le cas facile puisque ma macro n’a pas d’argument. Exemple un peu plus général (deux arguments obligatoires) pour obtenir le même comportement que précédemment :

\newcommand<>{\flechalt}[2]{%
	#1\alt#3{\rightarrow}{\leftarrow}#2
}
$\flechalt<2>{A}{B}$

 

Pour aller plus loin

Package xstring

En utilisant le package xstring, il est possible de créer des boucles conditionnelles sur des chaînes de caractères de cette façon :

\IfEqCase{<chaine a tester>}{ %
        {a}{<commande si la chaine vaut "a">} %
        {b}{<commande si la chaine vaut "b">} %
 % etc
}[<commande si aucune condition n'est remplie>]

Exemple

\newcommand{\emiss}[2][]{%
	\IfEqCase{#1}{%
		{freq}{\ensuremath{\varepsilon_{#2}^{\nu}}\xspace}%
		{wave}{\ensuremath{\varepsilon_{#2}^{\lambda}}\xspace}%
    }[\ensuremath{\varepsilon_{#2}}\xspace]%
}
Let \emiss[freq]{\Omega} and \emiss[wave]{\Omega} be the spectral directional emissivity in frequency and the spectral directional emissivity in wavelength, respectively.

4