diff --git a/logiciels/latex/macros.tml b/logiciels/latex/macros.tml index 167f3b1..054ce61 100644 --- a/logiciels/latex/macros.tml +++ b/logiciels/latex/macros.tml @@ -12,19 +12,24 @@
Il est très facile de définir de nouvelles commandes qui seront autant -d'abréviations. Par exemple :
++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
+
+Cette ligne crée une nouvelle commande, \cad
, qui sera
automatiquement remplacée lors de la compilation par le texte
-« c'est-à-dire ». Vous pouvez ainsi remplacer les choses un peu
-longues à taper par des commande abrégées. Pour une thèse sur le
+« 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} @@ -32,42 +37,380 @@ dEspaces après les macros
-Après toute commande dont le nom est composé de lettres (comme +
+Après toute commande dont le nom est composé de lettres (comme
+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 : +\LaTeX
, par exemple et à l'inverse de\$
), les -espaces sont ignorées. Par conséquent si -vous voulez que votre macro soit suivie d'un 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, ... 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.
+compris avant une ponctuation. +Vous pouvez utiliser le package
+suivante : + -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}++\newcommand\cad{c'est-à-dire\xspace} +La commande
+va produire une espace inopportune. Elle peut être évitée en +tapant +\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 produite une espace inopportune. Elle peut être évitée en -tapant(...) \cad{}\footnote{Ma note de pied de page} (...)+Commandes à arguments
+ ++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 : +
+ +