2009-09-20 12:34:28 +02:00
|
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
<!DOCTYPE html
|
|
|
|
|
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
|
|
|
|
"tuteurs://DTD/tml.dtd">
|
|
|
|
|
<html>
|
|
|
|
|
<head>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<title>Macros élémentaires</title>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h1>Faire des macros élémentaires</h1>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h2>Les macros, des abréviations</h2>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
|
2005-12-06 20:04:02 +01:00
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Il est très facile de définir de nouvelles commandes qui seront autant
|
|
|
|
|
d'abréviations. Par exemple :
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
|
|
|
|
|
<pre>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
\newcommand\cad{c'est-à-dire}
|
2002-11-12 17:51:48 +01:00
|
|
|
|
</pre>
|
|
|
|
|
|
2005-12-06 20:04:02 +01:00
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Cette ligne crée une nouvelle commande, <code>\cad</code>, 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 :
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
\newcommand\PL{Paul-Louis de la Grange-Noble}
|
|
|
|
|
</pre>
|
|
|
|
|
|
2008-03-24 18:12:36 +01:00
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Il arrive fréquemment d'avoir besoin de redéfinir une commande qui existe
|
|
|
|
|
déjà. Dans ce cas-là, on utilise simplement:
|
2008-03-24 18:12:36 +01:00
|
|
|
|
</p>
|
|
|
|
|
<pre>
|
|
|
|
|
\renewcommand\nom{contenu}
|
|
|
|
|
</pre>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<p class="continue"> à la place de <code>newcommand </code>.
|
2008-03-24 18:12:36 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h2>Espaces après les macros</h2>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
|
2005-12-06 20:04:02 +01:00
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Après toute commande dont le nom est composé de lettres (comme
|
|
|
|
|
<code>\LaTeX</code>, par exemple et à l'inverse de <code>\$</code>), 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 :
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
|
|
|
|
|
<pre>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Le Maître du Monde, \cad{} moi, ...
|
|
|
|
|
Le Maître du Monde, \cad\ moi, ...
|
|
|
|
|
Le Maître du Monde, {\cad} moi, ...
|
2002-11-12 17:51:48 +01:00
|
|
|
|
</pre>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<p>Ce serait une très mauvaise idée de mettre une espace dans la
|
|
|
|
|
définition de la macro, car vous auriez <em>toujours</em> une espace, y
|
2005-12-06 20:04:02 +01:00
|
|
|
|
compris avant une ponctuation.
|
|
|
|
|
</p>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<p>Vous pouvez utiliser le package <code>xspace</code> pour remédier à
|
|
|
|
|
cette nécessité. Dans le préambule, ajoutez :
|
|
|
|
|
<code>\usepackage{xspace}</code> Ensuite, écrivez vos macros de la façon
|
|
|
|
|
suivante :
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
|
2005-12-06 20:04:02 +01:00
|
|
|
|
<pre>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
\newcommand\cad{c'est-à-dire\xspace}
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</pre>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<p>La commande <code>\xspace</code> teste ce qui suit la commande :
|
2003-05-20 16:22:18 +02:00
|
|
|
|
si c'est une ponctuation ou <code>{</code> ou <code>}</code>, elle ne fera
|
2009-09-20 12:27:14 +02:00
|
|
|
|
rien; dans les autres cas, elle ajoute une espace. Une conséquence de ce
|
2003-05-20 16:22:18 +02:00
|
|
|
|
fonctionnement est qu'une <code>\footnote</code> suivant <code>\cad</code>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
va produire une espace inopportune. Elle peut être évitée en
|
|
|
|
|
tapant
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
|
2003-05-20 16:22:18 +02:00
|
|
|
|
<pre>
|
|
|
|
|
(...) \cad{}\footnote{Ma note de pied de page} (...)
|
|
|
|
|
</pre>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h2>Commandes à arguments</h2>
|
2005-12-06 20:04:02 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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 <a
|
|
|
|
|
href="&url.tuteurs;unix/editeurs/super_emacs.html">Emacs avancé</a>).
|
|
|
|
|
Les commandes peuvent avoir des rôles bien plus importants :
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<li>elles sont à la base de la séparation fond-forme ;</li>
|
|
|
|
|
<li>elles peuvent être utilisées pour accomplir des tâches très
|
2005-12-06 20:04:02 +01:00
|
|
|
|
complexes.</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h3>Un élément sémantique, une commande</h3>
|
2005-12-06 20:04:02 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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 <code>\auteur</code> pour
|
2005-12-06 20:04:02 +01:00
|
|
|
|
citer des auteurs, ou <code>\source</code> pour indiquer la source d'une
|
|
|
|
|
citation. Supposons que nous souhaitions afficher les auteurs avec leur
|
2009-09-20 12:27:14 +02:00
|
|
|
|
nom en petites capitales grâce à la commande utilisée ainsi
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
\auteur{<var>prénom</var>}{<var>nom</var>}
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
2009-09-20 12:27:14 +02:00
|
|
|
|
on dit alors que la commande <code>\auteur</code> « prend deux
|
|
|
|
|
arguments », tous deux délimités par des paires d'accolades.
|
|
|
|
|
Du coup, la définition de la commande devient
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
\newcommand\auteur[2]{...}
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
|
|
|
|
Le <code>2</code> voulant dire que la commande <code>\auteur</code> a
|
|
|
|
|
besoin de deux arguments pour fonctionner.
|
|
|
|
|
On voudrait que la commande <code>\auteur</code> accomplisse
|
2009-09-20 12:27:14 +02:00
|
|
|
|
l'équivalent de
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<var>prénom</var>~\textsc{<var>nom</var>}
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<code>~</code> est l'espace insécable, et le nom est mis en petites
|
2005-12-06 20:04:02 +01:00
|
|
|
|
capitales.
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Pour TeX, <var>prénom</var> étant le premier argument on va l'appeler
|
2005-12-06 20:04:02 +01:00
|
|
|
|
<code>#1</code> et <var>nom</var> fort logiquement <code>#2</code>.
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Nous n'avons plus qu'à compléter la définition
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
\newcommand\auteur[2]{#1~\textsc{#2}}
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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)
|
2005-12-06 20:04:02 +01:00
|
|
|
|
en changeant une ligne.
|
2009-09-20 12:27:14 +02:00
|
|
|
|
La même modification serait au contraire extrêmement fastidieuse si vous
|
|
|
|
|
aviez tapé systématiquement
|
|
|
|
|
<code><var>prénom</var>~\textsc{<var>nom</var>}</code> car il faudrait
|
|
|
|
|
relire l'ensemble du document et procéder aux modifications en prenant
|
2005-12-06 20:04:02 +01:00
|
|
|
|
garde de ne pas modifier un <code>\textsc</code> qui ne serait pas celui
|
2009-09-20 12:27:14 +02:00
|
|
|
|
d'un auteur. Vous pouvez vous créer un fichier de style avec
|
|
|
|
|
vos définitions les plus courantes : cf. <a
|
|
|
|
|
href="nouveau_package.html">Écrire son propre package</a> 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)
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
\newcommand\titre[1]{\emph{#1}}
|
|
|
|
|
\newcommand\auteur[2]{#1~\textsc{#2}}
|
|
|
|
|
\newcommand\source[1]{\footnote{#1}}
|
|
|
|
|
</pre>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h3>Tâches complexes</h3>
|
2005-12-06 20:04:02 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2005-12-06 20:04:02 +01:00
|
|
|
|
document. Supposons que votre commande <code>\auteur</code> vous
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
2005-12-06 20:04:02 +01:00
|
|
|
|
pourriez essayer de remplacer votre
|
2009-09-20 12:27:14 +02:00
|
|
|
|
définition initiale par (cf. <a href="makeindex.html">Faire un index
|
2005-12-06 20:04:02 +01:00
|
|
|
|
avec MakeIndex</a>)
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
\newcommand\auteur[2]{#1~\textsc{#2}\index{#2, #1}}
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
2009-09-20 12:27:14 +02:00
|
|
|
|
qui produit « <var>prénom</var> <var>nom</var> » et indexe l'auteur
|
|
|
|
|
sous la forme « <var>nom</var>, <var>prénom</var> » (pour faciliter la
|
2005-12-06 20:04:02 +01:00
|
|
|
|
recherche).
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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 <code>\auteur</code>), 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
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
\newcommand\auteur{}
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
2009-09-20 12:27:14 +02:00
|
|
|
|
car vous pourrez toujours modifier la macro à mesure que vous progressez
|
2005-12-06 20:04:02 +01:00
|
|
|
|
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
|
2009-09-20 12:27:14 +02:00
|
|
|
|
isolée plutôt que sur tout un document.
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Enfin sachez qu'il est possible de définir des commandes prenant des
|
|
|
|
|
arguments optionnels à l'instar de, par exemple,
|
|
|
|
|
<code>\usepackage</code>. C'est-à-dire qu'il est possible de définir
|
2005-12-06 20:04:02 +01:00
|
|
|
|
une commande <code>\auteur</code> telle que
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<code>\auteur{<var>prénom</var>}{<var>nom</var>}</code> fasse ce qui a
|
|
|
|
|
été dit jusqu'alors et que
|
|
|
|
|
<code>\auteur[textit]{<var>prénom</var>}{<var>nom</var>}</code> 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 :
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
\auteur*{<var>prénom</var>}{<var>nom</var>} % Imprime seulement
|
|
|
|
|
\auteur {<var>prénom</var>}{<var>nom</var>} % Imprime et indexe
|
2005-12-06 20:04:02 +01:00
|
|
|
|
\auteur[textit]%
|
2009-09-20 12:27:14 +02:00
|
|
|
|
{<var>prénom</var>}{<var>nom</var>} % Imprime, indexe
|
2005-12-06 20:04:02 +01:00
|
|
|
|
% et met la page en italique
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Par souci d'exhaustivité, je place le code correspondant. Il est certes
|
2005-12-06 20:04:02 +01:00
|
|
|
|
un peu complexe, mais on ne peut pas attendre d'une macro qu'elle abatte
|
2009-09-20 12:27:14 +02:00
|
|
|
|
des montagnes sans l'éduquer un tant soit peu.
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
% Tester si une chaîne est vide
|
2005-12-06 20:04:02 +01:00
|
|
|
|
\usepackage{ifmtarg}
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
% À 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
|
2005-12-06 20:04:02 +01:00
|
|
|
|
\makeatletter
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
% Si \auteur est suivi d'une étoile appeler \sauteur, sinon \oauteur
|
2005-12-06 20:04:02 +01:00
|
|
|
|
\newcommand*{\auteur}{\@ifstar\sauteur\oauteur}
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
% \sauteur{prénom}{nom} imprime seulement
|
2005-12-06 20:04:02 +01:00
|
|
|
|
\newcommand*{\sauteur}[2]{#1~\textsc{#2}}
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
% \oauteur[comment]{prénom}{nom} imprime et indexe
|
|
|
|
|
\newcommand*{\oauteur}[3][]{% Par défaut <comment> est vide
|
2005-12-06 20:04:02 +01:00
|
|
|
|
\sauteur{#2}{#3}%
|
2009-09-20 12:27:14 +02:00
|
|
|
|
\@ifmtarg{#1}{% #1 est-il vide ?
|
|
|
|
|
\index{#3, #2}% Oui (mise en page par défaut)
|
2005-12-06 20:04:02 +01:00
|
|
|
|
}{%
|
2009-09-20 12:27:14 +02:00
|
|
|
|
\index{#3, #2|#1}% Non (mise en page particulière)
|
2005-12-06 20:04:02 +01:00
|
|
|
|
}%
|
|
|
|
|
}
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
% À partir de maintenant, pour TeX, « @ » n'est plus une lettre
|
2005-12-06 20:04:02 +01:00
|
|
|
|
\makeatother
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<h2>Environnements</h2>
|
|
|
|
|
|
|
|
|
|
<p>
|
|
|
|
|
Les environnements
|
|
|
|
|
<code>\begin{<var>env</var>}...\end{<var>env</var>}</code> sont une
|
2009-09-20 12:27:14 +02:00
|
|
|
|
structure classique de LaTeX que vous pouvez aussi adapter à vos
|
|
|
|
|
besoins. Pour cela on utilise la commande <code>\newenvironment</code> :
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
\newenvironment{<var>env</var>}{%
|
|
|
|
|
<var>begin</var>
|
|
|
|
|
}{%
|
|
|
|
|
<var>end</var>
|
|
|
|
|
}
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
2009-09-20 12:27:14 +02:00
|
|
|
|
à ce moment-là, lorsque vous utiliserez
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
\begin{<var>env</var>}
|
|
|
|
|
.
|
|
|
|
|
.
|
|
|
|
|
.
|
|
|
|
|
\end{<var>env</var>}
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
|
|
|
|
TeX substituera essentiellement (remarquez les accolades qui forment un
|
2009-09-20 12:27:14 +02:00
|
|
|
|
« groupe »)
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
{<var>begin</var>
|
|
|
|
|
.
|
|
|
|
|
.
|
|
|
|
|
.
|
|
|
|
|
<var>end</var>}
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Prenons un exemple — peu intéressant, mais commençons doucement
|
|
|
|
|
— pour être clair. On définit l'environnement
|
2005-12-06 20:04:02 +01:00
|
|
|
|
<code>itenv</code> ainsi
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
\newenvironment{itenv}{%
|
|
|
|
|
\itshape
|
|
|
|
|
}{%
|
|
|
|
|
% Rien
|
|
|
|
|
}
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
|
|
|
|
Maintenant, quand vous tapez
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
\begin{itenv}Texte\end{itenv}
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
2009-09-20 12:27:14 +02:00
|
|
|
|
vous obtiendrez le même résultat que
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
{\itshape Texte}
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
2009-09-20 12:27:14 +02:00
|
|
|
|
qui met « Texte » en italique. Développons un exemple plus
|
|
|
|
|
intéressant. Supposons que vous vouliez avoir plus de souplesse avec
|
2005-12-06 20:04:02 +01:00
|
|
|
|
les citations de votre document (pour l'interlignage, la police, etc.).
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Pour cela vous pourriez définir un
|
2005-12-06 20:04:02 +01:00
|
|
|
|
environnement <code>myquote</code> ainsi
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<pre>
|
|
|
|
|
\newenvironment{myquote}{%
|
|
|
|
|
\begin{quote}% Environnement quote
|
|
|
|
|
\itshape % ... en italique
|
|
|
|
|
\small % ... en plus petit
|
|
|
|
|
}{%
|
|
|
|
|
\end{quote}%
|
|
|
|
|
}
|
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
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
|
|
|
|
|
<code>usepackage</code>) et réciproquement (il n'est pas possible de
|
|
|
|
|
définir une commande <code>\center</code>).
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<h2>Éléments de programmation</h2>
|
2005-12-06 20:04:02 +01:00
|
|
|
|
|
|
|
|
|
<p>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Pour réaliser des macros complexes, on pourra se référer à la FAQ
|
2005-12-06 20:04:02 +01:00
|
|
|
|
anglaise qui contient de nombreux trucs de programmation dans la section
|
2009-09-20 12:27:14 +02:00
|
|
|
|
« Macro programming » comme
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
|
<li>Detecting that something is empty</li>
|
|
|
|
|
<li>More than one optional argument</li>
|
|
|
|
|
<li>Commands defined with * options</li>
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
<p class="continue">
|
2009-09-20 12:27:14 +02:00
|
|
|
|
Les packages suivants sont d'un grand intérêt pour des applications
|
|
|
|
|
complexes :
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
<dl>
|
|
|
|
|
<dt>ifthen</dt>
|
|
|
|
|
<dd>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
pour des tests conditionnels « if-then-else », des boucles
|
|
|
|
|
« while-do », etc. ;
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</dd>
|
|
|
|
|
|
|
|
|
|
<dt>calc</dt>
|
|
|
|
|
<dd>
|
2009-09-20 12:27:14 +02:00
|
|
|
|
pour de l'arithmétique des compteurs et des longueurs plus aisée ;
|
2005-12-06 20:04:02 +01:00
|
|
|
|
</dd>
|
|
|
|
|
|
|
|
|
|
<dt>ifmtarg</dt>
|
|
|
|
|
<dd>
|
|
|
|
|
pour tester si quelque chose est vide.
|
|
|
|
|
</dd>
|
|
|
|
|
</dl>
|
|
|
|
|
|
2009-09-20 12:27:14 +02:00
|
|
|
|
<div class="metainformation"> Auteurs : Émilia Robin (1999),
|
|
|
|
|
François-Xavier Coudert, Josselin Noirel (2005). Dernière modification le <date
|
2008-03-24 18:12:36 +01:00
|
|
|
|
value="$Date: 2008-03-24 17:12:36 $" />.</div>
|
2002-11-12 17:51:48 +01:00
|
|
|
|
|
|
|
|
|
</body> </html>
|