Il est très facile de définir de nouvelles commandes qui seront autant d'abréviations. Par exemple :
\newcommand\cad{c'est-à-dire}
Cette ligne crée une nouvelle commande, \cad
, qui sera
automatiquement remplacée lors de la compilation par le texte
« c'est-à-dire ». Remarquez que LaTeX proteste si la commande que
vous définissez existe déjà. Vous pouvez ainsi remplacer les choses un peu
longues à taper par des commandes abrégées. Pour une thèse sur le
chevalier Paul-Louis de la Grange-Noble, vous aurez tout intérêt à
définir dès le début :
\newcommand\PL{Paul-Louis de la Grange-Noble}
Il arrive fréquemment d'avoir besoin de redéfinir une commande qui existe déjà. Dans ce cas-là, on utilise simplement:
\renewcommand\nom{contenu}
à la place de newcommand
.
Après toute commande dont le nom est composé de lettres (comme
\LaTeX
, par exemple et à l'inverse de \$
), les
espaces sont ignorées. Par conséquent, si
vous voulez que votre macro soit suivie d'une espace dans le résultat
final, utilisez l'une des méthodes suivantes :
Le Maître du Monde, \cad{} moi, ... Le Maître du Monde, \cad\ moi, ... Le Maître du Monde, {\cad} moi, ...
Ce serait une très mauvaise idée de mettre une espace dans la définition de la macro, car vous auriez toujours une espace, y compris avant une ponctuation.
Vous pouvez utiliser le package xspace
pour remédier à
cette nécessité. Dans le préambule, ajoutez :
\usepackage{xspace}
Ensuite, écrivez vos macros de la façon
suivante :
\newcommand\cad{c'est-à-dire\xspace}
La commande \xspace
teste ce qui suit la commande :
si c'est une ponctuation ou {
ou }
, elle ne fera
rien; dans les autres cas, elle ajoute une espace. Une conséquence de ce
fonctionnement est qu'une \footnote
suivant \cad
va produire une espace inopportune. Elle peut être évitée en
tapant
(...) \cad{}\footnote{Ma note de pied de page} (...)
Les commandes utilisées comme raccourcis atteignent vite leurs limites. D'ailleurs les raccourcis peuvent être également du ressort des éditeurs (cf. le chapitre « Abréviations » de la page Emacs avancé). Les commandes peuvent avoir des rôles bien plus importants :
La séparation fond-forme peut être atteinte en assignant à chaque
élément sémantique une commande (on appelle cela aussi le balisage
générique). Par exemple \auteur
pour
citer des auteurs, ou \source
pour indiquer la source d'une
citation. Supposons que nous souhaitions afficher les auteurs avec leur
nom en petites capitales grâce à la commande utilisée ainsi
\auteur{prénom}{nom}
on dit alors que la commande \auteur
« prend deux
arguments », tous deux délimités par des paires d'accolades.
Du coup, la définition de la commande devient
\newcommand\auteur[2]{...}
Le 2
voulant dire que la commande \auteur
a
besoin de deux arguments pour fonctionner.
On voudrait que la commande \auteur
accomplisse
l'équivalent de
prénom~\textsc{nom}
~
est l'espace insécable, et le nom est mis en petites
capitales.
Pour TeX, prénom étant le premier argument on va l'appeler
#1
et nom fort logiquement #2
.
Nous n'avons plus qu'à compléter la définition
\newcommand\auteur[2]{#1~\textsc{#2}}
L'avantage de procéder ainsi est que, plus tard, si les petites
capitales ne vous conviennent plus vous pourrez changer de manière
cohérente tout votre document (qu'il fasse deux ou plus de 1000 pages)
en changeant une ligne.
La même modification serait au contraire extrêmement fastidieuse si vous
aviez tapé systématiquement
prénom~\textsc{nom}
car il faudrait
relire l'ensemble du document et procéder aux modifications en prenant
garde de ne pas modifier un \textsc
qui ne serait pas celui
d'un auteur. Vous pouvez vous créer un fichier de style avec
vos définitions les plus courantes : cf. Écrire son propre package qui pourra
inclure (ce ne sont que des exemples, ce sont les besoins spécifiques
d'un document particulier qui décident quelles commandes il est
souhaitable de définir)
\newcommand\titre[1]{\emph{#1}} \newcommand\auteur[2]{#1~\textsc{#2}} \newcommand\source[1]{\footnote{#1}}
En plus de vous permettre de contrôler le rendu de votre document,
l'utilisation de commandes spécifiques à chaque besoin permet
d'accomplir des tâches complexes adaptées à chaque élément de votre
document. Supposons que votre commande \auteur
vous
satisfasse dans un premier temps, mais que plus tard vous arriviez à
vous dire qu'un index des auteurs (avec les pages où ils sont
mentionnés) serait du meilleur effet. Puisque vous avez une commande
spécifique, il vous suffit de la « surcharger », c'est-à-dire de lui
ajouter toute la machinerie nécessaire à la réalisation de la toute
nouvelle tâche complexe (et cela sans toucher au reste du texte). Vous
pourriez essayer de remplacer votre
définition initiale par (cf. Faire un index
avec MakeIndex)
\newcommand\auteur[2]{#1~\textsc{#2}\index{#2, #1}}
qui produit « prénom nom » et indexe l'auteur sous la forme « nom, prénom » (pour faciliter la recherche).
En fait, la définition précédente est très largement perfectible,
notamment parce que MakeIndex ne comprend pas très bien les accents (on
peut pour cette raison, lui préférer Xindy). Ce qu'il faut retenir de
tout cela, c'est qu'une fois que la macro spécifique est mise en place
(ici \auteur
), peaufiner la présentation du document se
bornera à effectuer de petites modifications sur quelques commandes.
Le seul prérequis est que vous définissiez assez tôt la commande et cela
même si vous pensez ne pas être compétent pour écrire le code
nécessaire : écrivez dans ce cas une commande qui ne fasse rien comme
\newcommand\auteur{}
car vous pourrez toujours modifier la macro à mesure que vous progressez en LaTeX ou alors quelqu'un de plus savant pourra vous venir en aide, il sera toujours plus facile pour lui de ne travailler que sur une macro isolée plutôt que sur tout un document.
Enfin sachez qu'il est possible de définir des commandes prenant des
arguments optionnels à l'instar de, par exemple,
\usepackage
. C'est-à-dire qu'il est possible de définir
une commande \auteur
telle que
\auteur{prénom}{nom}
fasse ce qui a
été dit jusqu'alors et que
\auteur[textit]{prénom}{nom}
mette
en italique le numéro de page dans l'index (pour distinguer divers types
de mention de l'auteur). Il est même possible d'avoir trois commandes
en une :
\auteur*{prénom}{nom} % Imprime seulement \auteur {prénom}{nom} % Imprime et indexe \auteur[textit]% {prénom}{nom} % Imprime, indexe % et met la page en italique
Par souci d'exhaustivité, je place le code correspondant. Il est certes un peu complexe, mais on ne peut pas attendre d'une macro qu'elle abatte des montagnes sans l'éduquer un tant soit peu.
% Tester si une chaîne est vide \usepackage{ifmtarg} % À partir de maintenant, pour TeX, « @ » est une lettre et peut donc % participer à l'élaboration de noms de commande complexes comme % \@ifmtarg défini par le package homonyme ou \@ifstar défini par LaTeX \makeatletter % Si \auteur est suivi d'une étoile appeler \sauteur, sinon \oauteur \newcommand*{\auteur}{\@ifstar\sauteur\oauteur} % \sauteur{prénom}{nom} imprime seulement \newcommand*{\sauteur}[2]{#1~\textsc{#2}} % \oauteur[comment]{prénom}{nom} imprime et indexe \newcommand*{\oauteur}[3][]{% Par défaut <comment> est vide \sauteur{#2}{#3}% \@ifmtarg{#1}{% #1 est-il vide ? \index{#3, #2}% Oui (mise en page par défaut) }{% \index{#3, #2|#1}% Non (mise en page particulière) }% } % À partir de maintenant, pour TeX, « @ » n'est plus une lettre \makeatother
Les environnements
\begin{env}...\end{env}
sont une
structure classique de LaTeX que vous pouvez aussi adapter à vos
besoins. Pour cela on utilise la commande \newenvironment
:
\newenvironment{env}{% begin }{% end }
à ce moment-là, lorsque vous utiliserez
\begin{env} . . . \end{env}
TeX substituera essentiellement (remarquez les accolades qui forment un « groupe »)
{begin . . . end}
Prenons un exemple — peu intéressant, mais commençons doucement
— pour être clair. On définit l'environnement
itenv
ainsi
\newenvironment{itenv}{% \itshape }{% % Rien }
Maintenant, quand vous tapez
\begin{itenv}Texte\end{itenv}
vous obtiendrez le même résultat que
{\itshape Texte}
qui met « Texte » en italique. Développons un exemple plus
intéressant. Supposons que vous vouliez avoir plus de souplesse avec
les citations de votre document (pour l'interlignage, la police, etc.).
Pour cela vous pourriez définir un
environnement myquote
ainsi
\newenvironment{myquote}{% \begin{quote}% Environnement quote \itshape % ... en italique \small % ... en plus petit }{% \end{quote}% }
Remarques : 1. de manière analogue aux commandes, on ne peut pas définir
un environnement qui existe déjà ; 2. il n'est pas possible de définir
un environnement portant le même nom qu'une commande existant déjà (par
exemple, il n'est pas possible de définir un environnement
usepackage
) et réciproquement (il n'est pas possible de
définir une commande \center
).
Pour réaliser des macros complexes, on pourra se référer à la FAQ anglaise qui contient de nombreux trucs de programmation dans la section « Macro programming » comme
Les packages suivants sont d'un grand intérêt pour des applications complexes :