Eh oui, elle/il est comme ça Mme/Mr Michu , elle/il sait à peine aligner deux commandes LATeX/ConTeXt qu’elle/il veut déjà créer les siennes. Il faut avouer que Mme/Mr Michu n’a pas tord. Créer des commandes avec LATeX/ConTeXt est très facile et bougrement efficace, alors pourquoi s’en priver ? Tu as remarqué que déjà dans notre introduction on a employé plusieurs fois le nom du site archéologique, objet de notre rapport. Ce nom est particulièrement long, Harfouëte–La Mare au Diable, trouver une façon efficace de l’écrire ferait gagner du temps et éviterais les erreurs. Es-tu sûr au bout de la centième page d’avoir toujours mis un a minuscule au a du « au » et le tiret séparateur c’est toujours un – et pas un - ou un — ?
Imaginons que tu viennes de terminer ton rapport, et que tu le fasses relire par un de tes collègues, spécialiste de la préhistoire de la vallée du Pételasoiffe. Ce dernier te fait remarquer que le site que tu as fouillé à déjà été mentionné par plusieurs auteurs mais sous le nom de « La Mare des Diables » et que dans un souci de cohérence il serait préférable que tu renommes ton site « La Mare des Diables ». Si tu as créé une commande, pas de problème, tu fais le changement dans celle-ci tu recompiles et l’intégralité de ton rapport est modifié. Dans le cas contraire, c’est la galère il te faut retrouver tous tes « La Mare au Diable » dans tous tes fichiers ! ! !
Pour construire une commande tu utilises la commande \newcommand* de la façon suivante :
Avec ConTeXt c'est la commande \define :
Je te rappelle qu’une commande LATeX/ConTeXt commence toujours par un \ et ne doit contenir que des lettres, en aucun cas des chiffres ou des signes de ponctuation. Il y a une différence entre LATeX et ConTeXt : ce dernier accepte les lettres accentuées dans le nom des commandes, c'est à proscrire en LATeX.
Il faut quand même que je parle de l'*, car tu pourras voir dans d'autres ouvrages la création de commande sans l'*.
Un peu d'historique d'abord. Lorsque Knuth a écrit TeX, il s'est rendu compte que la plupart des macros n'auraient pas besoin de contenir plus d'un paragraphe comme argument. Par conséquent, une bonne façon de tester les erreurs telles qu'un } manquant est d'interdire aux commandes d'accepter les marques de paragraphe (qu'ils soient générés par des lignes vides ou des commandes de paragraphe explicites comme \par). Il a donc créé \def pour les définitions qui ne peuvent pas accepter un marqueur de paragraphe, et la commande \long pour les y autoriser.
Lorsque Lamport a créé LATeX, il a décidé que \newcommand serait «long» et donc accepterait les paragraphes. Lorsque l'équipe LaTeX a pris le relais pour LATeX2e (version que l'on utilise ici), elle a décidé qu'il fallait ajouter le modificateur * pour retrouver le comportement de \def (sans paragraphe et une meilleur gestion des erreurs).
La plupart du temps, \newcommand* est le meilleur choix car tu bénéficies du contrôle d'erreurs qu'il fournit.
La commande \define de ConTeXt accepte les marqueurs de paragraphe.
Revenons à nos moutons. On va appeler notre commande qui veut remplacer le nom du site « \site » :
Voilà c’est pas plus compliqué que cela. Tu places cette définition dans le fichier preambuleRapport.tex :
%%%%%%%%%%%%%%%%%%%% %% Mes commandes %% %%%%%%%%%%%%%%%%%%%%\newcommand*{\site}{Harfouëte -- La Mare au Diable}
%%%%%%%%%%%%%%%%%%%% %% Mes commandes %% %%%%%%%%%%%%%%%%%%%%\define\site{Harfouëte -- La Mare au Diable}
Tu l’utilises comme toutes les commandes LATeX/ConTeXt en plaçant dans ton source \site. Après compilation tous les \site seront remplacés par «Harfouëte – La Mare au Diable».
On a déjà évoqué les problèmes d’espaces à la fin des commandes (voir ici) Pour éviter d’avoir à taper \site{} on va utiliser la commande \xspace du package du même nom, que l’on charge par la commande \usepackage{xspace}.
Notre commande devient :
Maintenant tu n’es plus obligé de te préoccuper des espaces dans ta commande et \site suffit.
L’autre avantage du package xspace est que couplé avec l’option french de babel tu n’es plus obligé d’écrire \og{} ou \fg{}, tu peux écrire \og et \fg, grâce à xspace, l’espace après la commande n’est plus « mangée ».
Attention l'action d'xspace ne concerne que les commandes que tu vas créer, il est sans effet sur celle interne à LATeX, à l'exception des certaines commandes liées à la francisation du document en lien avec babel, on vient de voir \og et \fg, on en verra d'autres plus loin.
ConTeXt possède un mécanisme équivalent \autoinsertnextspace, mais voici ce qu’en dit Hans Hagen : «cela est (et restera) non documenté et non pris en charge, car je n'aime pas ce genre de comportement»
Donc si tu veux quand même l’utiliser :
— Quoi je sais à peine utiliser la bête et tu veux que je ré-écrive ses commandes, mais tu es complètement fou !!!
— Oh la la ne t'énerve pas, c'est toujours cette notion de «séparer le fond et la forme», je t'explique.
Il existe une commande, \emph ou la déclaration \em, pour mettre les mots ou les expressions que tu juges importants en relief (on dit aussi en emphase), on en a déjà parlé ici. Conformément aux règles typographiques \em transforme en caractères italiques ou penchés les mots mis en emphase. Il est intéressant de créer une commande pour le faire.
Maintenant {\emph des mots importants} et {\imp des mots importants} produiront la même chose.
— C’est complètement débile ton truc !!
Sauf si à un moment tu décides que ce serai mieux de les avoir en gras les mots importants. Si tu n’as pas crées ma commande débile, tu recherches tous les \emph et tu les remplaces par des \bf. Avec ma commande tu la modifies :
ou en
Et ils sont en rouges
Et même en gras et rouges
Il y a un truc à bien comprendre quand tu travailles avec le monde TEX, et qui en fait une de ses forces, c’est de séparer au maximum la forme et le fond. Tu rédiges ton texte, tu places les commandes dont tu as besoins par-ci par-là et quand tu as finis ou quand tu es sûr de toi, tu adaptes les commandes à tes souhaits. Tu ne pollues pas ton esprit lors de la rédaction pour savoir si les mots importants doivent rester en italique ou pas, si le retrait de paragraphe est assez grand… Tu pourras toujours modifier tout cela à tout moment, si tu as bien organisé ton texte avec les commandes qui vont bien.
Depuis que je travaille sous ConTeXt et LATeX j’ai écris des dizaines et des dizaines de commandes. Comme dans la mesure du possible je réutilise les mêmes fichiers de configurations, j’ai ce stocke de commandes que je peux utiliser et modifier en fonction de mes besoins.
C’est ainsi que je me suis créé une série de commandes pour remplacer des expressions que j’utilise souvent, comme avant et après Jésus-Christ.
Ça ce sont les abréviations officielles mais on peut trouver ap. J.-C. ou ap. J. C. ou après J.-C., … Donc en fonction de l’éditeur avec lequel je publie j’adapte ma commande, mais dans mon texte j’écris toujours \apjc\ sans me poser de question, se sera toujours bon.
Le nombre d’arguments utilisés dans la commande s’écrit entre [] et les arguments se notent avec un # suivit d’un numéro qui va de 1 à n en fonction du nombre d’arguments utilisés.
Pour illustrer la création de ce type de commande je vais utiliser celle que j'ai créé pour écrire les rois de France.
En typographie française le numéro du roi est en chiffres romains et en grandes capitales.
Je me suis donc crée une commande à deux entrées, une pour le prénom du roi, l'autre pour son numéro. Ma commande va s'appeler \roi.
Le but de ma commande est d’écrire \roi{Louis}{14} et d’obtenir Louis XIV.
La commande pour transformer un chiffre arabe en chiffre romain c'est \romannumeral pour les 2 systèmes
donne cxxviii
Comme tu peux le voir elle écrit en minuscule, donc il va nous falloir les transformer en capital. Pour LATeX c'est la commande \MakeUppercase
donne CXXVIII
Pour ConTeXt on va se servir de \WORD
Pour éviter que le nom soit séparé du chiffre en fin de phrase on va les lier avec l'espace insécable ~
Les commandes finales sont donc :donneront
Louis XIV
On créera d'autres commandes lors de la fabrication de notre rapport.
Les fichiers preambuleRapport.tex sont modifiés :
les deux fichiers introduction.tex deviennent :
et