100% ont trouvé ce document utile (1 vote)
348 vues230 pages

Untitled

Transféré par

Idrissa Ouattara
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
348 vues230 pages

Untitled

Transféré par

Idrissa Ouattara
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Références sciences

LaTeX
pour les enseignants
Nicolas Poulain

lliDse
Collection Références sciences

dirigée par Paul de Laboulaye


[Link]@[Link]

Retrouvez tous les livres de la collection et des extraits sur [Link]

ISBN 9782340-036710 DANQ»


©Ellipses Édition Marketing S.A., 2020 MOTOCÔPWÛE
32, rue Bargue 75740 Paris cedex 15 lUEŒUVœ
Le Code de la propriété intellectuelle n’autorisant, aux termes de l’article L. 122-5.2° et
3°a), d’une part, que les « copies ou reproductions strictement réservées à l’usage privé
du copiste et non destinées à une utilisation collective », et d’autre part, que les analyses
et les courtes citations dans un but d’exemple et d’illustration, « toute représentation ou
reproduction intégrale ou partielle faite sans le consentement de l’auteur ou de ses ayants
droit ou ayants cause est illicite » (art. L. 122-4).
Cette représentation ou reproduction, par quelque procédé que ce soit constituerait une
contrefaçon sanctionnée par les articles L. 335-2 et suivants du Code de la propriété
intellectuelle.

[Link]
Avant-propos

Ce livre est issu d’une documentation de stage à destination des enseignants de


sciences de l’académie de Paris. Je profite de cet avant-propos pour les remercier
pour leur enthousiasme et leurs nombreuses questions. L’objectif de l’ouvrage est de
permettre à chacun de construire des documents avec une mise en page personnalisée
et de qualité incluant éventuellement de belles formules mathématiques et des figures
à la construction rigoureuse.
Il n’est évidemment pas possible de faire en un seul ouvrage le tour des fonction­
nalités de et des innombrables packages qui l’enrichissent. Des recherches sur
l’Internet et les livres cités dans la bibiographie pourront compléter l’étude des sujets
abordés ici et permettre d’aller plus loin. Beaucoup de références à [CTAN] parsèment
le texte : la documentation des packages disponible sur [Link] est une source
d’informations inépuisable pour apprendre et progresser.
Les exemples constituent le cœur de ce livre. Ils parlent souvent d’eux-mêmes. Les
étudier, les copier et les modifier est sans doute le meilleur moyen de se les approprier
pour comprendre les concepts qu’ils décrivent. Les explications autour ne servent qu’à
préciser l’usage de certains éléments.
Les exemples de ce livre sont accompagnés d’un code à six caractères (chiffres,
majuscules et minuscules) permettant de récupérer chaque exemple pour le copier-
coller depuis le site [Link]
Ainsi on accède à l’exemple suivant à l’adresse [Link]

« \usepackage{amsf onts}

E
n
\[
\lim_{x\to 0} f(x) ■ t(0) \in \mathbb{Z}
limf(x) = /(0)eZ
x—*0
ZU \]

La partie du code en gris clair correspond aux lignes à faire figurer dans le préam­
bule pour réussir la compilation. Cela peut correspondre au chargement d’un package
(comme ici) ou à l’ajout d’une instruction particulière.
Table des matières

1 Installer un environnement... ou non 1


1.1 Qu’est-ce qu’un environnement LM£X ? . 2
1.2 L’éditeur spécialisé 2
1.3 lAT^X sans installation avec [Link]
1.4 Installation sous Windows 3
1.5 Installation sous MacOS 4
1.6 Installation sous Linux 4

2 Découverte 5
2.1 Un exemple simple 6
2.2 Occupez-vous du fond, LT^X gère la forme . 7
2.3 Gérer les problèmes d’accents 8
2.4 Les caractères réservés 9
2.5 Majuscules et minuscules 9
2.6 La compilation : lAI^X, PdflATEjXou XelAT^X
2.7 Choisir le compilateur dans l’éditeur 11
2.8 Un préambule «type» 11
2.9 Exemples de documents 13
2.9.1 Un premier exemple sérieux 13
2.9.2 Un devoir de sciences 14
2.9.3 Un cours de sciences 16
2.10 Gérer ses fichiers 18
2.11 Erreurs et warnings 18
2.12 Débogage commenté : un exercice APMEP .
2.13 Options avancées de compilation 22

3 Les indispensables pour composer un document 25


3.1 Taille et style de texte 26
3.2 Alignement du texte 27
3.3 Typographie française 27
3.4 Structurer un document 28
vi Table des matières

3.5 Listes à puces, numérotées ou descriptives . . . 29


3.6 Les longueurs dans 31
3.7 Régler la taille des marges 31
3.8 Espacements, interlignes et sauts 32
3.9 Encadrements 33
3.9.1 Encadrer quelques mots 33
3.9.2 Encadrer un texte 34
3.10 Tableaux simples 34
3.11 Insertion d’images 35
3.12 Une figure en regard d’un texte avec minipage
3.13 Faire couler le texte autour d’une image . . . 38
3.14 Multicolonnes 38
3.15 En-têtes et pieds de page 39
3.16 Orientation portrait ou paysage 40
3.17 Couleurs 40
3.18 Transformations sur du texte 41
3.19 Modifier la police 42
3.19.1 Avec MÈX ou PdfLXIËX 42
3.19.2 Avec XeM^X. 43

4 Créer un sujet d’examen 45


4.1 Problèmes et exercices 46
4.2 Barème 48
4.3 Solutions des exercices 48
4.4 Correction automatique de QCM

5 Composer un livre 55
5.1 Gestion des fichiers 56
5.2 Liens cliquables dans le fichier pdf
5.3 Notes en bas de page ou en marge
5.4 Références croisées 57
5.5 Style des chapitres et des sections . 58
5.6 En-têtes et pieds de page d’un livre
5.7 Sommaire 63
5.8 Bibliographie 65
5.9 Index 66
5.10 Flottants 67

6 Tableaux évolués 69
6.1 Modifier la taille des cellules 70
6.1.1 Modifier globalement la hauteur des lignes . . 70
6.1.2 Modifier globalement la largeur des colonnes
6.1.3 Modifier la hauteur d’une ligne particulière .
6.1.4 Modifier la largeur d’une colonne particulière
6.2 Fusion de cellules 71
6.2.1 Fusion horizontale . 71
Table des matières vii

6.2.2 Fusion verticale 71


6.2.3 Barre oblique dans une cellule 72
6.3 Définir la largeur du tableau 72
6.4 Définir un type de colonne 73
6.5 Couleurs dans un tableau 74
6.6 Tableaux de proportionnalité .... 75
6.7 Création assistée de tableaux .... 76

7 Tableaux de variations 77
7.1 Avec tabvar 78
7.2 Création assistée . . 80
7.3 Avec tkz-tab . . . . 80
7.4 Création assistée . . 83

8 Mathématiques 85
8.1 Deux modes pour écrire des mathématiques . 86
8.2 Fractions, indices, exposants et racines .... 86
8.3 Ecrire du texte dans un mode mathématique 87
8.4 Lettres grecques 87
8.5 Une sélection de symboles mathématiques . . 88
8.6 Une sélection de polices mathématiques . . . 88
8.7 Une sélection d’opérateurs mathématiques . . 89
8.8 Une sélection de fonctions mathématiques . . 89
8.9 Soulignements, surlignements et chapeaux . . 90
8.10 Délimiteurs élastiques 91
8.11 Alignement d’équations 91
8.12 Empilements 92
8.13 Systèmes, matrices et tableaux mathématiques 93
8.14 Écriture des nombres et des unités 94
8.15 Lemmes, théorèmes et corollaires 96
8.16 Opérations posées 98
8.17 Colorer et biffer 99
8.18 Assistants pour l’écriture de formules 99

9 Constructions géométriques avec PSTricks 101


9.1 Présentation de PSTricks ......................... . 102
9.2 La page A4 et le plan affine............................... . 102
9.3 Coordonnées cartésiennes ou polaires des points .
9.4 Géométrie plane : lignes et surfaces ................ . 103
9.5 Simplifier la contruction avec les nœuds .... . 105
9.6 Marquer des points, placer du texte ............... . 105
9.7 Marquer les dimensions..................................... . 107
9.8 Exemple récapitulatif commenté...................... . 108
9.9 Export GeoGebra.................................................. . 109
9.10 Constructions euclidiennes avec pst-eucl . . . . 110
9.11 Constructions avec multido............................... . 112
viii Table des matières

9.12 Coordonnées calculées en RPN . 113

10 Courbes avec PSTricks 115


10.1 Repères et axes gradués............................. . 116
10.2 Quadrillages................................................ . 118
10.3 Courbes...................................................... . 119
10.4 Courbes fabriquées de toutes pièces............. . 121
10.5 Intégration et sommes de Riemann............ . 121
10.6 Courbes polaires et paramétrées................. . 123
10.7 Histogrammes et représentations statistiques . 124
10.8 Un peu plus loin dans calcul avec RPN . . . . 125

11 Graphes et arbres avec PSTricks 127


11.1 Graphes........................................... . 128
11.2 Création assistée de graphes PSTricks . 130
11.3 Arbres............................................. . 131
11.4 Création assistée d’arbres PSTricks . . 132

12 Constructions géométriques avec TikZ 133


12.1 Présentation de TikZ...................................... . 134
12.2 La page A4 et le plan affine.......................... . 134
12.3 Marquer et nommer des points.................... . 135
12.4 Géométrie plane : lignes et surfaces ............ . 135
12.5 Simplifier les constructions avec coordinate . . 137
12.6 Coodonnées relatives .................................. . 137
12.7 Marquer les dimensions des segments . . . . . 138
12.8 Exemple récapitulatif commenté . 139
12.9 Export GeoGebra........................................... . 140
12.10 Constructions euclidiennes avec tkz-euclide . 141
12.11 La boucle foreach........................................ . 142
12.12 Transformations du plan avec scope............ . 143
12.13 Cordonnées calculées avec TikZ................. .. . 144

13 Courbes avec TikZ 145


13.1 Repères et axes gradués............................. 146
13.2 Quadrillages................................................ 148
13.3 Courbes..................................................... 149
13.4 Courbes fabriquées de toutes pièces............. 151
13.5 Surfaces délimitées par des courbes........... 151
13.6 Courbes polaires et paramétrées................. 153
13.7 Histogrammes et représentations statistiques 154

14 Graphes et arbres avec TikZ 155


14.1 Graphes............................................. . 156
14.2 Arbres............................................... . 159
14.3 Création assistée de graphes et d’arbres . 161
Table des matières ix

15 Chimie 163
15.1 Ecrire une réaction chimique .... 164
15.2 Dessiner des molécules 164
15.3 Représenter la verrerie de laboratoire
15.4 Ressources sur le Web 168

16 Physique 169
16.1 Circuits électriques avec pst-circ . 170
16.2 Circuits électriques avec circuitikz 172
16.3 Optique 173
16.4 Ressources sur le Web 174

17 Numérique et science informatique 177


17.1 Calculatrice 178
17.2 Tableur •..................................................... 179
17.3 Scratch 180
17.4 Python et autres langages 181
17.4.1 Présenter du code avec listings 181
17.4.2 Présenter du code avec minted 182
17.4.3 Exécuter du code Python avec pythontex 18
17.5 186
17.6 Algorithme en langage naturel 186

18 Présentation de diapositives avec Beamer 187


18.1 Les transparents d’une présentation . . . 188
18.2 Les couches d’un transparent 189
18.3 Equations et beamer 190
18.4 Graphismes et beamer 191

19 Commandes et environnements personnalisés 193


19.1 Commandes sans paramètres 194
19.2 Commandes avec arguments 195
19.3 Commandes avec argument optionnel 196
19.4 Environnements personnalisés 196

20 Programmation et calculs avec IAT&X 199


20.1 Boîtes et dimensions 200
20.2 Boîtes enregistrées réutilisables .... 202
20.3 Arithmétique avec cale 204
20.4 Structures conditionnelles avec if then
20.5 Nombres pseudo-aléatoires avec leg . 207
20.6 Calcul avancé dans DTjjX avec Python

Bibliographie 211

Index 213
hapitre 1
Installer un environnement... ou non

L’installation de l’environnement lATgX est utile pour pouvoir travailler en toute


tranquillité. Cependant depuis quelques années des environnements en ligne sont deve­
nus de plus en plus performants. Ils permettent de découvrir MgX en s’affranchissant
de cette étape d’installation parfois rebutante.

Fichier Editer Outils ÇiTeX Math Assistants bibliographie Utilisateur Affichage Options Aide

r, Fp Lmuic Newton
5 \section*{Isaac Newton} sir i>Mt
■ lit
<i >wvr lu a ■ .n a»» triri .*• *
HRlàin. ■[Link]. aOurMar .« anal*.
Ê \textbf{Slr Isaac Newton} (4 janvier 1643 -
I 31 mars 1727) est un philosophe,
mathématicien, physicien, alchimiste,
£ astronome et théologien anglais.
1 ...
; §5* \begin(center}\begln(tabular}(l}
fxincludegraphics ( scale*O. 3 1
(newton portrait.]pq) \\
\end{tabular}\end(center}
L \subsection*(Biographie}
Biographie

I
\subsubsection *{Jeunes se}

L'Angleterre n'ayant alors pas encore adopté rv a'&iM aka» {■


le Mtatf <fe r*— «*»
\htmladdnormalUnk{calendrler grégorien} I «k IWiaU [Link]' b A CUaq «la.

— {[Link] A «tw m Ar Creatu»

\%Ç3\%iA9go rlen }, I
la date de naissance d'Isaac Newton est i
enregistrée en date du 25 décembre 1642,
au manoir de Woolsthorpe près de Grantham, |
FiUe ____________ TyP*_ ._M]
/u*r/th»r»/texliv«/t«xmf-di»Vt*x/at«Kb*s«.'input«nc.*ly Warning tire 1 r
>. Waming line 35 Oi
Théorie» KÎmliBqur»

<4^U A ie Xtvfea B*ac«rwU w* k» Mmw—


X t*r ( r*<jc;<*.»>> «k» pWvumnvw L‘ un

* LOG FILE :
This <s XeTeX. Version 3.14159265-2.6-O.99998 (TeX Lrve 2017/Debianl
VViTurW— M /> Vl

(preloaded format*xelalex 2019 1.25) 1 AP R 2019 19 57


«nteHrg extendtd mode
UTF

Texmaker en action
2 Chapitre 1. Installer un environnement... ou non

1.1 Qu’est-ce qu’un environnement ?


Pour pouvoir travailler avec M]gX, on a besoin de nombreux éléments. D’abord le
programme T^X ou l’un de ses dérivés qui va compiler, c’est à dire transformer le code
source (un simple fichier texte) en un document avec une belle mise en forme qu’il est
possible de visualiser ou d’imprimer. Il faut ensuite que soient présents une collection
de modules, les packages, qui permettent d’enrichir les possibilités du programme
de base : insertion d’images, contruction de tableaux complexes, tracé de figures,
etc. Enfin, on a besoin d’un éditeur de texte spécialisé lAT^X car pour produire le
document, il faut rédiger un fichier texte brut, et il est plus agréable de faire cela
dans un environnement confortable.
Si vous êtes débutant et que l’installation vous inquiète, dirigez-vous vers la so­
lution sans installation décrite dans le paragraphe 1.3. Si, au contraire, vous voulez
vous lancer dans l’installation, sachez que celle-ci est grandement simplifiée par des
«distributions» DTgX qui proposent presque tout en un.

1.2 L’éditeur spécialisé


Écrire un document MfeX, c’est écrire du code. On peut bien entendu utiliser
n’importe quel éditeur de texte mais un éditeur spécialisé combine au moins quatre
avantages :
— des boutons de raccourci pour les commandes utiles ;
— la coloration des mots clés et commandes pour se repérer dans le code ;
— un bouton de raccourci pour lancer la compilation en un clic ;
— une présentation face à face du code et du document compilé.
En dehors des éditeurs en ligne (ne nécessitant donc pas d’installation) comme
celui de [Link], il existe des éditeurs à installer en plus de la distribution
M£X. On peut citer parmi les plus populaires :
— Texmaker (http : //www. xmlmath. net/texmaker/) qui a l’avantage d’être mul-
ti-plateformes (Windows, Mac et Linux)
— TeXnicCenter pour Windows ([Link]
— TeXShop pour Mac ([Link]
Dans cet ouvrage, on fera le plus souvent référence à Texmaker ou à l’éditeur
proposé par [Link]. Le choix d’un éditeur plutôt qu’un autre est bien sûr une
affaire de goût.

1.3 lAT^X sans installation avec [Link]


[Link], c’est une distribution DT^X complète avec un éditeur en ligne et
sans installation, directement dans votre navigateur, quelle que soit la plateforme :
Windows, MacOS, Android, etc. :
1. rendez-vous sur https : //www. overleaf. com pour se connecter ;
1.4 Installation sous Windows 3

2. créer un nouveau projet ;


3. rédiger et compiler un document !
Les documents qui sont rédigés sont enregsitrés sur la plateforme [Link]
(dans un cloud), ce qui permet de tous les retrouver où qu’on se trouve en se connec­
tant avec ses identifiants. C’est clairement la solution la plus simple pour débuter.

iiâÊU...J
27 La représentation graphique S\mathscr(C}_l$ de la
fonction sf 1$ dans le repère
<>

[Link])! est donnée
ci-dessous. O
28
! 29 \vspace{0.5cm>
30
31- \begln( ) -/
32 Xincludegraphic>(scale-0.6|(graphe3} 2
33 \end{ )
I
34
35 \vspace(8.5ca}
36
c ■
37 • \begin{ •■■■-}
38 \ltem Démontrer que, pour tout réel Sx, f_{l}(x>
■ \dfrac{\text{e}A{x}}{l ♦ \text(e}’{x}}$.
39 Site» On appelle Sf•_{!}$ la fonction dérivée de “T.:
$f (1}$ sur S\raathbb(R}$. Calculer, pour tout £-
réel $x,\: f_(l}(xlS.
40
■■
En déduire les variations de la fonction $f_{l}$
sur $\rathbb{R}$. - -CD
42 \itei» On définit le nombre SI ■
\displaystyle\lnt_je}'! 1_{!}(x)\:\text{d}x$.
43
44 Montrer que SI ■ \ln \left(\dfrac{l * ;
\text(e))(2)\rightll. Donner une Interprétation
graphique de $1$. n*m(
«a a • • «Ma» <
i
45 \end{. . [Link])
46
47

[Link] en action

Installation sous Windows


Deux distributions sont disponibles pour Windows : MiKTeX et TexLive. Les
différences entre les deux sont minimes et nous décrivons ci-dessous l’installation de
TexLive.
Sur le site [Link] rendez-vous dans la section consacrée
au téléchargement et exécutez le programme [Link] après l’avoir
téléchargé.
Conservez les choix par défaut, notamment l’installation complète, sauf si vous
savez exactement ce que vous faites. Plusieurs gigaoctets vont être téléchargés, alors
prévoyez quelques dizaines de minutes.
Il manque encore un éditeur DI^X, qui pourrait être TeXnicCenter ou TeXstudio.
Nous choisissons ici Texmaker ([Link]/texmaker/ ) : sur la page de télé­
chargement, récupérez la dernière version pour Windows au format msi. Double-cliquez
sur le fichier téléchargé et à la fin de l’installation, redémarrez votre ordinateur.
4 Chapitre 1. Installer un environnement... ou non

1.5 Installation sous MacOS


La distribution la plus classique sur Mac est MacTeX. Sur le site [Link]
[Link]/mactex/, rendez-vous dans la section consacrée au téléchargement et double-
cliquez sur [Link] après l’avoir téléchargé.
Après quelques minutes, l’installation est terminée, vous trouverez dans le dos­
sier Applications un sous-dossier TeX qui contient notamment l’éditeur TeXShop,
populaire chez les utilisateurs de Mac.
® TeX
•j * (h a V Q Rechercher
“vvnoxos------ :” V BibDesk
■ Plans
Lj Docs and Spell Utilities
L’J' Plugins
LaTeXiT
fi Préférences Système
à? TeX Live Utility
© PRNclient
Q QuickTime Player ET TeXShop

i Rappels
O Safari
; O Siri
i < SiteSucker
0 Skitch
■ V3 Smart Switch
. Q Sublime Text
□ TeamViewer
.J TeX
/ TextEdit
L The Unarchiver
; O Thunderbird TeXShop
: fi Time Machine Application - 58,5 Mo
fi Transfert d’images

Si vous souhaitez utiliser un autre éditeur que TeXShop, alors l’éditeur multiplate-
forme Texmaker ([Link]/texmaker/) constitue une excellente alternative.

1.6 Installation sous Linux


Comme d’habitude tout est simple sous Gnu/Linux. Si votre distribution est une
Debian ou Ubuntu, les commandes suivantes vont installer la distribution Texlive
complète et l’excellent éditeur Texmaker que vous n’aurez plus qu’à lancer pour com­
mencer à travailler.

$ sudo apt-get install texlive-full


$ sudo apt-get install texmaker

Texmaker n’est pas le seul éditeur disponible sous Linux. Parmi les plus populaires,
on trouve Kile ou Latexila généralement disponibles dans les dépôts usuels.
Chapitre

Découverte

On propose ici une découverte étape par étape pour comprendre comment créer
un premier document puis comment l’enrichir en découvrant des exemples complets
modifiables en ligne. Dans ce chapitre, vous trouverez également des techniques pour
résoudre les problèmes les plus fréquents.

\ document cl as s [a4paper] -{article}


\usepackage[utf8]{inputenc}
\usepackage[Tl]{fontenc}
Voici un document de base avec
< \begin<document} quelques packages chargés.
11'
Voici un document de base avec
* quelques packages chargés.

Le rôle de chaque ligne du préambule


Le rôle de chaque ligne du préambule
sera expliqué dans ce chapitre.
I
sera expliqué dans ce chapitre.
\end{document}
6 Chapitre 2. Découverte

2.1 Un exemple simple


Commençons par un premier exemple simple pour illustrer le principe de rédaction
d’un document suivi de sa compilation. Pour cela, Il faut commencer par créer un
nouveau projet.
Dans Texmaker, cliquer sur Fichier—* Nouveau puis saisir le texte suivant qu’on
pourra enregistrer ausitôt sous le nom [Link] (n’oubliez pas le « .tex »).
Dans [Link], cliquer sur le bouton vert New project et choisir Projet vide
et enfin remplacer le texte proposé par défaut par les quatre lignes du texte suivant.

r
1
2
3
4
\documentclass{article}
\begin{document}
Bonjour tout le inonde.
\end{document}
Bonjour tout le monde.

Commentons ce texte qu’on nommera code source.


Ligne 1 Un document DT^X commence toujours par la déclaration de la «classe de
document», ici, un article. C’est le modèle.
Ligne 2 \begin{document} indique le moment où commence le corps de notre futur
document : nous entrons dans l’environnement « document ».
Ligne 3 Maintenant que tout a bien été défini, on peut saisir le texte.
Ligne 4 Nous sortons de l’environnement « document ». Rien de ce qui suit cette
commande ne sera pris en compte par DT^X.
Pour lancer la compilation, appuyer sur la touche [Fl] dans Texmaker ou cliquer
sur le bouton S Recompile dans [Link]. Le résultat apparaît dans la fenêtre
de droite : on visualise le fichier pdf produit par la compilation.

Si vous avez saisi une phrase avec des caractères accentués à la place de la ligne
Q 3 proposée, il se peut que ces caractères aient disparu. Lisez les sections 2.6 et
2.3 pour comprendre pourquoi.

Le code source se divise donc en deux parties.


Le préambule qui est la partie au dessus de \begin{document}. On y place les
commandes qui décrivent le document ou procèdent aux réglages globaux. Il y
en aura bientôt beaucoup plus d’une ligne...(cf. 2.8).
Le corps qui est la partie entre \begin{document} et \end{document}. On y place
le contenu qui va s’afficher sur le document imprimable.
Tout ce qui commence par le symbole \ (backslash ou antislash) est une commande
interprétée par DT^jX. Ainsi, la commande \documentclass appliquée à article
demande au compilateur d’employer pour ce document le modèle usuel nommé article.
2.2 Occupez-vous du fond, DTgX gère la forme 7

2.2 Occupez-vous du fond, IATjpX gère la forme


Lors de la compilation DT^X va prendre en charge la mise en forme du document :
espacements horizontaux ou entre les paragraphes, césure des mots en fin de ligne,
etc. C’est bien mais c’est perturbant car le résultat de la compilation est en quelque
sorte... une surprise ! Observez l’exemple suivant :

\documentclass[a4paper,10pt]{article}
\begin{document}
Un mot
Un autre mot Un mot Un autre mot Encore
Encore un mot
un mot
C ' est C’est vraiment surprenant
\textbf{vraiment}
surprenant
\end{document}

Il y a une grande différence entre le code à gauche et le résultat de droite. Dans


un traitement de texte classique, quand on passe à la ligne, le texte démarre contre la
marge de gauche sur une nouvelle ligne. Pas ici : un bloc de texte non rompu par une
ligne vide est considéré comme un paragraphe et c’est DTgX qui gère lui-même les
retours à la ligne quand le texte atteint la marge de droite. Il y a ici deux paragraphes.
Autre différence avec un traitement de texte classique, pour mettre le mot «vrai­
ment» en gras, on utilise un mystérieux «\textbf {vraiment}». Explication : Le sym­
bole «\» (antislash) marque le début d’une commande, le mot qui le suit : «textbf»
correspond à la commande (textboldface pour texte en gras), enfin, les accolades
cernent les caractères à mettre en gras.
Voyons un second exemple.

\documentclass[a4paper,lOpt]{article}
\begin{document} Dans cet exemple, on voit qu’un •
Dans cet exemple, on voit qu'un

B
paragraphe commence par un re- i
paragraphe commence par un retrait
par rapport à la marge. trait par rapport à la marge.
Observons le mot anticonstitu- ;
Observons le mot anticonstitutionnellement. | tionnellement.;
\end{document}

Les multiples espaces entre «par» et «rapport» n’ont aucun effet. On voit que les
mots «retrait» et «anticonstitutionnellement» ont été automatiquement césurés, dans
les règles de l’art. De même un petit retrait par rapport à la marge a été ajouté au
début de chacun des deux paragraphes.
Ce qu’on voit lorsqu’on rédige le code source d’un document dans l’éditeur, est
très éloigné du résultat obtenu après compilation, on fait donc confiance : DT^X n’est
pas WYSIWYG (What You See Is What You Get). On s’y habitue, rassurez-vous !

On peut évidemment sauter des lignes ou ajouter des espaces horizontaux à


O l’intérieur d’un paragraphe, cf. 3.8.
8 Chapitre 2. Découverte

2.3 Gérer les problèmes d’accents


À la compilation
Si dans l’exemple précédent on remplace « Bonjour tout le monde » par « Bonjour
à tous », on constate que le « à » a disparu dans le document compilé. Pire : avec des
documents écrits sur d’autres ordinateurs, la présence d’accents peut faire échouer la
compilation qui bloque sur une erreur du type :

! Package inputenc Error: Unicode char \u8:Ûat not set


up for use with LaTeX.

Sans entrer dans les détails, il faut comprendre que DlgX et PdfDT£X ont besoin
d’être renseignés sur le format d’entrée et de sortie des caractères accentués. On devra
donc systématiquement ajouter les deux lignes suivantes dans le préambule :

s \usepackage[latinl]{inputenc}
\usepackage[Tl]{fontenc}

Attention : le choix latinl dépend de l’encodage du fichier. En cas de problème,


remplacez par utf 8 ou applemac si vous êtes sur Mac.

Pour une compilation XeDTgX, ces deux lignes ne sont pas nécessaires et les
O problèmes d’accents sont généralement bien moindres.

Dans le fichier source


Dans ce qui vient d’être dit, on partait du principe que dans le texte du fichier
source, les accents étaient en bon état et que les problèmes se posaient à la compilation.
Mais parfois, c’est dans le fichier source que les caractères accentués sont dégradés,
comme ceci : « ils Âotaient ». Encore une fois, c’est un problème d’encodage.
Si vous ne savez pas comment comment modifier l’encodage du fichier, vous pouvez
gagner beaucoup de temps en utilisant l’outil de recherche-remplacement de votre
éditeur.

Dans [Link] l’outil s’ouvre avec Ctrl+F ou 3€+F.


Dans Texmaker l’outil s’ouvre avec Ctrl+R ou

À© x

Replacer Ail

20 of 56

Récupérer tous les « é » en un clic


2.4 Les caractères réservés 9

2.4 Les caractères réservés


On l’a déjà dit, rédiger un document DT^X, c’est écrire un programme. Certains
caractères ont donc un sens particulier pour le compilateur. Ils sont peu nombreux,
en voici la liste exhaustive :
\ { } $ ~ & # - 7.
Lorsqu’on saisit un de ces caractère, il ne s’affiche pas dans le document produit
mais est interprété. Par exemple le caractère \ signifie le début d’une commande, le
caractère & signifie un changement de cellule dans un tableau, le caractère 7. indique
que ce qui va suivre est un commentaire, etc.
Pour effectivement écrire ces caractères, on doit les faire précéder du caractère
«\». On n’écrira donc pas :
Joe & Jack se partagent chacun 507. de 18$
mais plutôt :
Joe \& Jack se partagent chacun 50\7. de 18\$
Pour afficher le caractère backslash «\», on n’écrit pas \\ qui signifie un chan­
O gement de ligne mais \textbackslash.

2.5 Majuscules et minuscules


Pour DT^jX, il n’y a pas 26 lettres dans l’aphabet mais 52 puisque les majuscules
sont des caractères différents de leurs homologues minuscules. Un exemple embléma­
tique : le logo lAT^X. Pour obtenir ce logo, on utilise la commande \LaTeX qui n’est
ni Matex, ni \Latex.
En cas de confusion, le compilateur ne voit aucun rapport entre Mat ex et \LaTeX
et se contente d’un laconique «Undefined control sequence» : la commande mal
orthographiée est inconnue.

2.6 La compilation : lAT^X, Pdfl^TEXou XcL^Tj^X


La compilation est l’opération qui traduit le document texte contenant des com­
mandes en sa version imprimable.
Il existe de nombreux moteurs de compilation, tous basés sur Œ^X. Les plus utilisés
sont probablement M?gX, pdfLMÈX, et XeLMÈX. Dans leur immense majorité, les
commandes sont compatibles avec les trois mais on observe quelques différences.
Dans le schéma suivant, on part d’un fichier source nommé [Link], le but est
généralement d’obtenir un fichier résultat au format pdf. Selon le type de compilation
choisie, le schéma suivant montre comment les choses se passent.
10 Chapitre 2. Découverte

IATeX Dvips Ps2pdf

[Link] [Link]/) [Link] [Link]


pdfDTgX

XeDTEX

lAT^X est un des doyens. La plupart des documents qu’on trouve sur internet sont
comptables avec ce moteur. Problème : il n’accepte pas l’inclusion des images
aux formats classiques comme jpeg on png (cf. paragraphe 3.11) Par ailleurs, il
ne produit pas directement un fichier pdf, mais les éditeurs règlent généralement
ce problème en lançant la bonne série de commandes.
Le bon choix : si votre document ne contient pas d’images insérées, c’est un
bon choix. Veillez à ce que votre préambule contienne les lignes suivantes :
\usepackage[latinl]{inputenc} 7, latinl ou utf8 ou mactex
\usepackage[Tl]{fontenc}
\usepackage[french]{babel}

PdflATEX est proche de Il sait produire directement un fichier pdf lors de la


compilation et accepte les images aux formats classiques. Problème : il n’est pas
compatible avec PSTricks, un système permettant de produire des figures.
Le bon choix : si votre document doit inclure des images mais ne contient
pas de figures PSTricks, c’est un bon choix, veillez à ce que votre préambule
contienne les lignes suivantes :
\usepackage[latinl]{inputenc} 7, latinl ou utf8 ou mactex
\usepackage[Tl]{fontenc}
\usepackage[french]{babel}

On peut compiler des documents contenant des instructions PSTricks avec


PdfDTÈX en utilisant le package auto-pst-pdf (cf. [CTAN]) mais il faut
O que la commande pdf latex s’exécute avec l’option -shell-escape (Cf. 2.13)
ce qui n’est pas toujours possible notamment avec [Link].

XcIATeX est le plus récent. Comme PdfDTgX, il produit un pdf et accepte les images
classiques mais il sait aussi nativement gérer les caractères accentués (en fait tous
les caractères dans toutes les langues) et les polices de caractères. Problème : il
faut généralement faire quelques changements minimes dans le préambule des
documents trouvés sur internet.
Le bon choix : si votre document doit inclure des images et des figures PS­
Tricks, c’est un bon choix, veillez à ce que votre préambule contienne les lignes
suivantes :
\usepackage{fontspec}
\usepackage[trench]{babel}
2.7 Choisir le compilateur dans l’éditeur 11

2.7 Choisir le compilateur dans l’éditeur


La première qualité d’un éditeur spécialisé DTgX., c’est de proposer un bouton
permettant d’abord la compilation complète, celle qui génère un pdf, et ensuite la
visualisation de ce dernier.
Le choix des logiciels qui vont opérer se fait dans l’éditeur. Dans les copies d’écran
suivantes on choisit XeDTfÿC
Dans [Link] une fois dans le projet, cliquer sur le bouton (J Menu puis
sélectionner le compilateur Compiler XeLaTeX

Dans TeXShop il suffit de dérouler le menu , [ Typeset ] [ XeLaTeX £ |.


Dans Texmaker le plus simple est de modifier le comportement de la compilation
rapide. Pour cela, cliquer sur Options—♦ Configurer Texmaker puis l’onglet Com­
pil rapide. Chosissez alors la suite d’opérations qui vous convient.
1
Commande compilation rapide
| .---------------------------------
| PdfLaTeX 4-Voir PDF j

0 PdfLaTeX 4- Bib(la)tex + PdfLaTeX (x2) + Voir Pdf

Commandes p,~. LaTeX 4- dvips 4- ps2pdf + Voir PDF*]

O LaTeX 4- Bib(la)tex + LaTeX (x2) 4- dvips 4- ps2pdf 4- Voir Pdf

O LaTeX 4- Asymptote + LaTeX 4- dvips 4- Voir PS

O PdfLaTeX 4- Asymptote + PdfLaTeX 4- Voir Pdf

O LatexMk 4- Voir PDF


IWde
h* XeLaTeX 4- Voir PDF ]

O Lu a LaTeX 4- Voir PDF

O Utilisateur : (% nom fichier sans extension)

Editeur
(les commandes sont séparées par T>

Texmaker : Modification de la commande de compil rapide


Sur l’image ci-dessus, on reconnaît bien les étapes du schéma de la page précédente,
Texmaker y ajoute encore l’étape de visualisation du fichier pdf.
On comprend ici tout l’intérêt d’un éditeur spécialisé : une fois correctement confi­
guré, il va lancer toutes les commandes nécessaires de manière discrète.
Dans le paragraphe 2.13, on verra qu’il est possible de personnaliser les commandes
de compilation mais pour une première approche, les paramètres par défaut sont tout
à fait satisfaisants.

2.8 Un préambule «type»


La séparation du fond et de la forme est un des principes fondamentaux de LXIeX.
Le préambule est le lieu de tous les réglages du fond. On y charge les packages utiles,
on y définit les commandes personnalisées et on y redéfinit les valeurs par défaut.
12 Chapitre 2. Découverte

Il n’est pas question de réécrire une par une chaque ligne du préambule lorsqu’on
commence un nouveau document : on copie-colle! Il est ensuite facile d’ajouter ou
de supprimer des éléments. Pour un utilisateur régulier de lAT^X., le préambule type
dépasse allègrement les cinquante lignes : il s’est chargé, de nouveaux packages et de
nouvelles commandes au fur et à mesure des besoins et des années.
Dans leur immense majorité, les packages ne présentent pas d’incompatibilité,
ni de besoin particulier dans l’ordre de chargement. Cela permet de conserver des
lignes de préambule qui ne seront pas forcément utilisées, d’autant que les temps de
traitement en seront à peine augmentés, étant donnée la puissance des ordinateurs
modernes.
Voici une suggestion de préambule.

1 X Présentation générale et mise en page ;


2 \documentclass [a4paper , llpt]{article}
3 X Marges personnalisées (cf 3.7) :
4 \usepackage [left-lcm, right-lcm , top-2.2cm,bottom-1.9cm]{geornetry}
5 X Chargement automatique des packages selon le type de compilation :
6 \usepackage{iftex}
7 \ifXeTeX X Commpilation XeLaTeX (cf 2.6)
8 \usepackage{fontspec}
9 \else X Compilation (Pdf)LaTeX (cf 2.6)
10 \usepackage[latinl]{inputenc} X Latinl, utf8 ou mactex (cf 2.3)
11 \usepackage[Tl]{fontenc}
12 \fi
13
14 \usepackage{lmodern} X Police Latin Modem
I—.15 \usepackage{graphicx} X Pour insérer des images (cf 3.11)
5 16 \usepackage{amsmath,amsfonts} X Spécial math (cf 7.2)
u 17 \usepackage{amssymb,amsthm} X Spécial math (cf 7.15)
101118 \usepackage[french]{babel} X Typo. française (cf 3.3)
19 \setlength{\parindent}{Omm} X Pas de retrait de paragraphe
20
21 X En-tétes et pieds de pages personnalisés (cf 3.15)
22 \usepackage{[Link]}
23 \pagestyle{fancy}
24 \fancyhead[L]{Titre du document}
25 \fancyhead[R]{\today}
26 \setlength\headheight{14pt}
27 \renewcommand\headrulevidth{2pt}
28 \fancyfoot [C]{Page \thepage/\pageref{LastPage}}
29
30 \begin{document}
31
32 \end{document}

Les commentaires (tout ce qui suit le caractère 7. jusqu’à la fin de ligne) per­
O mettent de maintenir un préambule évolutif, car facile à relire.
2.9 Exemples de documents 13

2.9 Exemples de documents


2.9.1 Un premier exemple sérieux
C’est en lisant du code (et en le copiant) qu’on progresse. Voici donc un premier
exemple un peu sérieux et le code correspondant. On y trouve des changements sur la
police (cf. 3.1), des listes à puces (cf. 3.5) et l’utilisation de colonnes (cf. 3.14). Pour
toutes les autres références, consultez l’index alphabétique à la fin de cet ouvrage.
Modifiez et compilez cet exemple sur [Link]

1995
Liste de fournitures
Pour le bureau Pour l’ordinateur
— Pot à crayons — Boîte à disquettes
— Agrafeuse et agrafes — Boule de souris de rechange

1 \documentclass[a4paper,12pt]{article} X~~ Début préambule


2 \usepackage[utf 8]{inputenc}
3 \usepackage[Tl]{fontenc}
4 \usepackage[french]{babel}
5 \usepackage{adforn} X Ornements : \adfflatleaf...
6 \usepackage{multicol} X Colonnes
7 X~~ Fin préambule
8 \begin{document}
9
10 \begin{center}
11 \textbf{\LARGE \adffiatleafleft-1995-\adffiatleafright}
12 \bigskip
13
14 \textbf{\Large Liste de fournitures}
15 \end{center}

i
16
17 \begin{multicols}{2} X Début 2 colonnes
18 \textsc{\large Pour le bureau}
19 \begin{itemize}
20 \item Pot à crayons,
21 \item Agrafeuse et agrafes
22 \end{itemize}
23
24 \columnbreak X Force le changement de colonne
25
26 \textsc{\large Pour l'ordinateur}
27 \begin{itemize}
28 \item Boîte à disquettes
29 \item Boule de souris de rechange
30 \end{itemize}
31 \end{multicols} X Fin 2 colonnes
32
33 \end{document}
14 Chapitre 2. Découverte

2.9.2 Un devoir de sciences

Le code correspondant à l’exemple ci-dessous est présenté sur la page de droite.


On y trouve des mathématiques (cf. chapitre 8), une inclusion d’image (cf. 3.11), un
tableau (cf. 3.10) et même un en-tête (cf. 3.15). Pour toutes les autres références,
consultez l’index alphabétique à la fin de cet ouvrage.
Modifiez et compilez cet exemple sur https ://bit. ly/2ST78Sm

Épreuve de Bac Blanc

Exercice 1 6 points
On note, pour tout réel x
1
A(æ) = 1 + e-®

La représentation graphique Ci de la fonction fi dans le repère


(O,:,;) est donnée ci-dessous.

ai

il

ex
1. Démontrer que, pour tout réel =
1 + ex
2. On appelle f[ la fonction dérivée de /i sur R. Calculer,
pour tout réel x, f{(x).
En déduire les variations de la fonction /i sur R.

Exercice 2 5 points
Reproduire et compléter le tableau suivant en indiquant les
restes de la division euclidienne de 7n par 10.
n: 1 2 3 4 5 6 7 8
reste 7 9
2.9 Exemples de documents 15

1 \documentclass[a4paper ,llpt]{article}
2 \usepackage[left-2cm,right-3cm,top-3.2cm,bottom-2.9cm]{geometry}
3 \usepackage[utf 8]{inputenc}
4 \usepackage[Tl]{fontenc}
5 \usepackage{graphicx} X Pour insert* images
6 \usepackage{amsmath, amssymb, amsfonts} X Pour les maths
7 \usepackage[french]{babel} X Typo Française
8 \setlength{\parindent}{Omm} X Pas de retrait de paragraphe
9 \newcommand{\R}{\mathbb{R}} X L ' ens . des réels
10
11 \usepackage{fancyhdr} \pagestyle{fancy} X En-tete de page
12 \fancyhead[L]{Épreuve de Bac Blanc} X
13 \setlength{\headheight}{14pt} X épaiss. ligne en-tete
14
15 \begin{document}
16
17 XX =============»===========================
18 \textbf{\textsc{Exercice 1} \hfill 6 points}
19
20 On note, pour tout réel $x$
21 \[f_{l}(x) - \dfrac{l}{l + \text{e}*{- x}} \]
22 La représentation graphique $\mathcal{C}_{l}$ de la fonction $f_{l}$
23 dans le repère $(0,\vec\imath,\vec\jmath\,)$ est donnée ci-dessous.
24
25 \begin{center} X Début centrage
26 \includegraphics[scale-0.6]{graphe3} % Insertion image

Iïk \end{center} X Fin centrage

$29 \begin{enumerate}
1—130 \item Démontrer que, pour tout réel
31 $x, f_{l}(x) - \dfrac{\text{e}~{x}}{l + \text{e}“{x}}$.
32 \item On appelle $f'_{l}$ la fonction dérivée de $f_{l}$ sur $\R$.
33 Calculer, pour tout réel $x,\: f ' _{1}(x)$.\\
34 En déduire les variations de la fonction $f_{l}$ sur $\R$.
35 \end{enumerate}
36
37 \bigskip
38
39 XX ====«==========
40 \textbf{Exercice 2 \hfill 5 points}
41
42 Reproduire et compléter le tableau suivant en indiquant les restes
43 de la division euclidienne de $7~n$ par $10$.
44
45 \begin{center} X Début centrage
46 \begin{tabular}{|clc|c|clclclc|c|c|} X Définition tableau
47 \hline
48 $n$ : Ê 1 k2à344fc5&647à8\\
49 \hline
50 reste&749& $\cdots$& $\cdots$à $\cdots$k $\cdots$k $\cdots$& $\cdots$\\
51 \hline
52 \end{tabular}
53 \end{center} X Fin centrage
54
55 \end{document}
16 Chapitre 2. Découverte

2.9.3 Un cours de sciences

Le code correspondant à l’exemple ci-dessous est présenté sur la page de droite. On


y trouve des mathématiques (cf. chapitre 8), une structure avec des sections et sous-
sections (cf. 3.4), ainsi qu’une mise en forme des théorèmes et de leur démonstation
(cf. 8.15). Pour toutes les autres références, consultez l’index alphabétique à la fin de
cet ouvrage.
Modifiez et compilez cet exemple sur https : //bit. ly/2DLg8PX

4 Équation du mouvement d’une particule


4.1 Principe fondamental de la dynamique
En termes modernes, l’énoncé original de la deuxième loi de Newton s’ex­
prime sous la forme du théorème fondamental suivant :
Théorème 1 (PFD). Dans un référentiel galiléen, la dérivée de la
quantité de mouvement est égale à la somme des forces extérieures qui
s'exercent sur le solide.
Corollaire 1. Soit un corps de masse m (constante), en notant F< les
forces extérieures exercées sur Vobjet et a l'accélération de son centre
d'inertie, cela s'écrit

4.2 Équation dans un champ de pesanteur


On considère une particule ponctuelle de masse m dans un référentiel (ga-
liléen) cartésien à trois dimensions dans lequel la pesanteur g est orientée
suivant —uz.
Théorème 2. Si, par hypothèse, les forces de frottement sont négligées,
alors
= °;
d2x
m'd?=0; m'd^=0;
d2u d2z

Démonstration. La force /^) qui s’applique à cette particule au point


M est décrite par la relation : /(M) = P- Or P = mg donc, d’après le
PFD, on a f^ = m-a = mg. Le résultat se déduit de a =
2.9 Exemples de documents 17

1 \documentclass[a4paper,ilpt]{article}
2 \usepackage[left-2cm,right"3cm,top«3.2cm,bottom-2.9cm]{geometry}
3 \usepackage[utf 8]{inputenc}
4 \usepackage[Tl]{fontenc}
5 \usepackage{amsthm} % Pour écrire des démonstrations de thm
6 \usepackage[trench]{babel} 7. Typo. française
7 % Définitions d’environnements :
8 \newtheorem{thm}{Théorème} 7. thm pour un Théorème
9 \newtheorem{coro}{Corollaire} 7. coro pour un corollaire
10
11 \begin{document}
12
13 % Section : niv. 1
14 \section{Équation du mouvement d'une particule}
15
16 */,---------------------------------------------------------- Sous -section : niv. 2
17 \subsection{Principa fondamental de la dynamique}
18
19 En termes modernes, 11 énoncé original de la deuxième loi de Newton
20 s'exprime sous la forme du théorème fondamental suivant :
21
22 \begin{thm}[PFD]
23 Dans un référentiel galiléen, la dérivée de la quantité de mouvement
24 est égale à la somme des forces extérieures qui s'exercent sur le solide.
25 \end{thm}
26
27 \begin{coro}
28 Soit un corps de masse $m$ (constante), en notant $\vec{\mathrm{F}}_i$

1 29 les forces extérieures exercées sur l'objet et $\vec{a}$ l'accélération


30 de son centre d'inertie, cela s’écrit
31 \[ \sum_{i} \vec{\mathrm {F}}_{i} - m\cdot \vec{a} \]
32 \end{coro}
33
34 %--------------------------------------
— Sous-section : niv. 2
35 \subsection{Équatioi} dans un champ de pesanteur}
36
37 On considère une particule ponctuelle de masse $m$ dans un référentiel
38 (galiléen) cartésien à trois dimensions dans lequel la pesanteur
39 $\vec{g}$ est orientée suivant $-\vec{u_{z}}$.
40
41 \begin{thm}
42 Si , par hypothèse, les forces de frottement sont négligées, alors
43 \C
44 m.\frac {\mathrm d~{2}x}{\mathrm dt"{2}}-0 ;\quad
45 m.\frac {\mathrm d~{2}y}{\mathrm dt'~{2}}-0 ;\quad
46 m.\frac {\mathrm d~{2}z}{\mathrm dt'"{2}}--mg
47 \]
48 \end{thm}
49
50 \begin{proof}
51 La force $\vec{f}_{( M )}$ qui s'applique à cette particule au point $M$
52 est décrite par la relation : $\vec{f}_{(M)}“\vec{P}$.
53 Or $P ■ mg$ donc, d'après le PFD,
54 on a S\vec {f}_{(M)}-m\cdot{\vec {a}}"m\dot{\vec {g}}$.
55 Le résultat se déduit de
56 $\vec {a}-\frac {d \vec{v}}{dt}«\frac {d~{2}\vec{r}}{dt~{2}}$
57 \end{proof}
58
59 \end{document}
18 Chapitre 2. Découverte

2.10 Gérer ses fichiers


Un document DT^X n’est jamais seul. D’abord le fichier source (un fichier texte)
au format .tex fait peut-être appel à des images, qu’on stocke généralement au même
niveau que le fichier .tex. Ensuite, la compilation va produire un fichier pdf mais
pas seulement, on trouve aussi un fichier d’informations sur le déroulement de la
compilation (au format .log), un fichier temporaire au format .aux et sans doute
encore quelques autres...
Il n’est pas rare que pour produire un document d’une page à imprimer, on trouve
une dizaine de fichiers autour des fichiers tex et pdf.
Appelons projet l’ensemble des fichiers qui participent à la production d’un fichier
pdf. Sur un ordinateur, la question de la gestion des dossiers et des fichiers est une
affaire très personnelle cependant, il est généralement admis que le plus simple est
de créer un sous-dossier par projet. Les choses seront beaucoup plus claires que si les
dizaines de fichiers de projets différents coexistent dans un dossier commun.

Ces remarques concernent le travail sur un ordinateur avec une distribution


Q installée. Avec un compilateur en ligne comme [Link], la séparation des
projets est obligatoire et les fichiers temporaires sont cachés.

On reviendra sur ce thème de la gestion des fichiers dans le cadre de documents


volumineux (cf. 5.1).

2.11 Erreurs et warnings


Compiler un document, c’est soumettre son code source à une machine parfai­
tement rigoureuse qui n’accepte aucune erreur. Lorsque DT^X détecte un problème,
deux cas se présentent :

Warning la compilation note le problème dans le fichier .log, puis continue le trai­
tement du fichier source ;
Error la compilation a rencontré un problème fatal. Elle le note dans le fichier .log
et arrête immédiatement le taitement.

Lorsque MgX est exécuté en mode «non-stop», il traite jusqu’à la fin du fichier,
indépendamment des erreurs, ou jusqu’à ce qu’une limite soit atteinte. C’est le
O cas avec [Link], donc même si le code semble compiler, il faut toujours
surveiller l’apparition d’une pastille de notification rouge P au dessus de la
fenêtre de visualisation et traiter immédiatement les erreurs.

Les éditeurs DT^X modernes sont capables de repérer les mentions des erreurs
dans le fichier .log. Voici comment elles peuvent se présenter :
2.12 Débogage commenté : un exercice APMEP 19

\beqir {Itemize}
1 \iter Modifier pour que l'équation réduite s'afflci
■ \item Déterminer une équation cartésienne de la dr.
\end{ltenize}
| Jfojk The compiler is having trouble unders
File Type Une Message
> [Link] Error line 25 1 Undefined control sequence. \iten j VbF you hâve used. Check that the comm;
|? Undefined control sequence. ! C? Learn more
1.25 \iten
Modifier pour que l'équation réduite s'affiche
The control sequence at the end of the top line .V-..
of your error message was never '.def'ed. If you hâve
!i K-’ i i t~
CS3B Mlm CEO9 R«h< —J
Erreur dans Texmaker Erreur dans [Link]

1 ! Undefined control sequence.


2 1.25 \iten
3 Modifier l'équation réduite ...

La ligne 1 renseigne sur le type d’erreur : ici une commande inconnue. La ligne 2
donne le numéro de ligne où l’erreur s’est produite ainsi que l’élément qui pose pro­
blème : ici la ligne 25 contient une commande inconnue : \iten. C’est une faute
de frappe puisque c’est \item qui aurait dû être saisi (cf. 3.5). La ligne 3 donne la
suite du texte, après que l’erreur s’est produite. C’est une aide supplémentaire pour
localiser l’erreur dans la ligne. Une lecture attentive des messages d’erreur permet
généralement de corriger les problèmes.

— Compilez régulièrement. Ainsi, si une erreur apparaît, elle sera à chercher dans
la petite portion de code saisie depuis la dernière compilation.

— N’oubliez pas que le message d’erreur indique la ligne où se produit l’erreur : la


cause peut être en amont. Parfois beaucoup plus haut.

— Choisissez une taille de police suffisamment grande pour repérer les erreurs
classiques dans le code : { à la place de ( ou de [, 0 à la place de 0, etc.

2.12 Débogage commenté : un exercice APMEP

Pour proposer une mise en situation autour d’un travail de débogage de code
dont la compilation échoue, considérons le cas où le code d’un exercice a été
copié sur internet et collé dans un document sur lequel on travaille.
L’exercice présenté ici est tiré de la formidable base des annales de l’APMEP
(https : //www. apmep. f r/) qui propose des milliers d’exercices de mathématiques ni­
veau secondaire au format
20 Chapitre 2. Découverte

31 La courbe donnée en annexe est la représentation graphique dans le repère


32 \0ij de la fonction $f$ définie et dérivable sur l'intervalle [0-;~7]
33 d'expression :
34 \[f(x) - 2x \text{e}~{- x + 3}. \]
35
36 On rappelle que $f '$ désigne la fonction dérivée de la fonction $f$.
37
38 \begin{enumerate}
39 \iten Montrer que pour tout réel $x$ de l'intervalle [0-;~7],
40 $f'(x) - (- 2x + 2)\text{er{-x ♦ 3}$ .
41 \iteœ Étudier le signe de $f'(x)$ sur l'intervalle [0-;-7] puis
42 en déduire le tableau de variation de la fonction $f$
43 sur ce même intervalle.
44 \item
45 \begin{enumerate}
46 \iteœ Justifier que l'équation $f(x) = 10$ admet deux solutions
47 sur l'intervalle [0-;-7] que l'on notera $\alpha$ et $\beta$
48 avec $\alpha < \beta$.
49 \item On admet que $\alpha \approx 0,36$ à $10~{-2}$ près.
50
51 Donner une valeur approchée de $\beta$ à $10~{-2}$ près.
52 \end{enumerate}
53 \item On considère la fonction $F$ définie sur l'intervalle [0~;~7] par:
54 \[F(x) - 2x - 2)\text{e}~{-x + 3}.\]
55
56 \begin{enumerate}
57 \item Justifier que $F$ est une primitive de $f$ sur l'intervalle
58 [0-;-7].
59 \item Calculer la valeur exacte de l'aire, en unités d'aire, du
60 domaine plan délimité par les droites d'équation
61 $x ■ 1$,\: $x ■ 3$, l'axe des abscisses et la courbe $\mathcal{C}$.
62 \end{enumerate}
63 \item La fonction $f$ étudiée modélise le bénéfice d'une entreprise,
64 en milliers d'euros, réalisé pour la vente de $x$ centaines d'objets
65 ($x$ compris entre $0$ et $7$) .
66 \begin{enumerate}
67 \item Calculer la valeur moyenne du bénéfice, à l'euro près,
68 lorsque l'entreprise vend entre 100 et 300 objets.
69 \item L'entreprise souhaite que son bénéfice soit supérieur
70 à \np{10000} \euro. Déterminer le nombre d'objets possibles que
71 l'entreprise devra vendre pour atteindre son objectif.
72 \end{enumerate}
73 \end{enumerate}

Le code de l’exercice est placé dans un code source dont le préambule est celui
présenté en 2.8. La compilation échoue. Nous allons voir pourquoi mais avant cela, il
faut remarquer que l’exercice n’inclut pas de figure.
Dans les exercices de l’APMEP, les figures sont généralement programmées en
PSTricks (cf. chapitre 9) la compilation PdfDT£X est donc à éviter (cf. 2.6).
Si la figure était une image, il faudrait qu’elle soit disponible dans le projet autre­
ment dit qu’elle soit présente dans le dossier au côté du fichier source.
2.12 Débogage commenté : un exercice APMEP 21

La compilation indique quatre erreurs.

! Undefined control sequence.


1.32 . ..ésentation graphique dans le repère \0ij
de la fonction $f$ défin...

Une commande inconnue est détectée ligne 32 : \0ij. C’est une commande person­
nelle de l’auteur de l’exercice, il faut donc chercher dans le préambule du document
original. On trouve la définition
\def\Oij{$\left(\text{0}~;~\vect{\imath},~\vect{\jmath}\right)$}
qu’il faut donc ajouter aussi au préambule, mais la compilation échoue toujours car
la définition de \0ij fait elle-même appel à une autre commande personnelle pour
placer une flèche au dessus d’un vecteur :
\newcommand{\vect} [1] {\overrightarrow-{\ , \mathstrut#l\,}}

! Package inputenc Error: Keyboard character used is undefined


(inputenc) in inputencoding 'latinl'.
See the inputenc package documentation for explanation.
Type H <return> for immédiate help.

1.41 \item É

Deuxième erreur ligne 41 : le problème vient du caractère «É» qui n’est pas reconnu
par «latinl». La solution la plus simple serait ici de changer de compilateur pour passer
à XeLMfeX (cf. 2.7 et 2.3)

! Undefined control sequence.


1.70 ... que son bénéfice soit supérieur à \np
{10000} \euro.

Troisième erreur ligne 70 : la commande \np est inconnue. En regardant le pré­


ambule du document original, on repère \usepackage[np]{numprint} qui permet
d’utiliser la commande \np pour afficher les nombres dans les règles de l’art typogra­
phique (cf. 3.3).

! Undefined control sequence.


1.70 ...éfice soit supérieur à \np{10000} \euro

Dernière erreur ligne 70 : la commande \euro est inconnue. Elle est définie par le
préambule original comme \newcommand{\euro)-{\eurologo{}} mais la compilation
échoue toujours malgré cette ligne en plus dans le préambule. Une petite recherche
sur Internet propose le code suivant à placer dans le préambule :
\usepackage{textcomp}
\newconnnand{\euro}{\texteuro{}}
Le travail de débogage prend parfois du temps mais il fait progresser car on ap­
prend toujours des erreurs. Les erreurs sont souvent les mêmes et avec l’habitude, les
débusquer devient plus facile.
22 Chapitre 2. Découverte

2.13 Options avancées de compilation


Les commandes lancées par l’éditeur peuvent être personnalisées et chargées d’op­
tions. On décrit ici des réglages avancés qui peuvent tout à fait être omis en première
lecture.

Configurer les commandes

Commandes (% : nom fichier sans extension - © : numéro ligne)

LaTeX [latex -interaction=nonstopmode %.tex


J 15.1
PdfLaTeX Ipdflatex -synctex=l -interaction=nonstopmode %.tex ; O:
O Utiliser un sous-répertoire "build* pour les fichiers de sortie

XeLaTeX «latex -synctex=l -interaction=no^ | B j Lua LaTeX [-interaction=nonstopmode %.tex[ i D |

i Latexmk nonstopmôdêr -pdf %-texj ® 1Afficheur Dvl

Compil rapide
Bib(la)tex zzzjçpjlh évincé %.dvi ][d|I
[Link]
Makeindex 1 makeindex %.idx j!B Ij

dvips jdvips -o %.ps %.dvi j fÔ i i _________ Afficheur Ps

Dvipdfm i ® I i levince %p,_


ps2pdf -------------- Zj® Afficheur Pdf
s ^interaction nonstopmode j ! D i ■ j Affjcheur pdf interne
metapost
i Editeur
i
; Asymptote ■,asy %.asy| • B . j [ (y Intégré à la fenêtre
I
ghostscript gs J' .1 | C Afficheur Pdf externe
I
’R CMD Sweave %.Rnw J ! BJ ' [évincé %.pdf
[Link] ][E
I | Options pour Ip (impression)
f. : Nettoyer les fichiers auxiliaires en quittant
Raccourcis ■

I : (-Q fitplot|
Ajouter au PATH ; j

I XÇancel || |

Texmaker : Configurer les commandes

Dans la fenêtre ci-dessus ( Options—* Configurer Texmaker), chaque commande


peut être personnalisée avec des options parmi, notamment :
-----interaction=nonstopmode autorise le compilateur à continuer la compilation
en cas d’erreur (si c’est possible).
-----synctex=l permet de synchroniser la fenêtre d’édition et celle du visualiseur.
On peut alors cliquer sur le une zone du résultat pdf pour que l’éditeur se centre
sur le code correspondant et vice-versa.
----- shell-escape autorise les appels à des commandes depuis le code. C’est par
exemple le cas avec le package minted (cf. 17.4.2) qui demande à exécuter
Python. Cette option ne devrait être active que pour des documents et des
packages dignes de confiance.
2.13 Options avancées de compilation 23

Le nom du fichier courant sans extension étant accessible avec le caractère %,


si on souhaite que la commande pdf latex s’exécute sur un code source avec le mode
shell-escape, on remplacera donc la commande
pdflatex -synctex=l -interaction=nonstopmode %.tex
par
pdflatex -synctex=l -interaction=nonstopmode -shell-escape %.tex

Chaîner les commandes


On peut même aller plus loin pour simplifier les compilations multiples ou fai­
sant appel à des programmes externes (cf. références croisées 5.4, sommaire 5.7 ou
bibliographie 5.8).
Dans Texmaker, on peut créer une commande utilisateur pour automatiser une
suite de commandes. Cliquer sur Utilisateur puis Commandes utilisateur et Editer
commandes utilisateur.
Prenons l’exemple de la création d’index (cf. 5.9). Pour que les commandes \index
donnent le résultat attendu, c’est à dire permettent de générér un index avec des mots-
clé se référant aux bonnes pages, il faut lancer successivement :
1. la commande latex (ou pdflatex ou xelatex) sur le fichier source .tex;
2. la commande index sur le fichier .idx;
3. la commande latex (ou pdflatex ou xelatex) sur le fichier source .tex.
On pourra créer une commande nommée « latex4-index» dont la commande com­
plète sera la suivante dans laquelle le symbole | permet de séparer les commandes les
unes des autres :
latex -interaction=nonstopmode %.tex|makeindex %.idx|latex synctex=l %.tex

w
J

■tex+index &-?3
j Item menu |latex+index
I Command 2 :
j Command 3 : Commande (% : nom fichier sans extension)
Command 4 : j ‘dex %.idx|latex -interactionsnonstopmode %.tex ! [ g assistant |
Command 5 :
■ (les commandes sont séparées par T)

J
j Xcaniel' | ^OK j

Texmaker : Créer une commande personnalisée

Pour simplifier le travail de création de la commande, Texmaker propose même un


assitant dans lequel on ajoute simplement les commandes les unes après les autres.
Nous verrons un autre exemple de création de commande utilisateur dans le pa­
ragraphe sur Pythontex (cf. 17.4.3).
Chapitre

Les indispensables pour composer un


document

Pour obtenir un document agréable à lire et de qualité, DTpX répond à toutes les
exigences : alignements rigoureux, contenus structurés, gestion précise des inclusions
d’images, etc. Dans ce chapitre, vous trouverez le nécessaire pour maîtriser la mise
en page des travaux de taille moyenne : cours, rapports, devoirs. Les outils pour créer
un ouvrage plus volumineux comme un livre ou une thèse sont traités en 5.10.

\noindent
PythagVoras \hfill 500 Avant J.-C.W
SamosW Pythagoras 500 Avant J.-C.
Grèce Samos !
Grèce
\bigskip

Cher M.-Knuth, Cher M. Knuth,


Je vous remercie chaleureuse­
H Je vous remercie chaleureusement
pour votre travail sur \TeX.
ment pour votre travail sur TeX.
ex La présentation de mes travaux La présentation de mes travaux
sur la quadrature du cercle sur la quadrature du cercle est
est bien meilleure que sur les bien meilleure que sur les an­
anciennes tablettes de cire.
ciennes tablettes de cire.
\begin{flushright}
Amicalement, Amicalement,
Pythagore
Pythagore
\end{flushright}
26 Chapitre 3. Les indispensables pour composer un document

3.1 Taille et style de texte


La taille de la police par défaut se définit comme une option de la commande
\documentclass dans le préambule. Ainsi pour composer un texte en taille de police
12 sur du papier A4, on aura sur la première ligne du préambule :

\documentclass[a4paper,12pt]{article}

Par défaut, seules les tailles 10 pt, 11 pt et 12 pt sont acceptées.


Si une taille supérieure est vraiment nécessaire, on peut ajouter
O \usepackage [20pt] {\extsizes}. Les tailles 8pt, 9pt, 14 pt, 17 pt et 20 pt,
sont ainsi utilisables.

Une fois la taille par défaut décidée, on peut augmenter ou diminuer celle d’un
groupe de mots particulier cerné par des accolades.

{\tiny -minuscule} minuscule {\Large ...plus grand} plus grand


{\scriptsize -très petit} très petit
{\f ootnotesize -assez petit} assez petit {\LARGE -très grand} très grand
{\small -petit} petit
{\normalsize -normal} normal <\huge -énorme} énorme
{Marge -grand} grand
{\Huge ...géant} géant
On peut aussi modifier le style de la police.

normal Ceci est un Exemple.


\emph{-} emphasised Ceci est un Exemple.
\textsl{„.} ou {\slshape ...} slanted Ceci est un Exemple.
\textbf{...} ou {\bf sériés ...} bold face Ceci est un Exemple.
\textsc{...} ou {\scshape ...} SMALL CAPITALS Ceci est un Exemple.
\textsf{-} ou {\sffamily ...} sans sérif Ceci est un Exemple.
\texttt{...} ou {\ttfamily ...} typewriter Ceci est un Exemple.

On peut s’amuser avec les styles et les tailles, tous compatibles entre eux.

H)
g)|Un \textbf{texte} très {\tiny bizarre}
et \texttt{\large pas joli}.

L’exemple suivant est équivalent.


Un texte très bizarre et p 3.S j O 11.

I Un {\bfseries texte} très {\tiny bizarre}


et {\ttfamily Marge pas joli}. Un texte très bizarre et JD3.S j Olî.
3.2 Alignement du texte 27

3.2 Alignement du texte


Par défaut, le texte d’un paragraphe est justifié, cependant on peut le pousser à
gauche (f lushleft), le centrer (center) ou le pousser à droite (flushright) :

Lorem ipsum dolor sit [...]


risus. Suspendisse Lorem ipsum dolor sit amet, consectetuer
adipiscing élit. Sed non risus. Suspendisse
\begin{flushleft}
tortor, dignissim [...] dolor.
Cras elementum tortor, dignissim sit amet, adi,
[i] \end{flushleft} ultriciesedori. Cras elementum

111
eu \begin{center}
diam. Maecenas ligula
\end{center}
[...] non, mi .
diam. Maecenas ligula massa, varius,
semper congue, non, mi.

\begin{flushright} Orci nec nonummy molestie, enim


Orci nec nonummy [...] Duis semper. eleifendae. Duis semper.
\end{flushright}

3.3 Typographie française


Afin d’adapter LM£X aux règles typographiques locales (espaces insécables, retraits
de paragraphes, style des marqueurs de listes, etc.), on activera systématiquement le
package babel.
L’activation de packages fait partie de la philosophie IATjtX qui n’est pas un sys­
tème prêt à l’emploi : l’utilisateur personnalise son environnement en fonction de ses
besoins. En tant que français désirant imprimer sur du papier au format A4 avec
une police en taille 10, des documents de longueur moyenne, les deux lignes suivantes
feront systématiquement partie de notre préambule :

E \documentclass[a4paper,lOpt]{article}
\usepackage[trench]{babel}

Avec XelAT^X, babel a besoin du package fontspec qui doit donc être ajouté :
O \usepackage{fontspec}.

Voici quelques règles usuelles et la manière de les respecter en utilisant les com­
mandes LMP^X de babel.

Code Résultat_________ Code______ Résultat


M\up{me} Mme madame M\up{elle} Me,Ic mademoiselle
M\up{e} Me maître M. M. monsieur
l\ier 1er premier l\iers 1ers premiers
2\ieme 2e deuxième 2\iemes 2es deuxièmes
\no 2 n°2 numéro \No 2 N°2 Numéro
\og « ouvrez guillemets Vg » fermez guillemets
90\degres{} 90° degrés \dots ... points supension
28 Chapitre 3. Les indispensables pour composer un document

Le package babel s’occupe de traduire de nombreux mots ou expressions clés. Par


exemple, grâce à lui, la commande \today affiche la date du jour en français.

\today 25 décembre 2019

Pour un affichage dans les règles des grands nombres et des nombres à virgule,
on peut utiliser le package numprint. Pour gagner du temps et éviter de taper la
commande de mise en forme \numprint, on charge le package avec l’option np qui
permet d’utiliser le raccourci \np

I
g \usepackage[np]{numprint} 1234567 890
* \np{1234567890}\\
g| \np{12345.67890} 12 345,678 90

On verra en 8.14 que le package siunitx permet aussi la mise en forme des
O nombres mais surtout de leurs unités de façon plus stricte que numprint.

3.4 Structurer un document


On dispose sous MgX de commandes permettant de structurer les documents.
Toutes ces commandes génèrent des titres numérotés. Pour des entrées non numéro­
tées, on utilise leur version étoilée avec ♦ comme le montre l’exemple ci-après.
Commande Signification
\part{titre} partie
\chapter{titre} chapitre1
\section{titre} section
\subsection{titre} sous-section de niveau 1
\subsubsection{titre} sous-section de niveau 2
\paragraph{titre} sous-section de niveau 3
\subparagraph{titre} sous-section de niveau 4

Préambule

8
\section♦{Préambule}
\section{Électricité} 2 Électricité
\subsection{Tension}
\subseetion{Intensité}
2.1 Tension
2.2 Intensité

Une telle structuration du document permet de produire un sommaire automa­


O tiquement (cf. 5.7).

1. Disponible seulement avec \documentclass{report} ou \documentclaiss{book}.


3.5 Listes à puces, numérotées ou descriptives 29

3.5 Listes à puces, numérotées ou descriptives


DT^X permet d’écrire des listes à puces, numérotées ou descriptives et on peut
évidemment imbriquer ces listes entre elles (conseil : indenter les blocs avec des espaces
pour faciliter la lecture).

a \begin{itemize}
\item Premier tiret.
\item Deuxième tiret.
\end{itemize}

\begin{enumerate}
\item Premier point.
— Premier tiret.
— Deuxième tiret.

1. Premier point.
\item Deuxième point.
2. Deuxième point.
\end{enumerate}

cr \begin{description}
\item[Un] : premièrement. ! Un : premièrement.
S \item[Deux] deuxièmemement.
\end{description}
' Deux : deuxièmemement.

\begin{enumerate}
\item Un document \LaTeX{} est :
\begin{enumerate} 1. Un document DTgX est :
\item rigoureux ;
(a) rigoureux ;

B
\begin{enumerate}
\item dans sa structure ; i. dans sa structure ;
\item dans son rendu ;
\end{enumerate} ii. dans son rendu ;
\item pas si compliqué ! (b) pas si compliqué !
\end{enumerate}
\end{enumerate}

Grâce au package paraiist (cf. [CTAN]), on peut contrôler la mise en forme des
items d’un environnement de liste.

\setdefaultleftmargin{dl}{d2}{d3}{d4}{d5}{d6}

Les longueurs dl à d6 règlent la taille des indentations de chaque niveau.

\setdef aultenum{slXs2Xs3Xs4}

Pour les variables si à s4 qui définissent le style d’énumération des quatre premiers
niveaux, on peut choisir n’importe quelle chaîne de caractères sachant que 1, A, a, i
et I déterminent le type d’énumération.
1 -> 1,2,3,... A — A,B,C,... a —♦ a,b,c,... i -> i,ii,iii,... I — 1,11,111,..

Ainsi, (A) deviendra tour à tour, (A) puis (B), puis (C), etc.
Si on écrit Question A., le «i» de question sera interprété comme type d’énu­
O mération. On écrira plutôt {Question} A pour éviter cela.
30 Chapitre 3. Les indispensables pour composer un document

Dans l’exemple qui suit, on règle la numérotation et la longueur des retraits des
trois premiers niveaux des environnements de liste.

\usepackage{paralist}
\setdefaultenum{A.}{(!)}{--a--}{}
\setdefaultleftmargin{2em}{lem}{0.5em}{}{}{}
\begin{enumerate}
\item Un document \LaTeX{} est : A. Un document est :
$ \begin{enumerate}
\item rigoureux (1) rigoureux
\begin{enumerate} -a- dans sa structure
\item dans sa structure
\end{enumerate}
\end{enumerate}
\end{enumerate}

Par ailleurs, paralist permet de défnir localement les puces pour les listes non
numérotées comme on le voit dans l’exemple suivant.

\usepackage{paralist}
\usepackage{amssymb}
® \begin{itemize}[$\Box$]
□ Choix 1
h
? \item Choix 1 □ Choix 2
p \item Choix 2
\item [\checkmark] Choix 3 / Choix 3
\end{itemize}

Le package tasks permet de gagner de la place en disposant les listes en colonnes.

\usepackage{tasks}
Les halogènes

I
\begin{tasks}(4)
\task F Les halogènes
\task Cl
\task Br
a) F b) Cl c) Br d)I
\task I
\end{tasks}

Avec tasks, on peut même faire des QCM très facilement (cf. [CTAN]).

\usepackage{tasks}
Cochez les gaz rares

1 Cochez les gaz rares


\begin{tasks}[style-multiplechoice] (2)
\task Hydrogène
\task Hélium □ Hydrogène □ Hélium
\task Oxygène □ Oxygène □ Néon
\task Néon
\end{tasks}
3.6 Les longueurs clans lAT^X 31

3.6 Les longueurs dans RTgX


Que ce soit pour la largeur des marges ou la taille du texte, MgX sait gérér
plusieurs unités de longueur parmi lesquelles on distingue des longueurs :
absolues mm, cm ou pt : unité de longueur typographique utilisée par exemple pour
la taille des caractères 10 pt ou 12 pt et dont l’unité vaut environ 0,35 mm.
relatives à la taille choisie pour la police : em et ex. 1 em correspond plus ou moins
à la hauteur d’un Ç et 1 ex est la hauteur du caractère x.

3.7 Régler la taille des marges


Il est possible de régler les dimensions de la page en jouant avec des commandes
du type \setlength, mais il est souvent plus simple d’utiliser le package geometry.
On peut ainsi régler la longueur des quatre marges :
\usepackage [left=2cm,right=3cm,top=l. 5cm,bottom=l. 5cm] {geometry}
ou bien fixer la taille du corps de texte et sa postion par rapport aux marges du haut
et de gauche :
\usepackage[width=130mm,height=325mm,left=4cm,top=31mm]{geometry}
Le schéma ci-dessous présente quelques-unes des options acceptées par geometry.
Les notions de Header et Footer sont abordées dans la section 3.15 sur les en-têtes et
pieds de page, la notion de Marginal note dans la section 5.4 sur les notes en marge.

top
Header headheight
headsep

height
Body
I

footskip
Footer
bottom marginparwidth
marginparsep
left width right

Pour visualiser les marges comme ci-dessus, on peut activer en plus l’option
O showframe. Par exemple \usepackage[left=lcm,showframe]{geometry}
32 Chapitre 3. Les indispensables pour composer un document

3.8 Espacements, interlignes et sauts


Même s’il vaut mieux laisser à DTgX le soin de gérer la présentation, il est parfois
utile de pouvoir forcer un espacement horizontal ou vertical.

Commande Signification_______ Code exemple Résultat


\! espace fine négative a\!b ab
sans espace ab ab
\, demi-espace insécable a\,b ab
U espace normale a b ab
espace insécable a~b ab
\quad grande espace a\quad b a b
\qquad double grande espace a\qquad b a b

Pour les espacements verticaux on a \smallskip, \medskip et \bigskip.

D.-Knuth \qquad Créateur de \TeX.

I
D. Knuth Créateur de T^X.
\blgskip
Leslie Lamport Auteur de lATgX.
Leslie-Lamport \quad Auteur de \LaTeX.

Pour les espacements personnalisés, on dispose de deux commandes : \hspace pour


l’espace horizontal et \vspace pour l’espacement vertical entre deux paragraphes.
Enfin, on peut placer des espacements de taille personnalisée avec un filet horizontal
avec \rule ou en pointillés avec \dotf ill inclus dans une boîte \makebox :

Espace \hspace{2cm} de 2\,cm.\\ Espace de 2 cm.


Espace \rule{2cm}{0.2pt} de 2\,cm.\\ Espace de 2 cm.

g Espace \makebox[2cm]{\dotf111} de 2\,cm.

m \vspace{lcm}

Et nous voici l\,cm plus bas.


Espace de 2 cm.

Et nous voici 1 cm plus bas.

Les espacements horizontaux peuvent aussi être élastiques pour remplir harmo­
nieusement la ligne de texte avec les commandes \hf ill, \hrulefill et \dotf ill.
0/2 \hfill 1/2 \hfill 2/2\\
0/2 1/2 2/2

S
0/3 \hfill 1/3 \hfill 2/3\hfill 3/3
0/3 1/3 2/3 3/3
A\dotfill B
A.. ..B
\hrulefill-X-\hrulefill X

De la même manière, la commande \vf ill permet de remplir la page verticalement


avec des espacements élastiques entre les paragraphes.
Pour modifier durablement l’interlignage, disons 1.5, on peut saisir la commande :

\setlength{\baselineskip}{!. 5\baselineskip}
3.9 Encadrements 33

Cette commande peut être placée dans le préambule, elle s’appliquera alors à l’en­
semble du document. Si elle est placée dans le corps d’un document, elle s’appliquera
au texte qui la suit.
Concernant les sauts de page, WrX propose trois commandes :
\newpage qui commence une nouvelle page ;
\clearpage qui commence aussi une nouvelle page mais force les flottants en attente
à apparaître ;
\pagebreak qui encourage le compilateur à se comporter comme si le bas de la page
était atteint. Le texte précédent va donc être réparti harmonieusement sur la
page en laissant autant d’espaces verticaux que nécessaire entre les paragraphes.

3.9 Encadrements
3.9.1 Encadrer quelques mots
Le package f ancybox propose, entre autres (cf. [CTAN]), les commandes \fbox,
\shadowbox, \doublebox et \ovalbox pour créer des boîtes encadrées.

I Voici fbox en action ,


\usepackage{fancybox}
shadowbox en action |

B
Voici \fbox{fbox en action},\\
voici \shadowbox{shadowbox en action},\\ Voici —Ml
voici \doublebox{doublebox en action},\\ voici | doublebox en action |,
voici \ovalbox{ovalbox en action}.
I voici ovalbox en action).

La commande suivante crée une boîte horizontale encadrée

\framebox[largeur][pos texte]{texte}

\framebox [4cm]{texte centré} _____ texte centré_____

SI \framebox [4cm] [l]{à gauche (Left)}

\framebox [4cm][r]{à droite (Right)}


à gauche (Left)
à droite (Right)

Pour encadrer en utilisant les commandes de f ancybox, on peut aussi créer un


boîte non encadrée avec la commande \makebox, que l’on encadre ensuite.

\makebox[largeur] [pos texte]{texte}

r^"| \usepackage{fancybox}
g \ovalbox{\makebox[4cm]{texte 1}}
texte 1

III \doublebox{\makebox[4cm][l]{texte 2}}


!|texte 2
i —
34 Chapitre 3. Les indispensables pour composer un document

Plutôt que des longueurs absolues, on peut demander à DTgJC de travailler en


fonction de la longueur de la ligne courante dont la valeur est donnée par la commande
\linewidth. Dans l’exemple ci-dessous, le texte 1 sera placé dans une boîte dont la
longueur est celle de la ligne. Le texte 2 sera placé dans une boîte dont la longueur
est 75 % de la longueur de la ligne.
\fbox{\makebox[\linevidth][l]{texte 1}}

I
texte 1
\begin{center}
\fbox{\makebox[0.75\linewidth]{texte 2}}
texte 2
\end{center}

Ce type de boîte n’est pas sécable et ne permet pas d’encadrer un texte pouvant
O s’étendre sur plusieurs lignes, encore moins sur plusieurs pages.

3.9.2 Encadrer un texte


Pour défnir de jolies boîtes, le package tcolorbox (cf. [CTAN]) est très riche. Il
permet de construire des boîtes complètement personnalisées, capables de contenir du
texte, des images ou des formules mathématiques. De plus elles peuvent s’étendre sur
plusieurs pages ou plusieurs colonnes.

\usepackage{tcolorbox}

1
w \begin{tcolorbox} Une boîte tcolorbox avec
Une boîte tcolorbox
avec du texte dedans du texte dedans
\end{tcolorbox}

Les options entre crochets permettent de régler l’allure des boîtes.

\usepackage{tcolorbox}
Encore une boîte
\begin{tcolorbox} [widthss4cm ,boxrule»0.5pt] tcolorbox
__ Encore une boîte tcolorbox
£ \end{tcolorbox}
•nlmpoi qrfî.yfV-. J
R \begin{tcolorbox}[title3Important]
Dans les options, on peut aussi Dans les options, on peut
choisir la couleur du cadre. aussi choisir la couleur du
\end{tcolorbox}
cadre.

3.10 Tableaux simples


Pour créer des tableaux, on utilise l’environnement tabular pour lequel on spécifie
le nombre de colonnes en précisant l’alignement de chacune d’elles grâce aux lettres
1, c ou r respectivement pour left, center ou right. Les cellules sont séparées par & et
la fin d’une ligne est signifiée par \\ :
3.11 Insertion d’images 35

\begin{tabular}{lcr}
x: Cell 1-1 & Cell 1-2 t Cell 1-3 W Cell 1-1 Cell 1-2 Cell 1-3
a* C 2-1 C 2-2
o C 2-1 à cC 2-2
2-2 h& C 2-3 \\ C 2-3
3-1 ft 3-2 &&
3-2 3-3 W 3-1 3-2 3-3
\end{tabular}

Même si le tableau a des cellules vides, le nombre de & doit être le même pour
chaque ligne. Dans l’exemple précédent, si on voulait retirer 3-2 et 3-3, on
écrirait : 3-1 & & \\

On peut bien entendu insérer des séparateurs pour délimiter les cellules :
— entre les colonnes avec le caractère «I» (AltGr+6 ou Alt+Maj+L) entre les dé­
finitions des colonnes,
— entre les lignes avec \hline pour insérer une horizontal line.

\begin{tabular}{| r I c 111 }
\hline
Wolfgang & Mozart & Salzbourg W Wolfgang Mozart Salzbourg i
\hline
Claude & Debussy & Paris w Claude Debussy Paris
\hline
\end{tabular}

À la place de \\, on trouve parfois la commande \cr qui est une primitive
TgX de création de sauts de ligne. Les messages d’erreur sur la composition de
tableaux y font parfois référence.

3.11 Insertion d’images


Pour inclure une image dans un document le package graphicx (cf. [OTAN])
possède des options intéressantes. Mais une remarque d’abord : le choix du compila­
teur est important.
IATgX n’accepte que des fichiers de type EPS (Encapsuled PostScript) qui possèdent
des infos précisant leur taille (la bounding box). Le moins qu’on puisse dire est
que ce format n’est pas courant.
PdfTATEX ou XelAT^X acceptent les ipiages aux formats classiques jpeg, png et
même pdf. On préférera donc utiliser un de ces deux moteurs si le document
sur lequel on travaille intègre des images.
Pour insérer une image, on utilise la commande :

\includegraphics[options]{image}

dont les options peuvent être width ou height pour spécifier une largeur ou une
hauteur, scale pour un facteur d’échelle ou angle pour une rotation de l’image. Le
fichier image doit se trouver dans le même dossier que le fichier principal ou préciser
36 Chapitre 3. Les indispensables pour composer un document

le chemin permettant d’y accéder. Par exemple si l’image [Link] se trouve dans le
sous-dossier images, on écrira \includegraphics{images/[Link]}.

8 a fi
\usepackage{graphicx}
\includegraphics [scale-O.25]{[Link]}
\includegraphics [height-1.5cm]{[Link]}
\includegraphics [width-lcm, angle-45] {tux . png}

Étant donné le format de l’image repésentant le pingouin Tux : [Link], la


Q compilation du code ci-dessus ne fonctionnera qu’avec PdfLM^jX ou XelAIË^,
comme on l’a dit précédemment.

3.12 Une figure en regard d’un texte avec minipage


On a souvent besoin de composer en plaçant un dessin ou une figure en regard
d’un texte, on peut pour cela utiliser l’environnement minipage avec lequel on travaille
dans un cadre dont on fixe la largeur.

\begin{minipage}[c] {largeur} ... \end{minipage}

Voici une mise en œuvre. Attention, les cadres visibles à droite servent à bien
montrer les minipages. Le code à gauche ne les dessine pas (ajoutez une commande
\fbox{} autour de chaque environnement minipage pour les faire apparaître).

\begin{minipage}[c]{2cm}
bla bla bla bla bla bla bla
\end{minipage}
bla bla bla
1
texte blu blu blu
w \begin{minipage}[c]{2cm} bla bla bla texte
blu blu blu
blu blu blu blu blu blu bla
\end{minipage}

L’alignement vertical des minipages est spécifié par l’option entre crochets : c pour
centrer, t pour top (en haut) ou bien b pour bottom (en bas).

\begin{minipage}[t]{2cm}
bla bla bla bla bla bla bla
blu blu blu

I
\end{minipage}
texte bla bla bla texte blu blu blu
\begin{minipage}[b]{2cm} bla bla bla
blu blu blu blu blu blu
\end{minipage} bla

Dans l’exemple ci-dessous, on remplace la largeur de 2 cm par 49 % de la largeur


de la ligne, et on remplace le mot «texte» par la commande \hfill pour pousser les
3.12 Une figure en regard d’un texte avec minipage 37

minipages vers les marges extérieures, laissant entre les deux les 2 % restants de la
largeur de la ligne.

\noindent 7,
\begin{minipage}Ce] {0.49\textwidth}
Tux est un manchot,
mascotte officielle de Linux. ; Tux est un man-
Dessiné par Larry Ewing en 1996, | chot, mascotte offi­

B son usage est libre


\end{minipage}\hf ill#
\begin{minipage}[c]{0.49\textwidth}
\begin{center}
\includegraphics{[Link]}
cielle de Linux. Des­
siné par Larry Ewing
en 1996, son usage
est libre
\end{center}
\end{minipage}\par

Comme ce genre de composition revient régulièrement, voici une macro-commande


qu’on pourra placer dans le préambule. Consulter les sections 19.3 et 20.1 pour les
détails.

1 \newlength{\colG}\newlength{\colD}
2 \newcommand{\compo}[3] [0.5]{
—i 3 \setlength{\colG}{#l\linewidth} \setlength{\colD}{\lineuidth}

g
ÏÏ| 4
5
6
7
8
\addtolength{\colD}{-\colG} \addtolength{\colD}{-10pt}
\addtolength{\colG}{-10pt}#
\par\noindent 7»
\begin{minipage}Ce]{\colG}#2\end{minipage}\hfill 7,
\begin{minipage}Ce]{\colD}#3\end{minipage}\par}

Voyons trois exemples d’utilisation de cette nouvelle macro-commande \compo.


D’abord la macro sans option : les deux colonnes sont équilibrées avec du texte à
gauche et une image à droite. Colonnes multiples

A
U
\compo { Colonne de gauche :
Colonne de gauche: 50\%;
Colonne de droite : 50\#
50% ; Colonne de
>7 } {\imageTux} droite : 50%

Ensuite, la macro \compo avec un nombre compris entre 0 et 1 pour spécifier la


taille de la colonne de gauche

i Colonne de

A
\compo[0.4] {
Colonne de gauche: 40\#; ' gauche : 40% ;
Colonne de droite: 60\# ! Colonne de
O
•H } {\imageTux} i droite : 60%
\compo[0.8] {
5 Colonne de gauche: 80\#; Colonne de gauche : 80% ; Co­
Colonne de droite: 20\#
} {\imageTux}
lonne de droite : 20%
38 Chapitre 3. Les indispensables pour composer un document

3.13 Faire couler le texte autour d’une image


Le package wrapfig permet de fondre une image dans un texte. La commande
suivante peut s’enrichir d’options mais dans sa version la plus simple, la position
est à choisir entre r ou 1 pour right ou left, c’est à dire à droite ou à gauche du texte.
La valeur Opt signifie que c’est la largeur de l’image qui sera utilisée (on peut forcer
avec une valeur).

\begin{wrapfigure}{position}{Opt} FIGURE \end{wrapfigure}-

Le manchot Tux
\begin{wrapfigure}{r}{Opt} est la mascotte
\includegraphics [width-0.3\linewidth]
{files/[Link]} du noyau Linux.
Son usage est libre

I
\end{wrapfigure}
Le manchot Tux est la mascotte du noyau et on le retrouve
Linux. Son usage est libre et on le
dans de très nom­
retrouve dans de très nombreux projets
et logotypes liés à Linux. breux projets et logotypes
Son auteur est Larry-Ewing qui l'a dessiné liés à Linux. Son auteur est
en 1996. Larry Ewing qui l’a dessiné
en 1996.

A L’environnement wrapfigure fonctionne bien avec les paragraphes de texte


“ | mais pas avec les environnements de liste.

3.14 Multicolonnes
Pour écrire un article sur plusieurs colonnes, le package multicol propose un
environnement dédié permettant jusqu’à 10 colonnes. L’environnement répartit lui-
même le contenu pour équilibrer la hauteur des colonnes.

__ \usepackage{multicol}

B \begin{multicols}{2}
Du texte très intéressant qui doit
être mis sur deux colonnes.
\end{multicols}
Du texte très sur deux
intéressant qui lonnes.
doit être mis
co-

Afin d’améliorer la lisibilité, on peut modifier l’espace inter-colonnes ainsi que


l’épaisseur de la ligne de séparation (Opt par défaut).

\usepackage{multicol}
__ \setlength{\columnsôprule}{lpt}

B
g \setlength{\columnsep}{0.5cm}
\begin{multicols}{2}
Du texte très intéressant qui doit
être mis sur deux colonnes.
\end{multicols}
Du texte très
intéressant qui
doit être mis
sur deux
lonnes.
co-
3.15 En-têtes et pieds de page 39

On peut forcer le changement de colonne avec la commande \columnbreak.

\usepackage{mult icol}
\setlength{\columnseprule}{lpt}
\setlength{\columnsep}{0.5cm} Une phrase Du texte très j

i
\begin{multicols}{2}
Une phrase d'intro.
d’intro. intéressant qui
\columnbreak doit être mis
dans des co­
Du texte très intéressant qui doit lonnes.
être mis dans des colonnes.
\end{multicols}

3.15 En-têtes et pieds de page


Le package fancyhdr (cf. [OTAN]) permet de gérer facilement les en-têtes et pieds
de page. Les commandes suivantes placent un contenu dans l’en-tête ou le pied de
page à gauche, à droite ou au centre, selon que pos vaut L, C ou R :
\fancyhead[pos]{contenu} \fancyfoot[pos]{contenu}

On a vu en 2.9.2 un exemple simple d’usage. En voici un second où on affiche en


plus le numéro de page dans le le pied. Pour cela on utilise la commande \thepage{}.
Afin d’afficher aussi le nombre total de pages, on charge le package lastpage qui
permet d’utliser la commande \pageref {LastPage} (attention aux majuscules).

Initiation ù BTpX 17 janvier 2010

\usepackage{fancyhdr,lastpage}
Lorcm ipsum dolor sit omet, conscctctucr adi-
\pagestyle{fancy} piscing dit. Ut pu rus élit, vestibulum ut. placerai ac.
\renewcommand\headrulewidth{lpt} adipiscing vitac. felis. Curabitur dictum gravida mau-
\fancyhead[L]{Initiât ion à \LaTeX} ris. Nam areu libéra, nonummy eget. conscctctucr
[Link] a. magna. Donec véhicula auguceu ne-
\f ancyhead[R]{\today} que. l'cllcntcsquc habitant morbi distique scncctus
\fancyfoot [C]{Page \thepage{} et net us et malcsuada famés ac turpis ego (as. Mau-
ris ut kxi Cras viverra met us rhoncu* vm. Nulla et
sur \pageref{LastPage}}
lectus vestibulum uma fringilla ultriccs. PhaselliM
eu tcllus sit amet tortor gravida placerai. Integcr sa-
<o
* Lorem ipsum dolor sit amet, picn est. iaculls in. pretium quLs. viverra ac, nunc
Praescnt eget sem vcl Ico ultriccs bibendum. A encan
JC consectetuer adipiscing élit. faucibus. Morbi dolor nulla. malcsuada eu. pulvinar
21J Ut purus élit, vestibulum at. moûts ac. nulla. Curabitur auctor semper nulla.
Donec varias orci eget risus. Duis nihh ml. congue
[. . .] eu. accumsan elcifcnd. saglttls quLs, diam. Duis eget
orci sit amet orci dignissim rutrum
Nam dui ligula, fringilla a, Nam dui ligula. fringilla a. cuismod sodalcs. sol-
licitudin vcl. wisi. Morbi auctor lorcm non justo. Nam
euismod sodales, sollicitudin lacus libéra, pretium at. lobortis vitac. ultricics et.
vel, wisi . tcllus. Donec aliquet. tortor sed accumsan hiben-
dum. cnit ligula aliquet magna, vitae omare odio me-
[. . •] tus a ml. Morbi ac orci et nisl hendrent mollis. Sus*
[...]
Page 1 sur 4

Certains documents ont une gestion particulière des pages de gauche (paires) et
des pages de droite (impaires), les en-têtes et pieds de page doivent s’adapter à ce
contexte. On reviendra sur cette question en 5.6.
40 Chapitre 3. Les indispensables pour composer un document

3.16 Orientation portrait ou paysage


Deux cas se présentent : soit l’ensemble du document est au format paysage alors
il suffit d’indiquer au module geometry l’option landscape en plus des tailles des
marges (cf. 3.7).

\usepackage [landscape,margin=2cm] {geometry}

Il revient au même de placer l’option landscape dans les options de


O \documentclass.

Deuxième cas de figure : certaines pages doivent être au format paysage. On uti­
lisera alors le package Iscape qui apporte l’environnement landscape à l’intérieur
duquel les pages seront composées dans ce format de page.
(iwitii kl |.Hiiiin tlrintiilliin. *-(■>■
>rin<l>'tiun u«tor. \vl '[Link]
«■lin mw
\usepackage{lscape}
Texte à placer
dans des pages
au format
portrait

\begin{landscape}
Texte à placer
«mw
11
dans des pages
au format
paysage
liîîîillO
iïîi’iJjH
\end{landscape}

Texte à placer
dans des pages
au format
portrait
Sit^Kixlîw vitKr dit Alitjiwim
<tu iiwpK, «imro In. iilhimonvY
qui". «vudiKrlo et lilicrt». Fum«*

3.17 Couleurs
Le package xcolor fournit une palette de couleurs aux noms simples à retenir.
— De noir à blanc : black, darkgray, gray, lightgray, white.
— Les autres couleurs en ordre alphabétique : blue, brown, cyan, green, lime,
magenta, olive, orange, pink, purple, red, teal, violet, yellow.
Pour écrire un texte en couleur, on peut procéder de deux manières.
\usepackage{xcolor}
£ \textcolor{red}{Je suis rouge} •Je suis rouge ou je suis rouge.
h ou {\red je suis rouge.}

On peut aussi modifier la couleur du fond.


3.18 Transformations sur du texte 41

B \usepackage{xcolor}
\colorbox{black}{\white Blanc sur fond noir} LBlanc* sur fond noir

La commande \fcolorbox permet même d’ajouter une couleur de bordure avant


J

la couleur du fond.
\usepackage{xcolor}
" \fcolorbox{black}{lightgray} —-----------------------
CO
cr {\black Noir sur gris clair}
Noir sur gris clair avec bordure.
avec bordure.

On peut charger le package avec une option indiquant la palette pour des cou­
leurs supplémentaires. Par exemple \usepackage[dvipsnames]{xcolor} charge de
nouvelles couleurs comme navyblue, turquoise ou sepia (cf. [OTAN]).
On peut aussi créer ses propres couleurs personnalisées avec la commande :

\def inecolor{nom}{modèle}{déf inition}

Pour un simple niveau de gris, allant de 0 (noir) à 1 (blanc) on écrira :


\def inecolor{grismoyen}{gray}{0. 6)
Pour créer une couleur nommée mandarine, avec le codage rgb (red, green, blué) :
\def inecolor{mandarineXrgb}<0 .96,0.6,0.02)
Il est peut-être plus facile de créer des couleurs au format html, car des palettes
se trouvent partout sur le Web. Avec ce modèle, on peut créer une couleur avocat :
\def inecolor{avocat}{HTML}{0.96,0.6,0.02){#568203}

3.18 Transformations sur du texte


On peut opérer des rotations sur un texte en précisant un angle et une origine
(le centre de rotation) sous la forme de deux lettres r, c ou 1 suivi de b, c ou t pour
right, center ou left suivi de bottom, center ou top.
It et rt
\rotatebox [origin=lt] {angleXtexte} 1c rc
lb cb rb

g
\usepackage{graphiex}
Un \rotatebox[origin"cc]{45}{mot}
un \rotatebox[origin-lt]{45}{mot}
Un un moi un mgj
un \rotatebox[origin-rb]{45}{mot}

Pour une translation verticale, utilise la commande :

\raisebox{decalage}{texte}
42 Chapitre 3. Les indispensables pour composer un document

g \usepackage{graphicx}
Un \raisebox{2mm}{mot} plus haut
que \raisebox{-2mm}{l'autre}
TT mot
Un plus haut que
l’autre

On peut aussi étirer ou contracter une boîte contenant un texte txt dans sa
hauteur ou sa largeur en précisant soit des dimensions, soit des facteurs d’échelle :

\resizebox{larg.}{haut.}{txt} \scalebox{fact .hor.} [f act. vert. ] {txt}

g
\usepackage{graphicx}
Un \resizebox{lcm}{5mm}{mot}
un \scalebox{5}[2]{mot} Un IllOt un lioiim.
\scalebox{-l}[1]{miroir}.

3.19 Modifier la police


3.19.1 Avec IATj?X ou PcWT^K
Pour utiliser une police particulière, le principe est de charger le package cor­
respondant (Imodern, fourier, chancery, bookman, kurier, etc. (cf. [1])) à condition
cependant que tout soit bien installé, ce qui n’est pas toujours le cas.
Pour des polices non standard, il est infiniment plus simple de passer par XelATjÿC,
comme l’explique la section suivante.

\usepackage{chancery}
La police, Zapf Cfiancery porte le nom
«j La police Zapf Chancery porte le nom
ot de son créateur : Hermann-Zapf. de son créateur : 9-lermann Zapf

I \usepackage{concmath}
La police concrète créée par D.-Knuth
? pour Concrète Mathematics.
La police concrète créée par
D. Knuth pour Concrète Ma­
thematics.
N \usepackage{mathptmx} La police Times New Roman :
SI La police Times New Roman : un classique un classique indémodable depuis
HhI indémodable depuis 1931.
1931.
lïïl \usepackage [scaled]{helvet}
\renewcommand*\familydefault{\sfdefault} La police Helvetica au tracé
£ La police Helvetica au tracé neutre est très populaire.
LU neutre est très populaire.

\usepackage{avant}

B \renewcommand*\familydefault{\sfdefault}
La police Avantgarde serait-elle inspirée
du mouvement Bauhaus ?
La police Avantgarde
serait-elle inspirée du mou­
vement Bauhaus?
3.19 Modifier la police 43

\usepackage{frcursive}

B
\begin{cursive}
Une belle écriture
Jq manuscrite comme à 1 ' école . oxwme à técoêe.
\end{cursive}

3.19.2 Avec XelATeX


L’une des spécialités de XeDT^X est justement le gestion des fontes. Voici comment
charger la très classique police Times.

\usepackage{fontspec}

0
La police Times New Roman :
\setmainfont{Times New Roman}
La police Times New Roman : un classique un classique indémodable depuis
indémodable depuis 1931. 1931.

Dans l’exemple ci-dessus, on pourra remplacer Times New Roman par Roboto
O ou Arial ou encore Courier New.

Mais l’intrêt de XeDTgX réside dans la simplicité de chargement de fontes non


standard. Voyons cela sur un exemple.
Sur le site FontSquirrel ([Link] on trouve un large
choix de polices, par exemple «Open Sans», à télécharger sous la forme d’une archive
zip contenant les différents styles et graisses :
[Link], [Link], [Link], etc.
Il suffit de décompresser l’archive dans le dossier du projet et d’ajouter les lignes
suivantes au préambule :
\setmainfont [BoldFont=OpenSans-Bold .ttf,
ItalicFont=[Link] ,
La police Open Sans avec du

g
J* BoldItalicFont=[Link]
~ ]{[Link]} gras, de l'italique et même du
m La police Open Sans avec du \textbf{gras},
gras italique.
de 1'\textit{italique} et même
du \textbf{\textit{gras italique}}.
Chapitre

Créer un sujet d’examen

Un des usages principaux de pour les enseignants du secondaire est sans


doute la création de sujets d’examens. On trouve facilement sur le Web des sujets en
libre accès et on a vu en 2.12 comment récupérer les parties qu’on souhaite utiliser.
Dans ce chapitre, nous proposons des moyens pour améliorer l’organisation, la
lisibilité et la réutilisabilité du code source tout en améliorant la qualité du document
produit.
La dernière section présente un outil permettant d’automatiser la correction de
questionnaires à choix multiples.

\usepackage{tasks,amssymb}
\usepackage{xsim}
\xsimsetup{solution/print = true}
\begin{exercise} Exercice 1
Cochez les gaz rares
\begin{tasks}[style=multiplechoice] (2) Cochez les gaz rares
\task Hydrogène \task Hélium
\task Oxygène \task Néon Hydrogène Hélium
X \end{tasks}
‘Sj \end{exercise} Oxygène Néon
S \begin{solution}
\begin{tasks}[style»multiplechoice] (2) Solution 1
\task Hydrogène
\task [$\blacksquare$] Hélium Hydrogène ■ Hélium
\task Oxygène
\task [$\blacksquare$] Néon
Oxygène ■ Néon
\end{tasks}
\end{solution}
\end{document}
46 Chapitre 4. Créer un sujet d’examen

4.1 Problèmes et exercices


Le package xsim propose des outils adaptés à la création de sujets d’examens. L’en­
vironnement exercise peut recevoir des options facultatives permettant de préciser
un sous-titre ou le nombre de points (cf. 19.1 pour une méthode manuelle).
Les environnements d’énumération vus en 3.5 permettent de construire des ques­
tions, sous-questions etc.

\usepackage[french]{babel}
\usepackage{xsim}
\begin{exercise}[points-3] Exercice 1
Mon premier exercice ,/3 p.
\end{exercise} Mon premier exercice

\begin{exercise}[subtitle=Sous-titre]

î Mon deuxième exercice


\begin{enumerate}
\item Question
\item \begin{enumerate}
\item Question
Exercice 2 Sous-titre
Mon deuxième exercice
1. Question
2. (a) Question
\item Question
\end{enumerate} (b) Question
\end{enumerate}
\end{exercise}

xsim apporte la commande \blank pour afficher une zone d’écriture manuscrite de
3 lignes (width=3\linewidth) avec un espacement vertical de 1,5 fois l’interlignage
courant (linespread=l.5).

\usepackage{xsim} Exercice 3 Cours


\begin{exercise}[subtitle-Cours , ./2.5 p.
Énoncer le th. de Thalès

8
points-2.5]
Énoncer le th. de Thalès

\blank[width-3\linevidth,
linespread“l.5]{}
\end{exercise}

La commande \blank est aussi bien adaptée pour concevoir des exercices à trous
(une autre façon de procéder est présentée en 20.1).

\usepackage[french]{babel}
\usepackage{xsim} Exercice 4 Compléter

I
\begin{exercise}[subtitle=Compléter]
Les \blank[width»2cm]{sanglots} Les longs
longs des violons de l'automne des violons de l’automne,
bercent mon \blank{c{\oe}ur} bercent mon d’une
d'une langueur monotone.
\end{exercise}
langueur monotone.

On peut définir de nouveaux environnements personnels (ici exo et pblm) avec une
présentation différente en choisissant par exemple le template prédéfini runin.
4.1 Problèmes et exercices 47

Attention, les valeurs des variables exercise-env et solution-env doivent être


uniques. Les valeurs des variables exercise-name et solution-naine peuvent, elles,
être choisies librement.
\usepackage{xsim}
\DeclareExerciseType{exo}{
exercise-env = exo ,
solution-env - solexo ,
exercise-name » Exercice ,
solution-name 3 Solution ,
exercise-template ° runin , Exercice 1 6 points
solution-template = runin }
\Declare Ex erciseType {problème )■{ Démontrer que ...
exercise-env = pblm ,
solution-env = solpblm ,
Exercice 2 4 points
exercise-name = Problème ,

B solution-name = Solution ,
exercise-template » runin ,
solution-template = runin }
\begin{exo}[points-6]
Démontrer que ...
Montrer que ...

Problème 1
Prouver que ...
10 points

\end{exo}
\begin{exo} [points =4] 0+2 points
Exercice 3 Bonus
Montrer que ...
\end{exo} Calculer ...
\begin{pblm}[points-10]
Prouver que ...
\end{pblm}
\begin{exo} [subt itle = Bonus , points-O, bonus-points =2]
Calculer ...
\end{exo}

Si on veut modifier la manière de numéroter un type d’exercice, on utilisera la


commande \xsimsetup. Par exemple pour obtenir une numérotation avec des lettres
majuscules (cf. page 59) pour les problèmes définis ci-dessus, on écrira :

\usepackage{xsim}
\DeclareExerciseType{exo}{ .. }
\DeclareExerciseType{pblm}{ .. } Exercice 1 6 points
\xsimsetup-(pblm/the - counter Démontrer que ...
= \Alph{pblm}}
\begin{exo> [points-6] :
Démontrer que ... [Exercice 2 4 points :i
\end{exo}

B
Montrer que ...
\begin{exo}[points-4]
Montrer que ...
\end{exo} Problème A 10 points
\begin{pblm}- [points-10]
Prouver que ...
Prouver que ...
\end{pblm}
\begin-Cexo} [subtitle“Bonus , Exercice 3 Bonus 0+2 points
» points-0, bonus-points=2]
Calculer ...
Calculer ...
\end{exo}
48 Chapitre 4. Créer un sujet d’examen

4.2 Barème
L’ensemble des points des exercices peut être réuni dans un tableau récapitulatif
grâce à la commande \gradingtable placée où on le souhaite. Dans l’exemple suivant,
la traduction du mot anglais total étant par défaut « totalement », on ajoute une ligne
pour obtenir le mot « Total ».

Points atteint
\usepackage[french]{babel} Exercice 1 6
\usepackage{xsim}
Exercice 2 4
\DeclareExerciseTranalations{tôtal}
|o[ {French ■ Total} Exercice 3 0
\gradingtable Problème A 10
Total 20

Si on préfère un affichage en ligne plutôt qu’en colonne, on utilisera la commande


\gradingtable [template=def ault*].

Exercice 1 Exercice 2 Exercice 3 Problème A Total


Points 6 4 Ô ÏÔ “20“
atteint

4.3 Solutions des exercices


Une solution peut être attachée à un exercice : il suffit qu’elle le suive immédiate­
ment. Par défaut la solution est masquée mais comme on le voit ci-dessous, elle peut
être affichée à la demande avec l’option print=true.

\usepackage{xsim}
\begin{exercise}
Mon premier exercice Exercice 1
\end{exercise} Mon premier exercice
\begin{solution}

B
Solution un
\end{solution} Exercice 2
\begin{exercise} Mon second exercice
Mon second exercice
\end{exercise}
\begin{solution}[print-true]
Solution 2
Solution deux Solution deux
\end{solution}

Dans l’exemple précédent, on a utilisé l’environnement d’exercice nommé exercise


qui fonctionne de concert avec l’environnement de solution nommé solution.
Avec les environnements exo et pblm définis par \DeclareExerciseType dans le
code 544Rcu de la page précédente, on utilisera respectivement les environnements de
solution solexo et solpblm.
4.3 Solutions des exercices 49

\usepackage{xsim}
\usepackage{tasks,amssymb}
\DeclareExerciseType{exo}{ .. Comme en 544Rcu }
\DeclareExerciseType{pblm}{ .. Comme en 544Rcu }
\xsimsetup{pblra/the-counter » \Alph{pblm}}
\begin{exo}
Les \blank[width«2cm]{sanglots}
longs des violons de 1 * automne.
\end{exo}
\begin{solexo} Exercice 1
Les \blank[width“2cm]{sanglots}
longs des violons de l'automne. Les longs
\end{solexo} des violons de l’automne.
\begin{pblm}

B Factoriser $B»7x+14$
\end{pblm}
\begin{ solpblm}
$B-7(x+2)
\end{solpblm}
! Problème A
i Factoriser B = 7x + 14

Exercice 2
l

\begin{exo}
Le Chlore est un halogène
Le Chlore est un halogène Vrai Faux
\begin{tasks}[style-multiplechoice] (2) L
\task Vrai \task Faux
\end{tasks}
\end{exo}
\begin{solexo}
\begin{tasks}[style=multiplechoice](2)
\task [$\blacksquare$] Vrai \task Faux
\end{tasks}
\end{solexo}

Les exercices et problèmes sont saisis ainsi que leurs solutions mais ces dernières
ne s’affichent pas. C’est très bien pour un sujet d’examen.
Maintenant si on souhaite générer la correction, plutôt que de demander pour
chaque exercice l’affichage de sa solution, on utilise les commandes globales suivantes :
\xsimsetup{solexo/print « true} et \xsimsetup{solpblm/print = true}.
Si on préfère produire toutes les solutions à part, par exemple sur une nouvelle
page, on utilise la commande \printallsolutions ou comme dans l’exemple suivant
pour un affichage des solutions par type d’exercice :
1
Solution 1 I

Les sanglots longs des


violons de l’automne.

g
\newpage
' \printsolutionstype{exo}
Solution 2 !
:
s \printsolutionstype{pblm}
■ Vrai Faux

Solution A
B = 7(x 4- 2)
50 Chapitre 4. Créer un sujet d’examen

4.4 Correction automatique de QCM


Qui n’a jamais rêvé que ses copies se corrigent automatiquement? C’est la pro­
messe tenue par AMC. Auto Multiple Choice est un ensemble d’utilitaires permettant
de créer, gérer et corriger automatiquement des questionnaires à choix multiples.
AMC est conçu pour une utilisation sous Linux. Il est cependant installable sur
O Mac OS X. Voir [Link]
Commençons par lancer le logiciel afin de créer un nouveau projet (1) en choisissant
le modèle Exemple simple du dossier [FR]. Une fois le nom du projet choisi, on va éditer
le fichier source (2).

35
Préparation Saisie Notation Rapports

O : LaTeX ▼ jl Éditer le fichier source

1 \documentclass[a4paper]{article}
2 \usepackage[utf8]{inputenc}
3 \usepackage[Tl] {fontenc}
4 \usepackage [français , bloc , completemulti] {automultiplechoice}
5 \begin{document}
6
7 \exemplaire{3}{
8 \noindent{\bf QCM \hfill \champnom {
9 \fbox{\rule{0em}{2em}Nom et prénom : \makebox [8cm] {\dotf ill}}}
10 } \vspace{lem}
11
12 \textit{
13 Les questions faisant apparaître le symbole \multiSymbole{} peuvent
14 présenter zéro, une ou plusieurs bonnes réponses.
15 Les autres ont une unique bonne réponse.

a
16 } \vspace{lem}
17
18 \begin{question}{calcul} Quel est le triple de la moitié de six ?
19 \begin{reponses}
20 \bonne{9}
21 \mauvaise{6}
22 \mauvaise{l}
23 \end{reponses}
24 \end{question}
25
26 \begin{questionmult}{divisible} 14 est divisible par :
27 \begin{reponses}
28 \bonne{7}
29 \mauvaise{4}
30 \bonne{2}
31 \end{reponses}
32 \end{questionmult}
33 }
34 \end{document}
4.4 Correction automatique de QCM 51

Ligne 4 Le package automultiplechoice est chargé ici avec les options bloc afin
d’éviter le changement de page à l’intérieur des questions et completemulti qui
ajoute le choix « Aucune de ces réponses n’est correcte. ».
Ligne 7 Après un préambule classique, on indique le nombre de copies qu’on souhaite
générer. Les réponses proposées seront disposées dans un ordre aléatoire.
Lignes 8-10 Le cartouche d’en-tête du sujet est construit ici avec un élément impor­
tant : la commande \champnom qui permettra d’identifier les copies des élèves.
Remarquez la commande \rule qui permet de donner plus de hauteur au cadre
dessiné par \fbox afin de laisser la place pour l’écriture manuscrite du nom et
du prénom.
Lignes 18-24 Une première question à réponse unique est créée avec l’environnement
question. Le nom de la question, ici calcul, doit être unique. Il sera affiché
dans l’export de notes qui détaille les pourcentages de réussite pour chaque
question.
Lignes 26-32 Une seconde question, à choix multiples, est créée avec l’environne­
ment questionmult. Comme précédemment, on lui attribue un nom unique.
Lignes 33 L’accolade ferme la commande \exemplaire initiée ligne 7.

II. I ! T +2/1/59+
i

■ QCM Nom et prénom :

Les questions faisant apparaître le symbole Jb peu­ !


vent présenter zéro, une ou plusieurs bonnes réponses. Les
autres ont une unique bonne réponse.
! Question 1 Quel est le triple de la moitié de six ?

□1
□9
□6
Question 2 A 14 est divisible par :

U-
□4
□2
P~| Aucune de ces réponses n'est correcte.
52 Chapitre 4. Créer un sujet d’examen

! (? Mettre à jour les documents


Une fois le projet finalisé, on va pouvoir
mettre à jour les documents (3), calculer les
—J..—— - .......
mises en page (4) et enfin lancer l’impression ! ©Calculer les mises en page ^4'^
des copies (5).
Une fois les copies complétées par les élèves,
la phase suivante consiste à numériser chaque
copie avec un scanner.
ùZZzzzzzi
! ^Imprimer des copies ^5^

On considère maintenant qu’on dispose Préparation Saisie . Notation Rapports


d’autant de fichiers numériques que de copies Saisie des copies après examenr -
rendues à la fin du devoir. On passe donc à | [Link] (6J
l’onglet Saisie.
Le bouton Automatique (6) va permettre de
sélectionner l’ensemble des fichiers correspon­
rzzzzzzzzlz
Diagnostic

Pages tf
dant aux copies scannées. identifiant EQM sensibilité I Col
À cette étape, les copies sont encore ano­ H •
1/1:1 î.0.3 _i
nymes pour le logiciel. i|
2/1:1 lo.O 0.0
3/1:1 j0.2 0.0 ;

Afin de faire correspondre les copies à leur auteur, il faut produire une liste des
élèves au format csv de la forme ci-dessous et la charger à l’aide du bouton Choisir de
l’onglet Notation (7).

# Classe : Première 3
no : nom : prénom
01 : Abbott : Anna
02 : Boyd :Britt
03:Cahn:Carol

La première colonne no permet de disposer d’un identifiant unique (8) afin de


parer aux problèmes d’homonymie.

dentification des étudiants-------- ----------------------

Liste des étudiants : [Link] i fâChoisir I1XÉditer (a liste !

Identifiant unique dans cette liste : ' no

Titre du code pour association automatique :| (aucun) ▼ ;


©
Association entre copies et étudiants : | P,P, Automatique
^9^ & Manuelle j

Il ne reste plus qu’à lancer l’association manuelle (9) qui va faire défiler un par un
les cartouches contenant nom et prénom des copies scannées pour permettre l’asso­
ciation aux identifiants de la liste d’élèves comme on le voit sur l’image suivante.
4.4 Correction automatique de QCM 53

r7 Pd^e J i
Association manuelle
Precedent associes
esi©
Suivait
' Effacer O Inconnu
Nom ot prénom :
~~ copie auto manuel
1:1 01
^7 au début f lous les noms i •

* Boyd Britt | Cahn Carol



Abbott Anna (1:1)

On peut maintenant actionner Le bouton Corriger de l’onglet Notation avant de


cliquer sur le bouton Exporter de l’onglet Rapports pour obtenir les notes détaillées de
chaque élève.

■O
3 ’w
Q

Copie A:no Nom note total max 3 2


4 20,0 max 1 3
£ 11.7 moyenne 67% 56%
6 1:1 01 Abbott Anna ____ 0.0 0 4_ 0 0
3:1 02 Boyd Britt 20,0 4 4_ 1 3
8 2:1 03 Cahn Carol 15.0 3 4 1 2

On terminera en actionnant les boutons Annoter les copies puis Voir pour consulter
les copies corrigées avant distribution aux élèves :

Abbott Anna
! Note: 0/20 (score total : 0/4)
I I I I I n u
+2/1/59+

QCM Nom et prénom :. A .A .QTT.


Les questions faisant apparaître le symbole Jft peu­
vent présenter zéro, une ou plusieurs bonnes réponses. Les
autres ont une unique bonne réponse.
Question 1 Quel est le triple de la moitié de six ?

□6
0/1 ®1
iâ 9
Question 2 4 14 est divisible par :

0/3 13 2
Kl 7
□ Aucune de ces réponses n’est correcte.

Les possibilités de AMC n’ont été ici qu’effleurées et une lecture de la documen­
tation officielle (cf. [3]) est vivement conseillée.
En plus du package xsim, il existe le package exam qui permet lui aussi la création de sujets d'exame.
La classe exam a été crée par Philip S. Hirschhorn, Professeur au Wellesley College. Vous pouvez aller sur
sa page personnelle pour avoir la dernière version de la classe : [Link]

Cette classe est très utile car elle permet surtout de :

- Ajouter de la sémantique avec les environnement questions, parts, subparts, ...


- Avoir une numérotation cohérente sur un sujet qui peut faire plusieurs dizaines de pages ;
- Pouvoir insérer un bloc de texte utilisant la largeur de la page au milieu de questions ;
- Mélanger les réponses aux questions et choisir d'afficher ou non les réponses en activant l'option
answers ;
- Mettre des en-tête et pieds de page ;
- Avoir une indentation plus raisonnable que pour les listes ;
- Créer des QCM ;

La documentation de ce package se trouve ici : [Link]

Voici donc le code LaTeX d'un sujet de contrôle complet sur la forme :

\documentclass[12pt]{exam}
\usepackage{unicode-math}
\usepackage[frenchb]{babel}
\begin{document}
\begin{questions}
\question Démontrer que \( (a+b)^2 = a^2 + 2ab + b^2 \).
\question Quelle était la couleur du cheval blanc d'Henri~IV ?
\question La bataille de Marignan est une des plus célèbres de l'histoire de France.
\begin{parts}
\part Quand a-t-elle eu lieu ?
\part Comment s'appelait le roi de France vainqueur de cette bataille ?
\end{parts}
\end{questions}
\end{document}

On voit que chaque question est contenue dans un environnement questions et introduite par une commande
\question qui lui attribuera automatiquement un numéro, à la manière d'une liste LaTeX enumerate. L'une de
ces questions est même divisée en plusieurs parties, contenues elles dans un environnement parts et introduites
(et numérotées adéquatement) par les commandes \part. Si besoin est, il existe également des environnements
\subparts et subsubparts ainsi que les commandes idoines, ce qui fait pas moins de quatre niveaux de
subdivision disponibles.
La compilation de cet exemple produira ce questionnaire pour l'instant très spartiate :

Bien entendu, il est possible de prévoir les solutions de chaque question… et de les imprimer. Pour cela on
utilise l'environnement… solution. En option de cet environnement, on peut indiquer l'espace prévu pour la
réponse de l'élève lui-même. Tandis que pour faire apparaître les solutions proprement dites dans le
document, il faudra placer l'option answers dans le préambule !

On pourra consulter la page de Franck Pastor pour se faire rapidement une idée des possibilités de cette
classe exam : [Link]
Chapitre

Composer un livre

Dans l’écriture d’un livre ou d’une thèse, il est essentiel de ne pas se perdre dans la
grande quantité de chapitres, de pages et de lignes de texte. DTpX fournit des outils
pour simplifier la création de références, d’index, de bibliographies et de sommaires.
Vous trouverez aussi dans ce chapitre des méthodes pour personnaliser les styles des
titres ou des en-têtes et pieds de pages.

\usepackage [explicit]{titlesec}
Introduction i
\t itlef ormat{\saction}[hang] Lorcm ipsum dolor sit amet, consccte-
{\flushright\sffamily\bf series\scshape} tur adipiscing dit, scd do eiusmod tem-
{}{2em} por incididunt ut laborc et dolorc maga
{#l\quad\rule [-0.5em]{1.5pt}{2em}
aliqua.

§ }
\rlap{\qquad\Huge \thesection}

\section{Introduction}
Lorem ipsum...
Compléments 2
Est pellentesque dit ullanicorper dig-
\section{Compléments} nissim eras tincidunt lobortis. Dui nunc
Est pellentesque.... mattis cnim ut tcllus clcmcntum sagit-
tis.
56 Chapitre 5. Composer un livre

5.1 Gestion des fichiers


Quand un document prend de l’ampleur, les déplacements dans les centaines (les
milliers) de lignes qu’il comporte peuvent devenir difficiles. La solution est de fraction­
ner le code source avec un fichier principal qui appelle une liste de fichiers annexes.
Pour importer un fichier on dispose de deux commandes.
\input{f ichier} importe directement le contenu de [Link]. Le résultat est le
même que si on avait saisi le contenu du fichier à l’emplacement de la commande
\input. Le fichier appelé peut contenir lui-même des \input.
\include{f ichier} provoque un saut de page avant et après l’import du contenu
du fichier [Link]. Le fichier appelé ne peut pas contenir de commande
\include mais en revanche la commande \includeonly peut être utilisée et on
verra dans un instant l’intérêt de cette commande pour les gros documents.
1 \documentclass[A4paper ,12pt]{book}
2 \usepackage[latinl]{inputenc}
3 \usepackage[Tl]{fontenc}
4 \includonly{chapitre02,chapitre03}
a 5
6
\begin{document}
\include{chapitre01} 7, charge [Link]
7 \include{chapitre02} 7, charge chapttre02. tex
8 \include{chapitre03} 7, charge chapztre03. tex
9 \end{document}

La compilation de l’ensemble des chapitres d’un projet volumineux peut être


longue. Afin de gagner du temps, on peut commenter des lignes \include et ne
conserver que celles du ou des chapitres sur lesquels on est vraiment en train de tra­
vailler. Hélas, en faisant cela, les références croisées vers les chapitres commentés sont
cassées.
La commande \includeonly{chapitre01, chapitre03} placée dans le préambule
du fichier principal indique au compilateur quels fichiers vont être pris en compte dans
la compilation mais inclut tout de même les fichiers auxiliaires des fichiers exclus afin
de permettre la construction des références croisées. On a alors une compilation rapide,
complètement fonctionnelle avec uniquement les éléments voulus.

5.2 Liens cliquables dans le fichier pdf


Avec le package hyperref, le sommaire, les références croisées ou bibliographiques
deviennent cliquables et permettent de se déplacer dans le document numérique. Pour
les liens vers le Web, on dispose des deux commandes \url{http: //site. fr} et
\href{[Link] Avec \hypersetup, on peut modifier l’allure des
liens (cf. [OTAN]).

8
>• \usepackage{hyperref}
7. \hypersetup{colorlinks=true, allcolors=red} Voir 5.1 et http : //bit. ly
ct I Voir \ref{gest_fic} et \url{[Link]
5.3 Notes en bas de page ou en marge 57

5.3 Notes en bas de page ou en marge


Pour insérer une note de bas de page ou en marge, on dispose des deux commandes
suivantes :
\footnote{texte de la note} \marginpar{texte de la note}

Quelques Quelques mots1 et encore d'autres n<x«


mots\footnote{Une note de bas de page} pour montrer le fonctionnement2 du 01marge

B et encore système. Lorem ipsum dolor sit omet,


d'autres\marginpar{Note en marge} 1. l>n< noie de bai dr page
2. Compilai
pour montrer le
2
fonctionnement\footnote{Compris ?}
du système. Lorem ipsum...

Si on souhaite que plusieurs éléments se réfèrent à la même note de bas de


O page, on utilise \f ootnotemark [n] où n est le numéro de la note.

Il est possible de renvoyer toutes les notes en fin d’ouvrage plutôt qu’en bas de
chaque page. Le package endnotes permet cela. Il suffit de placer le code suivant dans
le préambule :
\usepackage{endnotes}
\let\footnote»\endnote
Les notes seront alors affichées à l’endroit où le code suivant sera placé :
\newpage
\begingroup
\def\enotesize{\normalsize}
\parskip 2ex
\theendnotes
\endgroup

5.4 Références croisées


Pour les références internes au document, on place un label auquel on fera ré­
férence ensuite. Voir aussi 8.11 et 8.15 pour une utilisation dans un environnement
mathématique.
\label{label} \ref{label} \pageref{label}

Quelques mots pour montrer le fonc­


tionnement du système.
Quelques mots pour
montrer Mabel {MaRef erence} 2
£ le fonctionnement du système.
3
P On a vu page \pageref{MaReference} qu'on
peut placer une référence. On a vu page 2 qu’on peut placer :
une référence. :
58 Chapitre 5. Composer un livre

Les références peuvent être faites à des pages comme on vient de le voir mais aussi
aux numéros des éléments qui structurent le document.

\section{Chimie} \label{chimie}
2 Chimie
On parle de molécules.
On parle de molécules.
§ \seetion{Biologie}
Après la Chimie
(cf. \ref{chimie} page \pageref{chimie})
3 Biologie
Après la Chimie (cf. 2 page 5)

5.5 Style des chapitres et des sections


Pour des titres de chapitres élégants et sans peine, le package fncychap fournit
des styles à choisir entre Sonny, Lenny, Glenn, Conny, Rejne, Bjarne et Bjornstrup en
plaçant simplement dans le préambule : \usepackage [Bjornstrup] {fncychap}.

Chapitre 1

Par défaut
1
Bjornstrup

CHAPITRE 1
I 1
Chapitre _L

Sonny Lenny

CHAPITRE 1

I___ GLENN
I CHAPITRE 1
CONNY

CHAPITRE

1 CIIAPI rRK
ONE
RE.1NE BJARNE

Pour personnaliser les titres des chapitres et autres sections, le package titlesec
fournit la commande suivante qui simplifie le travail.

\titlef ormat{commande} [allure] {format }{lbl}{sép}{avant} [après]

On modifie une commande (\chapter, \subsection, etc.) en précisant une allure


générale, un format qui va régler la taille ou le style de la police. On précise en-
5.5 Style des chapitres et des sections 59

suite comment le label, c’est à dire la numérotation, va s’afficher, puis la taille du


séparateur entre le label et le titre et enfin le code supplémentaire qu’on veut ajouter
avant le titre et éventellement après.
Comme on le voit dans l’exemple suivant, l’allure peut prendre diverses formes
frame place le titre dans un cadre avec le label positionné sur le bord supérieur,
display place le titre sous le label.
hang dispose le titre à droite du label.

\usepackage{titlesec}
\renewcommand{\thechaptor}{\Alph{chapter }}
\t itlef ormat{\chapter}[frame]
{\bfseries}
{\ MakeUppercase{\chaptertitlename}\thechapter}
{lem}
{\Huge\centering}[\newpage]
-------------------- CHAPITRE A--------------------

\titleformat{\section}[display] Titre du chapitre


{\sffamily\LARGE}
{\titlerule [2pt]\thesection}

S {Oem}
{\bfseries}[\titlerule]

\renevcommand{\thesubsect ion}
{\thesection--\roman{subsection}}
A.l
Titre de la section
\titleformat{\subsection}[hang]
{\bfseries\itshape} Titre de la nowaeclüm
{\fbox{\thesubsection}} i
{1 em} J
{}

\chapter{Titre du chapitre}
\section{Titre de la section}
\subsection{Titre de la sous-section}

Dans l’exemple précédent, remarquez comme la numérotation des chapitres et


des sous-sections a été modifiée. Par défaut, les compteurs de sectionnement comme
chapter, section, etc. sont affichés en chiffres arabes (1, 2, 3, ...) au moyen de la
commande \arabic{compteur}. On en affiche la valeur en faisant précéder le nom
du compteur de «the» : \thechapter ou \thesection.
Il est possible de modifier le type d’affichage des compteurs : avec \Alph{compteur}
ou \alph{compteur}. On obtient des caractères alphabétiques majuscules (A, B, C,...)
ou minuscules (a, b, c, ...) et avec \Roman{compteur} ou bien \roman{compteur} des
chiffres romains majuscules (I, II, III, IV, ...) ou minuscules (i, ii, iii, iv, ...).

Le dernier exemple de la section 19.1 utilise des compteurs personnalisés qui


O fonctionnent de la même manière. Voir aussi la section 20.3.

1. D’autres allures sont disponibles, cf. [OTAN].


60 Chapitre 5. Composer un livre

5.6 En-têtes et pieds de page d’un livre


Contrairement à la classe article, la classe book considère, par défaut, différem­
ment les pages paires et impaires.
\documentclass[lOpt,a4paper]{book}
\usepackage[french]{babel}
\begin{document} Chapitre 1

S
\chapter{Chimie}
Chimie
\section{Ions}
1.1 Ions
bla bla \nevpage
bla bla
bla bla \nevpage
bla bla
\end{document} 1

2 CHAPITRE 1. CHIMIE 1.1 IONS 3

bla bla bla bla

L’allure des en-têtes et pieds de page dépend du style appliqué :


empty les en-têtes et pieds de page sont vides ;
plain l’en-tête est vide, le pied de page contient le numéro de page au centre. C’est
le style par défaut de la classe article ;
headings c’est le style par défaut de la classe book comme on le voit ci-dessus.
Le moyen le plus simple de personnaliser les en-têtes et pieds de page est de charger
le package f ancyhdr, puis d’appliquer le nouveau style qu’il définit avec la commande
\pagestyle{fancy}. Voyez la différence avec l’exemple précédent.

\documentclass[lOpt,a4paper]{book}
\usepackage{fancyhdr}
\pagestyle{fancy}
\usepackage[french]{babel} Chapitre 1

B
\begin{document}
\chapter{Chimie}
Chimie
\section{Ions}
1.1 Ions
bla bla \newpage bla bla
bla bla \newpage
bla bla
1
\end{document}

1.1 IONS CHAPITRE 1. CHIMIE CHAPITRE 1. CHIMIE 1.1 IONS

bla bla bla bla

2 3
5.6 En-têtes et pieds de page d’un livre 61

Lorsqu’un livre est ouvert, la page de gauche est paire (Everi) et celle de droite
est impaire (Odd). Pour personnaliser les en-têtes et pieds de page pairs/impairs, on
ajoute E ou 0 en plus des positions L, C ou R vues en 3.15.
\documentclass [10pt,a4paper]{book}
\usepackage{f ancyhdr}
\pagestyle{fancy}
[ n | \fancyhdr[LE]{LeftEven}
\ x axx v _y xixxx L IjGX eu J x an vjf uux l [CE]{CenterEven}
\\fancyhdr vl.j [Link] \fancyhdr[RE]{RightEven}
xxanvjmux L ixo J inxgilV£.V'

j \fancyfoot[LE]{LeftEven}\fancyfoot[CE]{CenterEven}\fancyfoot[RE]{RightEîven }
5 \fancyhdr[LO]{LeftOdd} \fancyhdr[CO]{CenterOdd} \fancyhdr[RO]{RightOdd}
\fancyfoot[LO]{LeftOdd}\fancyfoot[CO]{CenterOdd}\fancyfoot[RO]{RightOdd}
\begin{document}
Page paire \newpage Page impaire
\end{document}
LeftEven CenterEven RightEven LeftOdd CenterOdd RightOdd

Page paire Page impaire

LeftEven CenterEven RightEven LeftOdd CenterOdd RightOdd

Sachant que les commandes \leftmark et \rightmark contiennent respectivement


les informations sur le chapitre et la section en cours, les réglages par défaut du style
fane y sont les suivants :
\f ancyhead [LE , RO] {\textsl{\rightmark}}

B
\f ancyhead [LO , RE] {\textsl{\leftmark}}
\fancyfoot [C]{\thepage}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{Opt}
On voit que les numéros de page sont centrés en bas de page (paire et impaire),
que le chapitre apparaît dans l’en-tête contre le bord commun aux deux pages et la
section à l’extérieur. L’épaisseur de la ligne horizontale de pied de page étant réduite
à zéro, elle n’apparaît pas.
Avant de modifier le style fancy dans un exemple détaillé, observons que mal­
gré la demande d’application du style (commande \pagestyle{fancy}), les pages de
changement de chapitre utilisent toujours le style plain sans en-tête, avec la numé­
rotation centrée dans le pied de page. Ce comportement est dû à la définition de la
commande \chapter qui force le style plain sur la page courante avec la commande
\thispagestyle{plain}. Le moyen le plus simple d’obtenir un style personnalisé
pour les pages de changement de chapitre est de modifier le style plain avec la com­
mande \fancypagestyle{plain}.
Le code qui suit supprime toute marque d’en-tête et de pied de page pour le style
plain, donc pour les pages de changement de chapitre.
\fancypagestyle{plain}
<

B
\fancyhead{} 7, vide l ' en-tete
\fancyfoot{} % vide le pied de page
\renevcommand {\headrulewidth}{Opt} X supprime la ligne d'en-tete
\renewcommand {\footrulewidth}{Opt } X supprime la ligne de pied de page
}
62 Chapitre 5. Composer un livre

Dans l’exemple suivant, on redéfinit \sectionmark pour que le titre de section ne


soit plus en majuscules et aussi \chaptermark pour que le titre de chapitre soit en
majuscules mais pas \chaptername qui correspond au mot «Chapitre» traduit par
babel. Dans les deux cas, on conserve la numérotation \thesection et \thechapter.
Les réglages du pied de page parlent d’eux-mêmes et la redéfinition du style plain
a été expliquée plus haut.

\documentclass[lOpt,a4paper]{book}
\usepackage{fancyhdr}
\pagestyle{fancy}

\renewcommand{\sectionmark} [1]{
Chapitre 1
\markright{\thesection. #1}}
\renewcommand{\chaptermark} [1]{ Chimie
\markboth{\chaptername
\thechapter. \MakeUppercase{#!}}{}} 1.1 Ions
bla bla
\fancyhead{}
\fancyhead[LE] {\textsl{\rightmark}}
\fancyhead[RO]{\textbf{\leftmark}}
\fancyfoot{}
1.1 Ions
\fancyfoot[RE,LO]{Titre du livre}

S \fancyfoot[LE,RO]{\thepage}
\renewcommand {\footrulewidth}{0.4pt}

\fancypagestyle{plain} {
\fancyhead{} % vide l'en-tete
bla bla

\fancyfoot{} 2 Titre du livre


% vide le pied de page
\renewcommand {\headrulevidth}{Opt}
\reneucommand {\footrulewidth}{Opt} Chapitre 1. CHIMIE
}
\usepackage[french]{babel}
\begin{document}
\chapter{Chimie} bla bla
\section{Ions}

bla bla\nevpage
bla bla\nevpage Titre du livre 3
bla bla
\end{document}

L’insertion d’images dans l’en-tête ou le pied de page est possible. Il faudra sim­
plement veiller à ne pas dépasser la hauteur disponible.
3
\usepackage{fancyhdr}
\pagestyle{fancy}

1
\fancyhead{} \fancyfoot{}
\fancyhead [RE,LO]{ Une page avec un logo dans l’en-tête.
\includegraphics [width=lcm]{logo} }
\fancyhead[LE,RO]{\thepage}
\renewcommand {\headrulevidth}{Opt}
Une page avec un logo dans l'en-tête.
5.7 Sommaire 63

5.7 Sommaire
Lorsqu’un document est structuré en sections, sous-sections ou chapitres (cf. 3.4), il
est possible de laisser DŒgX générer automatiquement un sommaire avec la commande
\tableof contents. Dans l’exemple suivant, on redéfinit le titre par défaut : «Table
des matières» dès lors que le package babel est chargé avec l’option french.

\renewcommand{\contentsname}{Sommaire}
\tableofcontents
Sommaire
\section{Introduction}
1 Introduction 9

ï
Blabla
\section{Développement} 2 Développement 3
\subsection{Première partie} 2.1 Première partie 3
2.2 Seconde partie 4
Blabla
\subsection{Seconde partie} 3 Conclusion 6
Blabla
\section{Conclusion}

La profondeur maximale affichée dans le sommaire peut être modifiée en plaçant


la commande \setcounter{tocdepth}{n} (où n est un nombre inférieur à 5) juste
avant la commande \tableof contents.

Commande__________ profondeur
\part{titre} 7Ï
\chapter{titre}1 0
\section{titre} 1
\subsection{titre} 2
\subsubsection{titre} 3
\paragraph{t itre} 4
\subparagraph{titre} 5

Les commandes de sectionnement étoilées qui produisent des titres non numérotés
ne produisent pas non plus d’entrée dans le sommaire. Pour forcer une entrée on
procède avec la commande \addcontentsline{toc}{levelname}{titre}.

\sect ion ♦ { Introduction}


\addcontentsiine{toc}{section}
{Introduction} Sommaire
Blabla Introduction 2
® \section{Développement}
•H 1 Développement 3 i
\subsection{Première partie} 1.1 Première partie 3
in
o> Blabla 1.2 Seconde partie 4
\subsection{Seconde partie} 6
2 Conclusion
Blabla
\section{Conclusion}

1. Disponible seulement avec \docunentclass{r«port} ou \documentclass{book}.


64 Chapitre 5. Composer un livre

Avec la classe book, on peut construire un sommaire plus complet. Le code cor-
repondant à l’exemple ci-dessous est présenté sur la page de droite. Observez les
numérotations des pages et des éléments de sectionnement.

Table des matières

Préambule iii

Introduction v

I Première partie 1
1 Premier chapitre 3
1.1 Section 1 . . 3
1.2 Section 2 . . 3

II Seconde partie 5
2 Second chapitre 7
2.1 Section 1 . 7
2.2 Section 2 . 7

A Notes 9

B Références 11

Postface 13

Index 15

Ici, on a utilisé le sectionnement par parties et par chapitres. De plus, on utilise


le découpage offert par les commandes suivantes :
\f rontmatter indique le préambule du document. La numérotation des pages bascule
en chiffres romains minuscules. Les commandes de sectionnement ne numérotent
pas les titres ;
\mainmatter marque le début du véritable premier élément du livre. La numérotation
des pages revient en chiffres arabes en commençant à 1 ;
\appendix définit le début des appendices. La numérotation des chapitres passe en
lettres majuscules en redémarrant à la lettre A ;
\backmatter marque l’entrée dans les derniers éléments du livre. Les sections ne sont
plus numérotées.
5.8 Bibliographie 65

1 \documentclass{book}
2 \usepackage[utf8]{inputenc}
3 \usepackage [Tl]{fontenc}
4 \usepackage[french]{babel}
5
6 \usepackage{makeidx}
7 \usepackage{imakeidx} 7, Pour avoir [intoc]
8 \makeindex [intoc] 7, intoc ajoute l'index au sommaire
9
10 \begin{document}
11 \frontmatter 7,-------------
12 \tableof contents
13 \chapter{Préambule}
14 \chapter{Introduction}
15
16 \mainmatter 7,----------------------

P
1-- '20
21
\part{Première partie}
\chapter{Premier chapitre}
\section{Section 1}
\section{Section 2}

22 \part{Seconde partie}
23 \chapter{Second chapitre}
24 \section{Section 1}
25 \section{Section 2}
26
27 \appendix V.---------------
28 \chapter{Notes}
29 \chapter{Réf érences}
30
31 \backmatter 7,--------
32 \chapter{Postface}
33 \printindex
34
35 \end{document }

5.8 Bibliographie
Il existe un outil très puissant nommé BibTex pour gérer des bibliographies. Il est
capable de travailler avec des bases de données d’ouvrages. Il sait traiter les champs
(auteur, titre, année, etc.) qu’il peut mettre en forme automatiquement en s’appuyant
sur des styles prédéfinis ou personnalisables. Pour une bibliographie complexe, c’est
l’outil idéal mais sa maîtrise demande un peu de lecture (cf. [11]).
Dans cette section, nous allons voir une méthode beaucoup plus simple pour une
bibliographie de taille réduite.
On construit les entrées bibliographiques en précisant obligatoirement une clé
unique pour chaque ouvrage dont on précisera les informations : titre, auteur, année
de publication, éditeur etc.. Les ouvrages seront alors référencés avec un numéro
automatique entre crochets ou un identifiant id si l’option est précisée.

\bibitem[id]{clé} informations
66 Chapitre 5. Composer un livre

Cette liste d’entrées doit être placée dans un environnement thebibliography à


l’endroit du document où on souhaite voir la bibliographie s’afficher.

1 \begin{thebibliography}{9}

s
2 \bibitem{germ} Émile Zola. \emph{Germinal}. 1885
3 \bibitem[MP 1]{swann} Marcel Proust. \emph{Du côté de chez Swann}. 1913
4 \bibitem[MP2]{ojff} Marcel Proust.
5 \emph{À l'ombre des jeunes filles en fleur}. 1919
6 \bibitem{mall} Stéphane Mallarmé. \emph{Poésies}. 1899
7 \end{thebibliography}

Pour faire référence aux ouvrages, on utilise alors la commande \cite qui prend
comme paramètre la clé de l’ouvrage concerné.

I Le roman-\cite{germ} de Zola ainsi que


ceux-\cite{swann} et \cite{ojff} de Proust
| Le roman [1] de Zola ainsi que
iceux [MPI] et [MP2] de Proust

Bibliographie
[1] Émile Zola. Germinal. 1885
[MPI] Marcel Proust. Oïl côté de chez Swann. 1913
[MP2] Marcel Proust. À l’ombre des jeunes filles en fleur. 1919
[2] Stéphane Mallarmé. Poésies. 1899

Deux compilations successives sont nécessaires pour que les références indiquent
O bien les entrées de la bibliographie.

5.9 Index
Pour pouvoir générer une entrée d’index avec la commande \ index, il faut au
préalable déclarer trois éléments :
\usepackage{makeidx} dans le préambule;
\makeidx toujours dans le préambule pour demander la construction de l’index ;
\printindex dans le document à l’endroit où on souhaite voir l’index s’afficher.
Ensuite, il faudra lancer dans l’ordre une compilation latex pour produire un
fichier .idx contenant les entrées d’index, puis une compilation avec makeindex pour
les mettre en forme et enfin une compilation latex pour intégrer l’index au document.
Dans les éditeurs comme texmaker, on peut lancer successivement les trois com­
pilations ou créer une commande spéciale (cf. 2.13).
5.10 Flottants 67

\documentclass{article}
\usepackage{index}
\makeidx i
\begin{document} Index I

Niels Bohr\index{Bohr} (1885-1962) est un


Bohr, 1, 2

g
physicien danois\index{Danemark}.

\newpage Danemark, 1
Bohr\index{Bohr} a obtenu le Nobel, 2
prix Nobel\index{Prix Nobel}\index{Nobel}
de physique en 1922. Prix Nobel, 2
\printindex
\end{document}

Les entrées d’index avec des accents doivent être saisies de manière particulière,
avec un 0 comme ceci : \cite{Nucleaire@Nucléaire}. Plus généralement,
O avec la syntaxe \cite{AQB}, A détermine la position alphabétique de l’entrée
tandis que B correspond au texte à afficher pour l’entrée.

Pour produire une sous-entrée, l’argument de la commande \index doit contenir


l’entrée principale et sa sous-entrée, séparées par le caractère !

Page 20 \index{Physique ! quantique} Physique, 42

g Page
Page
Page
28
42
45
\index{Physique ! nucléaire}
\index{Physique}
\index{PhysiqueI relativiste}
nucléaire, 28
quantique, 20
relativiste, 45

Les plages sont produites en plaçant \index{. . . I (} au début de la plage et


\index{... I )} à la fin.

g Page 120
Page 132
\index{AstrophysiqueI(}
\index{Astrophysique|)}
Astrophysique, 120-132

Les renvois peuvent être placés n’importe où et s’écrivent en utilisant le caractère


I suivi du mot see qui sera traduit par le package babel.

\usepackage [french]{babel}
m \index{NobelIsee{Prix Nobel}}
Nobel, voir Prix Nobel

5.10 Flottants
Supposons qu’entre deux paragraphes de texte on insère une image et que celle-ci,
un peu trop haute, ne loge pas sous le premier paragraphe. Elle devra être placée sur la
page suivante. On risque alors de voir un vide disgrâcieux sous le premier paragraphe.
68 Chapitre 5. Composer un livre

DTeX suit les règles de typographie qui considèrent que dans un tel cas, l’image
ne doit pas être absolument attachée à sa position entre les deux paragraphes mais au
contraire pouvoir flotter jusqu’à une position plus appropriée en laissant le texte des
deux paragraphes remplir le mieux possible la place insuffisante laissée par l’image.
On vient de parler des images, mais les tableaux posent le même type de problème.
On a donc deux environnements pour déclarer des flottants.

\begin{figure} [pos] ...\end{figure} \begin{table} [pos] ...\end{table}

Le paramètre pos précise une préférence afin que l’algorithme de placement fasse
au mieux. Le choix est donné entre h, t, b et p pour here : ici, top : en haut de la
page, bottom : en bas de page ou page of float : une prochaine page.
Puisque l’image ou le tableau n’est plus nécesairement positionné près du para­
graphe qui s’y rapporte, il devient indispensable de doter le flottant d’une légende
avec un identifiant unique pour pouvoir y faire référence dans le texte. On utilise
pour cela la commande \caption et les commandes de références croisées (cf. 5.4).

Le manchot Tux (fig. \ref{tux}) Le manchot Tux (fig. 5.1) est la


est la mascotte du noyau Linux. mascotte du noyau Linux.
\begin{figure}[h]

B \begin{center}
\includegraphics{[Link]}
\caption{Tux le manchot} \label{tux}
\end{center}
\end{figure} Figure 5.1 — Tux le manchot

Son auteur est Larry-Ewing. Son auteur est Larry Ewing.

La liste des figures ou des tableaux peut être affichée comme une sorte de sommaire
des flottants avec les commandes \listoffigures et \listoftables.
Table des figures

i \listoff igures
5.1 Tux le manchot 68

Pour faire apparaître la table des figures et la liste des tableaux dans le sommaire,
il faudra les ajouter manuellement avec la commande \addcontentsline (cf. 5.7).
\addcontentsline{toc}{chapter}{\listfigurename}
\addcontentsline{toc}{chapter}{\listtablename}

En général, si le nombre de flottants est raisonnable et que les tailles le sont


aussi, lATgX saura touver des solutions au placement. Dans le cas contraire les
O choses vont grandement se compliquer. On consultera [11] pour une présenta­
tion des subtilités concernant le placement des flottants.
hapitre

Tableaux évolués

Si la construction de tableaux simples est facile (cf. 3.10), dès qu’on souhaite
effectuer des modifications sur un tableau pour en élargir les colonnes, fusionner des
cellules ou modifier l’alignement, on se prend à regretter les facilités offertes par un
tableur. Ce chapitre présente de façon pragmatique des techniques pour résoudre les
problèmes courants le plus simplement posssible.

\usepackage{mult icolumn}
\begin{tabular}{lccc} \hline Val.
è\multicolumn{3}{c}-(Val .}\\ \cline{2-4} Titre A B C

g-
Titre k A Akk

Moy.
k 2 2kk
k
B k C \\ \hline
3k 7 W
12 k 10 k 9 W
k 4 k 11 & 11 W \hline\hline
k 6 k 8 k 9 W \hline
\end{tabular}
W
X
Y___
Moy.
2
12
4
T
3
10 9
7

11 11
"ir ~9
70 Chapitre 6. Tableaux évolués

6.1 Modifier la taille des cellules


Voici le tableau de référence qui va nous servir de base pour la suite :

\begin{tabular}{IcIcIc I } \hline
g"! A A B k C \\ \hline A B C
; 1 ft 2 k 3 \\ \hline
j|x k y k z \\ \hline
1 2 2
x y z
\end{tabular}

6.1.1 Modifier globalement la hauteur des lignes


Redéfinir \arraystretch permet d’augmenter la hauteur de toutes les lignes.

\renevcommand{\arraystretch}{l.8} A B C

I
\begin{tabular}{IcIcIcI } \hline
A k B k C \\ \hline
1 k 2 k 3 \\ \hline 1 2 3
x k y k z \\ \hline
\end{tabular} X y z

6.1.2 Modifier globalement la largeur des colonnes


Redéfinir \tabcolsep permet d’augmenter la largeur des séparateurs entre deux
colonnes.
{ \setlength{\tabcolsep}{6nini}

I
\begin{tabular}{IcIcIcI} \hline A B C
A k Bk C \\ \hline
1 k 2 k 3 \\ \hline 1 _2 2
x k y k z \\ \hline x y z
\end{tabular} }

Redéfinir la largeur des lignes à l’intérieur d’un groupe cerné par des accolades
Q permet de faire porter la redéfinition seulement pour ce groupe, sans affecter
la suite du document.

6.1.3 Modifier la hauteur d’une ligne particulière


Pour augmenter la hauteur d’une ligne, on place un poteau : un segment vertical de
largeur nulle (donc invisible) avec \rule [décalage vertical] {largeurXhauteur}.

^Poteau
\begin{tabular}{|c|clc|} \hline Invisible

B
= | A k B k C \rule[-12pt]{0pt}{30pt} \\ \hline A B C
1 1 k 2 k 3 \\ \hline
x | x k y k z \\ \hline
\end{tabular}
£ 2 3
X y z
6.2 Fusion de cellules 71

6.1.4 Modifier la largeur d’une colonne particulière


Avec le package array (cf. [CTAN]), on ajoute les spécificateurs de colonne p, m et
b qui créent une colonne de taille figée dont on peut préciser la largeur dans laquelle
la boîte de paragraphe est alignée respectivement en haut, au milieu et en bas l.

P Un 1
\usepackago{array}
\begin{tabular}{lp{1.5cm}|p{lcm}|c|} \hline texte
p à Un texte long & 1 \\ \hline long

I
\end{tabular} Un
\begin{ tabular }{ |m{1.5cni}|m{lcm}| c |} \hline
m k Un texte long & 1 \\ \hline m texte 1
\end{tabular} long
\begin{tabular}{|b{1.5cm}|b{lcm}|c|} \hline Un
b & Un texte long ft 1 \\ \hline
\end{tabular}
texte
b long 1

6.2 Fusion de cellules


6.2.1 Fusion horizontale
Pour fusionner horizontalement un nombre nbcols de cellules, y placer un texte
et en définir le format, c’est à dire l’alignement et les séparateurs, on utilise :
\multicolumn{nbcols}{format}{texte}

\begin{tabular}{IcIcIcI} \hline
A & \multicolumn{2}{cI}{B} \\ \hline A B
5 1 k 2 k 3 \\ \hline
O)
1 TT 3
CN x k y k z \\ \hline x Z
\end{tabular}
y

6.2.2 Fusion verticale


Grâce au package multirow il est possible de fusionner, sur une colonne, un nombre
nblignes de cellules et d’y placer un texte sur une largeur définie par larg (ou {♦}
qui laisse gérer la largeur) :
\multirow{nblignes}{larg}{texte} \multirow{nblignes}{*Xtexte}

\usepackage{multirow}
\begin{tabular}{IcIc|cI} \hline B C
S \multirow{2}{*}{A} k B k C \\ \cline{2-3} A
<n 2_ 3
k 2 k 3 \\ \hline
X k y k z \\ \hline
X y 2
\end{tabular}

1. Il est possible d’avoir en plus un alignement horizontal : cf. 6.4.


72 Chapitre 6. Tableaux évolués

6.2.3 Barre oblique dans une cellule


Le package diagbox (cf. [OTAN]) permet de créer une cellule avec une diagonale
avec la commande \diagbox.

\usepackage{diagbox}
\begin{tabular}{I1IcIcI} \hline Titre
Help! More

g
g"l \diagbox{Vendeur}{Titre}
Vendeur
k Help! k More \\ \hline
Alazon ft 18 k 22 \\ \hline Alazon 18 22
Amapage k 19 k 20 \\ \hline Amapage 19 20
\end{tabular}

6.3 Définir la largeur du tableau


Avec les packages tabularx et tabulary2, il est possible de définir la largeur finale
du tableau. Le comportement de chaque package est différent : tabularx donne la
même largeur aux colonnes alors que tabulary répartit les largeurs en fonction du
contenu.
Avec tabularx, on utilise le spécificateur de colonne X. L’ensemble des colonnes
de ce type se répartiront équitablement la largeur disponible calculée à partir de la
largeur spécifiée : dans les exemples suivants, d’abord 4 cm puis la largeur de la ligne.

\usepackage{tabularx}
\begin{tabularx}{4cm}{|cIXIX I }

s
\hline 1 AA Un
1 k AA k Un texte long\dots \\ \hline texte
\end{tabularx}
long-
\begin{tabularx}{\linewidth}{I c | X I X I } 1 AA Un texte
\hline
long...
1 k AA k Un texte long\dota \\ \hline
\end{tabularx}

Avec tabulary, on utilise J (resp. L, C, R) pour des colonnes dont le texte sera
justifié (resp. à gauche, centré, à droite) et dont la largeur sera calculée afin que le
tableau ait, au final, la largeur demandée.

\usepackage{tabulary,cale}
\begin{tabulary}{4cm}{|cICI J 1} \hline 1 AA Un texte
1 & AA k Un texte long long long\dots\\\hline long long
\end{tabulary}
long-
\begin{tabulary}{\linevidth}{|c|C|J I> \hline 1 AA Un texte long long
1 k AA h Un texte long long long\dots\\\hline
\end{tabulary} long-

2. Qui s’utilise conjointement au package cale.


6.4 Définir un type de colonne 73

6.4 Définir un type de colonne


Il est possible de créer des types de colonnes personnalisés en plus de ceux définis
par défaut (1, r, c, p, m ou b). Il faudra choisir une lettre, éventuellement donner le
nombre d’arguments et la définition de cette nouvelle commande.

\newcolumntype{lettre}[[Link].]{déf inition}

Dans la définition3, on utilisera une syntaxe particulière qui permet de placer


des commandes ou du texte txt_deb juste après l’entrée dans la colonne ou juste
avant sa sortie txt_f in de la manière suivante :

>{txt deb} <{txt fin}

\usepackage{array}
\newcolumntype{H}{>{deb .}c<{.fin}}-
A [Link] C
\begin{tabular I c I H I c I )■ \hline
A k B k C \\ \hline
1 [Link] 2
1 k 2 k 3 \\ \hline x [Link] Z
x k y k z \\ \hline
\end{tabular}

Cette technique permet de simplement passer en mode mathématique ou d’ajouter


du texte dans des colonnes.
\usepackage{array}
\nevcolumntype{T}{>{$}c<{$}}
\newcolumntype<P}{>{Ens. des 11}
R Ens. des réels____________

S \begin<tabular}{I T I P I }
\mathbb{R} k réels
\mathbb{Z} & entiers
\hline
\\ \hline
\\ \hline
S(X) k permutations de $X$ \\ \hline
Z
S(X)
Ens. des entiers
Ens. des permutations de X

\end{tabular}

Avec un argument, on peut définir un nouveau type de colonne de largeur fixe


(comme p cf. 6.1.4) dont le contenu sera centré horizontalement.

\usepackage{array}
\newcolumntype{Q} [1]{>{\centering}p{#111
A B C

I \begin{tabular}{|clQ{2cm}|c|} \hline
A I
1 *
x k
B t C \\ \hline
2 t 3 \\ \hline
y k z \\ \hline
\end{tabular}
1
x
2_
y
2
Z

3. Ou directement dans la déclaration de colonnes de l’environnement tabulai-.


74 Chapitre 6. Tableaux évolués

6.5 Couleurs dans un tableau


On peut mettre en couleur une cellule avec la commande \cellcolor{couleur}
du package colortbl.

\us©package{colortbl}
A B

B
\begin{tabular}{IcIcIcI} \hline C
A k B II C \\ \hline
1 k 2 k \cellcolor{lightgray } 3 \\ \hline
1 2 3
x k y II z \\ \hline X y z
\end{tabular}

On peut mettre en couleur une ligne entière en plaçant dans la première colonne
de la ligne, la commande \rowcolor{couleur}.

\usepackage{colortbl}
\begin{tabular}{IcIcIcI} \hline A B c
A IIBIIC\\\hline
\rowcolor{lightgray} 1 k 2 k 3 \\ \hline 1 2 2
x k y k z \\ \hline X y z
\end{tabular}

On peut mettre en couleur une colonne entière en modifiant le format de colonne


avec la commande \cellcolor{couleur}.

\usepackage{colortbl}
\begin{tabular}{IcI>{\cellcolor{lightgray}}cIci}
£ \hline A B C
x A k B k C \\ \hline
CO
1 k 2 k 3 \\ \hline
1 ;2 2
x y z
' ' x k y II z \\ \hline
\end{tabular}

Pour simplifier la mise en couleurs des lignes paires et impaires, le package x col or
chargé avec l’option table permet d’utiliser la commande suivante dans laquelle l’en­
tier n désigne le numéro de la première ligne à colorier :

\rowcolors{n}{couleurImpair}{couleurPair}

\usepackage[table]{xcolor}
\rowcolors{2}{gray}{lightgray}
\begin{tabular}{Ic|c|c|} \hline
A B C

I 2
A k B k C \\ \hlin© 1 3
2 1 k 2 k 3 \\ \hline
”1 x k y k z \\ \hline
Fx" ÿ
“ 4 k 5 II 6 \\ \hline
~4 5 6
X kY k Z \\ \hline lX Y
\end{tabular}
6.6 Tableaux de proportionnalité 75

6.6 Tableaux de proportionnalité


On présente ici plusieurs manières de construire des tableaux de proportionnalité.
Tout d’abord avec la commande \multirow, les deux cellules de la dernière colonne
sont fusionnées pour recevoir l’opération. La flèche est \curvearrowright ('-•) agran­
die et tournée de 90°.
\usepackage{multirow}
\usepackage{graphies}
\usepackage{amssymb}
\newcommand{\prop}[1]

B
l {\multirow{2}{*}{\rotatebox[origin-c]{-90}
{\LARGE$\curvearrowright$} #1}} Volume 1 3
•h \renewcommand{\arraystretch}{2}
)x2
Poids 2 6
\begin{tabular}{I1IcIcIr} \cline{l-3}
Volume 4 1 à 3 & \prop{$\times 2$}\\ \cline{l-3}
Poids k 2 k 6 & \\ \cline{l-3}
\end{tabular}

Avec PSTricks, on procède très différemment. Avec \rnode, on crée deux nœuds
de largeur nulle (avec \vphantom) dans la quatrième colonne invisible. La commande
\ncangle dessine alors le connecteur et \naput y positionne l’étiquette. Simple et
efficace !
\usepackage{pstricks-add}
\renewcommand{\arraystretch}{2} i
i
2 \begin{tabular}{I1IcIcIr} Volume 1 3
‘ \cline{l-3} x2
Volumeftlft3fc\rnode{A}{\vphantom{A}}\\ \cline{l-3}
Poids 42&6&\rnode{B}{\vphantom{B}}\\ \cline{l-3}
Poids 2 6
\end{tabuler}
\ncangle{->}{A}{B} \naput{$\times 2$}

En ajoutant des options aux commandes de l’exemple précédent, on améliore beau­


coup l’allure de l’opération permettant de passer de la première à la seconde ligne du
tableau de proportionnalité.

\usepackage{pstricks-add}
\renewcommand{\arraystretch}{2}

\begin{tabular}{|1IcIcIr}
\cline{l-3}

U Volume &l!t3l:\mode {A}{\vphantom{A}}\\ \ cl inet 1-3}


Poids £246ft\rnode{B}{\vphantom{B}}\\ \cline{l-3}
\end{tabular}

\ncangle[linearc-0.3,
arm «7 mm,arrowsize“2mm]{->}{A}{B}
Volume

Poids
1

2
3

6
i

\naput[labelsep--!.5em]{
\psovalbox [fillstyle»solid, fillcolor»white]
{$\times 2$}}
76 Chapitre 6. Tableaux évolués

Bien entendu, TikZ est capable de produire des résultats semblables. L’option
remember picture est importante : elle va permettre de conserver les noeuds définis
dans le tableau pour un usage dans l’environnement tikzpicture. L’option overlay
permet de tracer par dessus le texte précédent. Pour tracer le connecteur en ligne
brisée, on construit deux nœuds supplémentaires : AA et BB respectivement à 3 mm
à droite des nœuds A et B. L’étiquette indiquant l’opération est placée à droite du
segment liant AA et BB.

\usepackage{pstricks-add}
\renewcommand{\arraystretch}{2}

\tikzstyle{every picture}*"[remember picture]

a
\begin{tabular}{ 111 c | c I r} \cline{l-3}
Volumeklk3lt \tikz\node (À){} ; \\ \cline{l-3}
Poids A2464 \tikz\node(B){}; \\ \cline{l-3}
Volume 1 3
\end{tabular}
Poids 2 6
\begin{tikzpicture}[overlay] 11 ............
\coordinate[right-3mm of A] (AA);
\coordinate[right-3mm of B] (BB);
\drav[->] (A)—(AA)—node[right] {$\times 2$}(BB) —(B);
\end{tikzpicture}

Dans ce dernier exemple, on a remplacé le tracé en ligne brisée par un connecteur


courbé avec to [bend left=90]. Par ailleurs, l’étiquette est ici un cercle qui est rempli
d’un fond blanc et sa marge a été réduite au minimum.

\usepackage{pstricks-add}
\tikzstyle{every picture}+■[remember picture]
\reneucommand{\arraystretch}{2}
\begin{tabular}{|1|c|cIr}
\cline{l-3}
Volume à lft3lt \t ikz\node ( A) {} ; \\ \cline{l-3}

H Poids A2&6A \tikz\node(B){}; \\ \cline{l-3}


Volume 1 3
\end{tabular}
\begin{tikzpicture}[overlay] Poids 2 6
\draw[->, >"latex] ([Link])
to[bend left«90]
node[inner sep-lpt, circle,fill-white,draw]
<$\tiœes 2$} ([Link]);
\end{tikzpicture}

6.7 Création assistée de tableaux


La création de tableaux avec lATgX reste assez difficile. Dès qu’il s’agit de fusionner
des cellules, les choses sont compliquées. Des outils existent sur Internet qui proposent
des interfaces simples pour créer un tableau. Une fois le travail effectué, il ne reste
plus qu’à cliquer sur un bouton pour générer le code correspondant :
— [Link]
— [Link]
hapitre

Tableaux de variations

Dans ce chapitre, on présente deux packages différents, au choix, pour construire


des tableaux de variations de qualité. L’avantage de la construction de tableaux avec
ces packages réside dans la facilité à les modifier. De l’avis d’un grand nombre d’utilisa­
teurs, si la construction des premiers tableaux prend un peu de temps, on se constitue
rapidement une petite bibliothèque de tableaux types à copier-coller pour répondre
aux nouveaux besoins avec quelques changements rapides.

\C
\begin<tabvar}{ICICCCCCI} \hline
x & 0 k k 1 k k +\infty\\ \hline
f(x) k k + k k - k \\ \hline X 0 1 +oo
‘gj \niveau{l}{2}\TVcenter{f (x)>
&-1 t\croit +
o k \TVstretch{0} 0
~ ft\decroit
k -\infty\\ \hline
-1 —00

\end{tabvar>
\]
78 Chapitre 7. Tableaux de variations

Avec tabvar
Pour créer des tableaux de variations, l’environnement tabular s’avère très insuf­
fisant. Cependant, les principes fondamentaux (& pour le changement de cellule et \\
pour le saut de ligne) restent valables (cf. 3.10).
Le package tabvar propose une syntaxe adaptée pour la construction de tableaux
de signes et de variations, accompagnée d’une documentation très claire (cf. [CTAN]).
Dans l’exemple suivant, on commence par définir les colonnes -il y en a six- en
utilisant la lettre C majuscule. On construit ensuite les deux premières lignes et leurs
filets horizontaux de manière classique.
La ligne des variations est en fait composée de deux niveaux, la flèche croissante
passant du niveau 1 (celui qui contient 3) au niveau 2 (qui contient 5) puis la flèche
décroissante repassant au niveau 1 (qui contient 4).
On place f(x) au niveau 1 parmi 2, c’est dire le plus bas. L’indication du nombre
de niveaux est indispensable au fonctionnement de tabvar. Les commandes \croit
et \decroit agissent à partir du niveau de référence courant.

\usepackage{tabvar}

a
\[\begin{tabvar}{ICICCCCC I }
\hline x o 1 2
x k 0 k k 1 k k 2 \\ \hline
f(x) k k + k k k \\ \hline /'(*) +
\niveau{l}{2}f(x) 0
k 3 k\croit k 5 k\decroit k 4 \\ \hline
\end{tabvar}\] /(z) 3 4

Des améliorations sont possibles. D’abord, on décolle du filet horizontal le maxi­


mum de la fonction /(l) = 5 avec la commande \TVstretch{5} qui ajoute une
petit expacement. Ensuite, on améliore l’allure des flèches en plaçant la commande
\FlechesPS41 dans le préambule. Enfin, on centre f(x) dans sa cellule avec la com­
mande \TVcenter.
Les deux commandes incluant \TVarrowscolstretch et \TVarraycolsep ont
pour but respectivement d’élargir les colonnes contenant des flèches et d’augmenter
l’espace entre les colonnes. Ceci afin d’aérer le tableau.

\usepackage{tabvar}
\FlechesPS4
\renewcommand*{\TVarrowscolstretch}{l .2}
\setlength{\TVarraycolsep}{2pt}
x 0 1 2

I
\[\begin{tabvar}{ICICCCCCI}
\hline
x k 0 k k 1 k k 2 \\ \hline /'(*) +
f(x) k k + k k k \\ \hline
\niveau{l}{2}\TVcenter{f(x)}
5
/(x) 3 4
k 3 k\croit k \TVstretch{5} k\decroit k 4\\
\hline
\end{tabvar}\]

1. \FlechesPS3, \FlechesPS2 et \FlechesPSl sont aussi disponibles.


7.1 Avec tabvar 79

Pour les fonctions dont le domaine de définition présente un trou, on utilise le


type de colonne U majuscule et on choisit la largeur avec la commande \hspace*.
Afin que les abscisses 2 et 3 soient bien collées à la zone grisée, on choisit pour elles
un alignement respectivement à droite (R pour right) et à gauche (L pour left).
Profitons egalement de cet exemple pour évoquer la commande \constante qui
trace une flèche horizontale.

\usepackage{tabvar}
\ [\begin{ tabvar }{ I C I CCRULCC I }
\hline

B x & 1 à
fk k +
k 2 k
k
\niveau{l}{2}f(x)
k 5 !t\croità 6 te
\end{tabvar}\]
k 3 k
k \hspace*{1cm} k k 0
k 4
k

& 7 H\constanteft 7
W \hline
W \hline
\\ \hline

x 1 2 3 4

f' + 0
6 7 ---- - 7
/(*) 5 :

Dans l’exemple suivant, la ligne des variations présente trois niveaux. On place
f(x) au niveau 2 parmi 3, puis la limite (limx_»_Qo f(x) = +oo) au niveau 3 parmi
3. La discontinuité est gérée par un placement manuel de la limite à droite en 0 au
niveau 3 parmi 3.

\usepackage{tabvar}
\[\begin{tabvar}{ICICCCCRCLCC I } \hline
x à-\infty k k -1 k k k 0 & ft ft+\inf ty w
\hline

B
f'(x)k k - ft\barre{} & - k à\dbarre k k - k 0 W
\hline
» I\niveau{2}{3}f(x)
—I k \niveau{3}{3}+\infty t\decroit k \barre{0} è\decroit à -\infty
fc\dbarre k \niveau{3}{3}+\infty lt\decroit k 0 \\
\hline
\end{tabvar}\]

X —oo -1 0 +00

f'M 0
+oo +oo
/(*) 0
—00
80 Chapitre 7. Tableaux de variations

7.2 Création assistée


L’auteur de Texmaker, propose Pstplus (http : //www. xmlmath. net/pstplus/) un
outil qui permet, entre autres, de générer le code compatible avec tabvar pour des
tableaux de variations à contruire dans une interface simple et ergonomique.
Après avoir construit un tableau dans l’interface, il suffit de copier-coller le code
généré dans un document MjÿG

n, ft, >«*• • ■

In 3

1 - 0 +
0
- I -
- 0 ♦
i

.............. ........... ...

u________________ ___ ]

7.3 Avec tkz-tab


Le package tkz-tab propose une approche différente pour la construction de ta­
bleaux de variations. La syntaxe est un peu plus complexe que celle de tabvar mais
elle permet toutes les subtilités. La documentation est en français et elle est particu­
lièrement détaillée (cf. [CTAN]).

Tableaux de signes
Commençons par un tableau de signes simple afin de comprendre le fonctionne­
ment général.
La commande XtkzTablnit permet de construire la première ligne et la première
colonne du tableau. Cette commande réclame comme arguments deux listes :
— la première contient autant d’éléments qu’on veut de lignes dans le tableau
(deux dans l’exemple). Les éléments sont des paires du type x/1 pour une ligne
de 1 cm de haut contenant x comme titre de la ligne ;
— la seconde liste contient autant d’éléments qu’on veut d’antécédents. À un an­
técédent correspond une colonne.

\usepackage{tkz-tab}
\begin{tikzpicture}
0 ES
B \tkzïablnit{x / 1 , f(x) / 1}
{al, a2, a3}
\tkzTabLine{1,2 ,3,4 ,5 }
\end{tikzpicture} El ® ® ® ® ®
7.3 Avec tkz-tab 81

La commande XtkzTabLine qui dessine la partie tableau de signes prend comme


argument une liste constituée de symboles.
— Les symboles de rang pair, placés entre les antécédents, sont :
— soit des signes -F ou - ;
— soit la lettre h pour signaler une zone interdite ;
— soit un espace pour une absence de symbole.
— Les symboles de rang impair, placés sous les antécédents, sont :
— soit la lettre t pour un trait pointillé ;
— soit la lettre z pour un trait pointillé traversé par un zéro ;
— soit la lettre d pour une double barre ;
— soit un espace pour une absence de symbole.
Voici un exemple simple :

s
\usepackage{tkz-tab}
\begin{tikzpicture} x 3 4 5
\tkzTabInit{x / 1 , P / 1}
{3, 4, 5}
\tkzTabLine{ ,z,+ , } P 0 +
\end{tikzpicture}

Parmi les options possibles pour modifier la présentation du tableau, on trouve :


— Igt : largeur de la première colonne (2 cm par défaut) ;
— espcl : espacement entre deux valeurs (3 cm par défaut) ;
— deltacl : marge avant le premier antécédent et après le dernier (0,5 cm par
défaut).

\usepackage{tkz-tab}
\begin{tikzpicture}
\tkzTabInit [lgt-1, espcl-1.2 , deltacl =0.3]
x -5 0 1 2 5
{$x$ / 0.6, $P(x)$ / 1}
(-5, 0, 1, 2, 5} P(x) 0 +
\tkzTabLine{ z,-, t,+, d,h, d,-, }
\end{tikzpicture}

On peut ajouter autant de lignes qu’on le souhaite en les définissant dans avec la
commande XtkzTablnït et en les complétant dans XtkzTabLine.

\usepackage{tkz-tab}
\begin{tikzpicture} x -5 1 2 5
\tkzTabInit[lgt-1,espcl-1.2]
{$x$/0.8, SPS/0.5, SQS/0.5, $PQ$/1} P 0 +
\tkzTabLine{
{-5 ,
, - ,
1 , 2 ,
, - , z , + , }
5}
Q + +
\tkzTabLine{ , - , d , + , , + , }
\tkzTabLine{ , + ,d,-,z, Z + »> PQ + o +
\end{tikzpicture}
82 Chapitre 7. Tableaux de variations

Tableaux de variations
Fondamentalement, la ligne des variations possède deux zones horizontales : la
zone du haut et celle du bas. Elle est construite par la commande XtkzTabVar qui
prend pour argument une liste d’éléments (autant que d’antécédents) séparés par des
virgules.
Par exemple pour placer un élément a sur la zone du haut, on utilise +/a, pour
ensuite tracer une flèche décroissante jusqu’à un autre élément b, on ajoutera -/b
après une virgule. Voici un exemple :

\usepackage{tkz-tab}
x 0 1 3

B
\begin{tikzpicture}
\tkzTab!nit{x/l,f'(x)/2>
{0,1, 3 }
XtkzTabVar { +/5 , -/4 , +/6 }
\end{tikzpicture}
f

Pour marquer une discontinuité, on utilise la lettre D entourée de deux signes qui
donnent la position des limites à gauche et à droite.
Dans l’exemple suivant, «-D+/4/7» signifie qu’autour de la discontinuité :
— La limite à gauche, 4, sera placée en bas (signe - à gauche de D)
— La limite à droite, 7, sera placée en haut (signe + à droite de D)

\usepackage{tkz-tab}

\begin{tikzpicture}
co XtkzTabInit{x/l,f'(x)/2)

{ 0 , 1 3 }
Ô XtkzTabVar{+/5 , -D+/4/7 , -/6}
Lïl
\end{tikzpicture}

Si le domaine de définition présente un trou entre deux intervalles on utilise la


lettre H, éventuellement combinée avec la lettre D pour obtenir une double barre.
Dans l’exemple suivant : -DH / 5 signifie que :
— La zone qui suit 5 est interdite (lettre H)
— La limite à gauche : 5, sera placée en bas (signe - à gauche de D)
En revanche, la valeur /(3) est atteinte : le domaine de définition est [0,1 [u[3,4].

\usepackage{tkz-tab} x 0 1 3 4
\begin{tikzpicture}

B XtkzTablnit[lgt-1,espcl»2]

{ 0 ,
{$x$/l,$f$/2}
1,3,4}
XtkzTabVar{+/6 , -DH/5 , +/7 , +/?}
\end{tikzpicture}
f
6 7

5
7.4 Création assistée 83

L’exemple suivant donne un petit aperçu de ce qui est possible mais une lecture
attentive de la documentation est recommandée pour découvrir les nombreuses pos­
sibilités.

\usepackage{tkz-tab}
\begin{tikzpicture}
XtkzTablnit [lgt-1.4,espcl-2.2]{$x$/l,$f'(x)$/l,$f$/!}
{ $-\infty$ , $-1$ , $0$ , S+\infty$}
\tkzTabLine{ , d, - ,0}
XtkzTabVar {+/$+\infty$ , R/ ,-D+/$-\infty$/$+\infty$,-/O}

7» ajoute 0 pour l'element n°2 sur la flèche l->3


XtkzTablma[draw]{l}{3}{2}{$0$}
\end{tikzpicture}

X — 00 -1 0 + 00

f'tf) 0
T
+ 00 + 00
f 0 -00 0

7.4 Création assistée


Pour simplifier la création de tableaux de variations en TiKZ (mais pas tkz-tab),
le site http : //math. et. inf o. f ree. fr/TikZ/Complements. html propose une inter­
face très intuitive.

SE
-\infty '*\d-ract5}{3} +\lnfty
f'(x)
SSSKSl
J. 0
\infty
f(x) 0 Iù‘.2Ainfty;e 5
,
Il faut également signaler l'existence de l'excellent package tkz-tab qui permet de créer des tableaux de
variations très « propres ».

[Link] est un package créé par Alain Matthes pour créer à l’aide de TikZ des tableaux de
signes et de variations le plus simplement possible. Il est dépendant de TikZ et fera partie d’une
série de packages ayant comme point commun, la création de dessins utiles dans l’enseignement
des mathématiques. La documentation de ce package se trouve ici :

[Link]

Le site d'Alain Matthes contient de nombreux fichiers très intéressants pour le professeur de
mathématiques, il n'y a qu'à copier-coller :

[Link]
Chapitre

Mathématiques

Voilà bien la spécialité de TgX qui fut conçu par Donald Knuth à partir de 1977
pour répondre aux insuffisances des logiciels d’édition, notamment pour les ouvrages
scientifiques. L’écriture de formules mathématiques n’est pas si difficile et l’arrivée
d’outils d’analyse comme ceux présentés à la fin de ce chapitre simplifie encore le
travail.

\usepackage{arnsmath}
\begin{align*} r_______ r7

a
\int _0~l\sqrt{l-x~2}dx 1 - x2dx = V 1 - sin21 cos tdt
&=\int_0~\frac{\pi}{2} Jo
\sqrt{l-\sin'‘2t}\cos t dt\\ 1 4- cos2t ,
&=\int_0"\frac{\pi}{2}
\frac{l+\cos 2t}{2}dt\\ ■J. ~^—d‘
ft=\frac{\pi}{4} 7T
\end{align*} ~ 4
86 Chapitre 8. Mathématiques

8.1 Deux modes pour écrire des mathématiques


Le point fort de lAT^X. c’est évidemment la composition de textes scientifiques. On
distingue deux types de modes mathématiques :
le mode « en ligne » entre deux symboles dollar $ ... $ pour de courtes inser­
tions de formules mathématiques dans un paragraphe de texte ;
le mode « hors ligne » entre \ [ ... \] pour de grandes formules mathématiques 1
dans un paragraphe séparé.
Ces deux modes ne produisent pas les mêmes résultats :

Une formule en ligne : Une formule en ligne : f(t)dt est nulle.

H $\int_a~b f(t) dt$ est nulle.

£ La même hors ligne :


\[ \int_a"b f(t) dt -0 \]
La même hors ligne :

rb
a
f(t)dt = 0

Par défaut (et c’est l’usage courant), centre horizontalement les formules
hors ligne. Si vous préférez les formules alignées à gauche, ajoutez f leqn aux
options de \documentclass.

\documentelass[fleqn]{article} Une formule en ligne : f(t)dt est nulle.


Une formule en ligne :

5 $\int_a~b f(t) dt$ est nulle.


La même hors ligne :
rb
La même hors ligne : \ /(t)dt = O
\[ \int_a~b f(t) dt "0 \]
a

8.2 Fractions, indices, exposants et racines


Pour les fractions, on utilise \f rac{num}{den} ou, grâce au package amsmath, une
taille supérieure \df rac{num}{den} qui force le style « hors ligne » appelé displaystyle
(cf. 8.7).

\usepackage{amsmath}
Une fraction,
2

n
petite : $\frac{2}{3}$ Une fraction, petite : | ou grande : -
ou grande : $\dfrac{2}{3}$ O

\[ 1 1
\frac{l}{2+\frac{3}{4+5}} 2Z + ~3“
\qquad + -2-
4+5 2+
\frac{l}{2+\dfrac{3}{4+5}} 4+5
\]

1. En tant que commande obsolète, $$_$$ devrait être évité car elle produit des résultats
parfois décevants, mais on le trouve fréquemment à la place de \ [ ... \].
8.3 Écrire du texte dans un mode mathématique 87

Pour les indices et exposants, on utilise respectivement les caractères _ et ~ qui sont
bien sûr compatibles entre eux. Notez l’usage des accolades qui créent des groupes.

$E-mc~2$ \qquad $H_30~+ + 0H~- - 2H_20$


E = me2 H3O+ + OH- = 2H2O
$x_0~{4~2}$ est égal à $x_0"{16}$ X.4q3 est égal à Xq6 et non Xq6
et non $x_0~16$

Les racines nlèmes s’obtiennent grâce à la commande \sqrt [n] {123} ou simple­
ment \sqrt{123} (square root) pour la racine carrée :

RU
m \sqrt [4] {16}«\sqrt{\sqrt-{16}}-\8qrt{4}-2 16 = 4=2
S \j

8.3 Écrire du texte dans un mode mathématique


On a parfois besoin d’alterner des formules et du texte. Dans le mode en ligne,
c’est simple, il suffit d’écrire les formules entourées de signes dollar dans le corps de
texte. Pour le mode hors ligne, c’est différent : si on sort du mode hors ligne, on crée
un nouveau paragraphe.
Pour insérer une portion de texte au sein d’une formule mathématique hors lignes,
on utilise la commande \text.

Ru
o \forall x>0, \text{ on a } l/x>0 Vx >0, on a 1/x > 0
111 \]

8.4 Lettres grecques


a \alpha 0 \beta 7 \gamma ô \delta
6 \epsilon E \varepsilon c \zeta V \eta
0 \theta L \iota K \kappa X \lambda
P \mu U \nu e \xi 7T \pi
w \varpi P \rho Q \varrho a \sigma
Ç \varsigma T \tau v \upsilon 4> \phi
\varphi X \chï \psi w \omega
r \Gamma & \Delta e \Theta A \Lambda
E \Xi n \Pi E \Sigma $ \Phi
\Psi Q \0mega

[ïï| $E - h \nu$ et $p-\dfrac{h}{\lambda}$ i E = hv et p = —


I_________A
88 Chapitre 8. Mathématiques

8.5 Une sélection de symboles mathématiques


± \pm x \times -r \div
\neq \simeq \sim
\equiv * \not\equiv « \approxeq
% \approx <] \triangleleft o \triangleright
< \lt , < \le , \leqslant « \11
> \gt , > \ge , \geqslant » \gg
u \cup n \cap \ \setminus
e \in 9 \ni , \owns t \not\in , \notin
c \subset O \supset £ \varsubsetneq
C \complement 0 \varnothing O \circ
\bullet \cdot \star
V \forall 3 \exists i \nexists
A \wedge d \partial V \nabla
\Rightarrow \Leftarrow \Leftrightarrow
\rightarrow , \to \leftarrow
\mapsto \hookrightarrow \rightharpoonup
I \mid , I II \parallel 1 \perp
£ \ell oo \infty \vdots
\ldots \cdots \ddots

r \forall x \ge 0$, Sx\div 2 \in [0,+\infty[


\]

The Comprehensive
Vs > 0, x 4- 2 e [0, +oo[

Symbol List [2], disponible sur le Web propose une


ipressionnate liste de symboles disponibles.

8.6 Une sélection de polices mathématiques


Code Type_________ Aperçu
$ABC abc $ Normal ABC abc
$\mathrm{ABC abc}$ Roman ABC abc
$\mathbf{ABC abc}$ BoldFace (gras) ABC abc
$\mathbb{ABC}$ Blackboard ABC<*>
$\mathcal{ABC} $ Calligraphie ABC
$\mathfrak{ABC}$ Fraktur
$\mathscr{ABC}$ Script
Nécessite \usepackage{ajasfontB} (**)Nécessite \usepackage{œathrsfs} (cf. [CTAN])

ï
\usepackage{amsfonts}
\[
x \in \mathbb{N} \Rightarrov x \in \mathbb{Z} x g N => x e Z
8.7 Une sélection d’opérateurs mathématiques 89

8.7 Une sélection d’opérateurs mathématiques


\min \max \inf \sup \liminf \limsup \lim

Ces opérateurs peuvent être surchargés d’indices, par exemple :

E \lim_{x\to 0} f(x) - f(0)


lim/(x) =/(O)
" \1 x—»0

Par défaut, l’affichage en ligne est compacté. On peut cependant forcer l’affichage
pleine taille avec la commande \displaystyle (cf. 8.2).

$ \li«_{x\to 0} f(x) - 1
I pj \displaystyle\lim_{x\to 0} f(x) - f(0) $
’ limI_o/(x) = xlim
, —»0
f(x) = /(O)

2 \sum J \int JJ \iint ["[ \prod


U \bigcup A \bigcap © \bigoplus (x) \bigotimes

Ces opérateurs peuvent être surchargés d’indices et éventuellement d’exposants.

l
3
x I \sun_{n-l}~{3} n ■ \int_-(l}''6 1 dt 2 n = T Idt
n=l

Ci-dessus, plutôt que «1 dt», on gagnerait à écrire «1\ ,\mathrm{d}t» pour


O obtenir le d droit légèrement éloigné de la fonction : 1 dt.

8.8 Une sélection de fonctions mathématiques


Il ne s’agit pas de faire du calcul avec ces fonctions mais d’afficher correctement
leur nom, c’est à dire en lettres droites : cos(x) et non cos(x).

\cos \sin \tan \cot \arccos \arcsin \arctan


\cosh \sinh \tanh \coth \arg\cosh \arg\sinh \arg\tanh
\min \max \inf \sup \liminf \limsup \lim
\exp \ln \log \det \ker \dim

Pour les congruences on dispose de \mod, \pmod (avec parenthèses) et \pod.

H
\usepackage{amsmath} 1 = 5 mod 4;
$l\equiv 5 \mod{4}$; \\ 2 = 7 (mod 5);
$2\equiv 7 \pmod{5}$; \\
$3\equiv 9 \pod{6}$ 3 = 9 (6)
90 Chapitre 8. Mathématiques

Pour créer un nouvel opérateur mathématique on utilise, dans le préambule,


\DeclareMathOperator et sa forme étoilée si l’opérateur est susceptible de prendre
des limites. On peut aussi redéfinir un opérateur existant :

\renewcommand{\commande)-\operatorname{def }}

Dans l’exemple suivant, on définit la fonction \bary et on redéfinit \arccos.

\usepackage{amsmath}
\DeclareMathOperator{\bary}{Barycentre}
£ \reneucommand{\arccos}{\opérâtorname{Ac os}} Barycentre((A, 1); (B, Acos(3)))
JS mieux que
$\bary((A,1);(B,\arccos(3)))$ \\ Barycentre((A, 1); (B, arcsin(3)))
mieux que \\
$Barycentre((A,1);(B,\arcsin (3)))$

8.9 Soulignements, surlignements et chapeaux


Aperçu Code Aperçu Code

ABC \underbrace{ABC} ABC \overbrace{ABC)-

à ABC \hat{a} \widehat{ABC} À \mathring{A}


à ABC \tilde{a} \widetilde{ABC} A \overline{A}
AB \wideparen{AB} (♦) À \dot{A}
AB overset{\curvearrowrightXAB}} <*♦> À \ddot{A}

^Nécessite \usepackage{ymath} (**>Nécessite \usepackage{mathabx} (cf. [CTAN])

\usepackage{amsmath}
Important : A = A

Io* \underline{Important} :
$\overline{A} ■\overline{\overline{A}}$

\[ \underbrace{ a+b+\ldots+z }_{26} \]


fl -b b ~b ... -F z
26

Le package esvect (cf. [CTAN]) permet l’utilisation de la commande \vv qui


améliore l’allure des flèches des vecteurs comme le montre le comparatif suivant :

Aperçu Code
üAB \vec{u} \vec{AB}
U AB \overrightarrow{u} \overrightarrow{AB}
u AB \w{u} \w{AB} (Nécessite \usepackage{esvect})
8.10 Délimiteurs élastiques 91

8.10 Délimiteurs élastiques


Autour d’une fraction, les parenthèses (ou tout autre délimiteur) devraient avoir
une hauteur plus grande qu’autour d’un nombre par exemple. La taille des délimiteurs
suivants va s’adapter à la taille de l’expression qu’ils entourent grâce aux commandes
\left délimiteur et \right délimiteur :

Aperçu Code Aperçu Code


“W m n*r nn
w < X > {*} \{ X \} ou \lbrace X \rbrace
1*1 I X I ou \vert X \vert ii*i \| X \l ou Wert X Wert
[*J \rdbrack X \rdbrack iii*i i \vwert X \vvvert <**>

o
£ \usepackage{amsmath}
\[ \left< \Phi I \Phi \right> -1 \] = 1

\usepackage{amsmath}
Que préférez-vous ? Que préférez-vous ?
\[
2_ I \int_0~{+\infty}f(t)dt I +00
£ \text{ ou } ou f(t) dt
\left| \int_0~{+\infty}f(t)\,dt \right|
\]

Le délimiteur invisible «.» permet de se libérer de la contrainte d’appariement.

\usepackage{amsmath}
---------------- I
_ \[ •
2 \ln \left( \frac{l+x}{l-x} !
’ X3 X5
\right) 1 +x
-2 \left( x+\frac{x~3}3+\frac{x"5}5+\dots lin
‘ 1—x
=2 3 + 5 + *’*|
\right. L
\]

8.11 Alignement d’équations


Pour aligner les étapes d’un calcul sur le signe égal, on utilise l’environnement
mathématique align*.

\usepackage{amsmath}
•7T ■TT
\begin{align*} 1 — cos(2t)dÉ
\int_0~\pi\sin~2(t) dt sin2(t)dt = !
2

g
&=\int_0~\pi \frac{l-\cos(2t)dt}{2} \\ Jo
TT :
t[
\frac{l}{2> (t-\sin(t)\cos(t) ) = - sin(t) cos(t))
\right]_0"\pi \\ > JO I
ft-\frac{\pi}{2} 7T
\end{align*} = 2
92 Chapitre 8. Mathématiques

L’environnement align (sans astérisque) numérote par défaut les lignes, sauf si on
le demande explicitement. Les commandes \label et \ref permettent respectivement
de référencer et de rappeler une ligne numérotée.

\usepackage{amsmath}
\begin{align} (a 4- b)2 = a2 4- 2ab + b.2 (8.1)
(a+b)~2 k- a"2+2ab+b~2 \label{IRl}\\

I
g] (a-b)~2 k« a~2~2ab+b~2 \nonumber
(a+b)(a-b) A- a~2-b~2
o \end{align}

l'équation \ref{IRl} est appelée


\\ (a — b)2 = a2 — 2ab 4- b2
(a 4- b)(a — b) = a2 — b2

l’équation 8.1 est appelée première


(8.2)

première identité remarquable. identité remarquable.

| Le principe des références croisées est détaillé dans la section 5.4.

8.12 Empilements
Pour placer deux éléments l’un au dessus de l’autre, on dispose des commandes
\substack, \overset et \underset.

\usepackage{amsmath}

B $\substack{A \\ B}$
$\overset{A'}{B'}$
$\underset{A' '}{B ' ’}$
substack
A'
overset \B' underset :B"
A"

a
\usepackage{amsmath}
\C A-(a_{ij})_{\substack{i\in I \\ j\in J}} A— te/
je J

\[ X \overset{\text{def \quad
f(x)\underset{x-l}{“}0 \] X à= Y f(x) = 0
X=1

Pour les coefficients binomiaux on dispose de la commande \binom.

B \usepackage{amsmath}
\[ \binom{n}{p} - \frac{n!}{p!(n-p)!} \]
0-
La commande \xrightarrow[auDessousFacultatif] {auDessus} permet d’affi­
n!
pl(n — p)!

cher une flèche élastique dont la longueur s’adapte au(x) texte(s).

x—*0

B® \usepackage{amsmath}
\[ f(x,y) \xrightarrow {x\toO}f(0,y) \]
\[ y\xrightarrow [\text{par déf.}]{y\toO} 0 \] y-o
y par déf. 0
8.13 Systèmes, matrices et tableaux mathématiques 93

8.13 Systèmes, matrices et tableaux mathématiques


Pour les systèmes, l’environnement cases est pratique :

\usepackage{amsmath}
\[ f(x) -

B \begin{cases}
o fc \text{si } x<0 \\
| 2x+3 k \text{si } x \geq 0
\end{cases}
\]
/(x) = -
0
2x 4- 3
si x < 0
si x > 0

Le package amsmath (cf. [CTAN]) propose les environnements matrix, pmatrix,


bmatrix, vmatrix et Vmatrix pour construire facilement des matrices encadrées res­
pectivement par rien, des parenthèses, des crochets (brackets), des barres verticales
ou des double barres Verticales.
\usepackage{amsmath}
\[ A ■ \begin{bmatrix}

g 1 t 2 \\
3 & 4 \\
\end{bmatrix}
\]
A=
1
3
2
4

\usepackage{amsmath}
\[
\det\begin{pmatrix}
x_{ll} & x_{12} k \cdots \\
x_{21> k x_{22} k \cdots \\

B
\vdots k \vdots k \ddots \\ (zii X11
X12 X12
\end{pmatrix}
det X21 X22 ^21 X22
\begin{vmatrix}
x_{ll} k x_{12} & \cdots \\ \ :
x_{21} & x_{22} k \cdots \\
\vdot8 & \vdots k \ddots \\
\end{vmatrix}
\]

Dans les cas plus complexes, il faudra passer par un tableau en mode mathéma­
tique : un environnement array, entouré des délimiteurs élastiques qui conviennent.

\[ I_n » \left(
\begin{array}{cIccc}
1 kQk \cdots k 0 W
/1 0 0 \

B
\hline
0 k k k W 0
\vdotsfc k I_{n-l}ft w Zn =
0 k k k In-1
\end{arrayl
\right)
\o / î
\]
94 Chapitre 8. Mathématiques

8.14 Écriture des nombres et des unités


En sciences, en particulier physiques et chimiques, l’écriture des nombres et des
unités est soumise à des règles typographiques strictes. Il existe plusieurs packages 2
pour faciliter ce travail de mise en forme, nous présentons ici siunitx.
Commençons par la commande qui permet de formater les nombres. Les différences
avec une écriture naïve sont subtiles mais lAT^X a justement été conçu pour produire
des documents de qualité irréprochable !

\num{nombre}

\usepackage{siunitx}

S \sisetup{locale = FR}
12345.678912 $6,02\times 10~{23}$\\
\num{12345.678912} \num{6,02e23}
12345.678912
12 345,678912
6, 02 x 1023
6,02 x 1023

On constate que la commande \num groupe les chiffres par blocs de trois pour
améliorer la lisibilité des grands nombres. Par ailleurs, elle rend une présentation
conforme pour les puissances de 10. Enfn, grâce au réglage \sisetup{locale=FR}, elle
affiche le séparateur décimal français correctement séparé des chiffres qui l’entourent.
Tout cela est réglable (cf. [CTAN]).

\usepackage{siunitx}

5 \sisetup{locale = FR,
group-digits ■ integer,
exponent-product = \cdot}
\num{12345.678912} \num{6,02e23}
[12 345,678912 6,02 • 1023

Pour écrire des nombres avec unité ou juste des unités, les commandes sont tout
aussi simples.

\SI{nombre}{unité} \si{unité}

Les unités 3 du système international (mais pas seulement) sont intuitives : il suffit
d’écrire la commande en anglais : \ampere, \candela, \kelvin, \kilogram, \metre,
\mole, \second, \herz, \ohm, \coulomb, \henry, \pascal, \newton, etc.
Les préfixes se devinent aussi : \pico, \nano, \micro, \milli, \centi, \deci,
\kilo, \deca, \hecto, \kilo, \mega, \giga, \tera, \peta, etc.
La commande \tothe permet d’obtenir les puissances : \volt\tothe{3} pour V3.
Enfin, pour les puissances inverses, on ajoutera la commande \per.

2. Le package numprint est populaire mais siunitx est plus rigoureux sur les unités.
3. La liste exhautive se trouve dans la documentation : cf. [CTAN].
8.14 Écriture des nombres et des unités 95

\usepackage{siunitx}

I \sisetup{locale = FR}
\SI{120}{\nano\meter } ou \SI{0.2}{\kilo\meter}

[£| $N_A-\SI{6,02e23}{\per\mol}$
120 nm ou 0,2 km
Na — 6,02 x 1023 mol-1
2,3 m J2 s~3 i
\SI {2.3}{\meter\ joule\tothe{2}\per\second\tothe{3}}

Les unités sont séparées entre elles par une petite espace insécable. On peut pré­
férer une séparation plus visible. Par ailleurs, plutôt que des puissances négatives, on
peut demander un symbole de division.

n
en
\usepackage{siunitx}
\sisetup{locale = FR,
inter-unit-product = \ensuremath{-(}\cdot {}}}
\si{\meter\jouïe\per\second\tothe {3}}

\si [per-mode = Symbol] {\meter\joule\per\second\tothe{3}}


m•J•s 3
m • J/s3 J

Comme on le voit, dans l’exemple précédent, les options peuvent être placées
dans \sisetup pour un effet global ou entre crochets, dans les options de la
commande pour un effet sur la commande seulement.

L’écriture des angles est un cas particulier, une commande spéciale existe donc.
\ang{angle}

g
\usepackage{siunitx}
\ang{12.3} 1°2'3"
\ang{l;2;3}
112,3° 9"
\ang{; ; 9}

Selon la police utilisée, certains symboles n’apparaissent pas correctement. Il


est possible de les redéfinir, par exemple si le symbole Q de l’ohm ne fonctionne
O pas, la commande suivante peut aider :
\sisetup{text-ohm=\ensuremath{\Omega}-, math-ohm=\Oméga}

Parmi les très nombreuses possibilités de siunitx, il en est une particulièrement


intéressante : l’alignement des nombres sur le séparateur décimal dans un tableau. Le
format de colonne S majuscule a été conçu pour cela.

\usepackage-{ siunitx}
\sisetup{locale = FR}
\begin{tabular}{lI SS}
A B

8
oj
& A
1800 & 5,1
te B \\ \hline
te 0,223 \\
1900 te 12,34 & 12,2
2000 te 1234 & 1,07
\end{tabular}
w
1800
1900
2000
5,1
12,34
1234
0,223
12,2
1,07
96 Chapitre 8. Mathématiques

8.15 Lemmes, théorèmes et corollaires


Pour présenter un cours de sciences avec des lemmes, des théorèmes et leurs co­
rollaires, I^TeX dispose d’un outil prêt à l’emploi pour créer un environnement nom
qui affichera le texte :
\newtheorem{nom}{texte}

\newtheorem{thm}{Théorème}
Théorème 1. texte.

B
\newtheorem{coro}{Corollaire}

\begin{thm} texte. \end{thm} Corollaire 1 (Xyz). texte.


\begin{coro}[Xyz] texte. \end{coro}
\begin{thm} texte. \end{thm} Théorème 2. texte.

Si on préfère qu’un environnement nom partage son compteur avec un autre en­
vironnement env, on le signale avec la syntaxe suivante (notez la différence avec la
numérotation dans l’exemple précédent) :
\newtheorem{nom}[env] {texte}

\nevtheorem{thm}{Théorème}
Théorème 1. texte.

B
\newtheorem{coro}[thm]{Corollaire}

\begin{thm} texte. \end{thm} Corollaire 2 (Xyz). texte.


\begin{coro}[Xyz] texte. \end{coro}
\begin{thm} texte. \end{thm} Théorème 3. texte.

Le package amsthm apporte quelques améliorations, comme un environnement


proof pour écrire des démonstrations qui se terminent par un petit carré symbo­
lisant le CQFD ou QED pour quod erat demonstrandum.

\usepackage{amsthm}

B
*

2
\newtheorem{thm}{Théorème}

\begin{thm} texte. \end{thm}


\begin{proof} texte. \end{proof}
Théorème 1. texte.
Démonstration, texte. □

On peut supprimer ou modifier le petit carré en redéfinissant \qedsymbol dans


le préambule :
O \renewcommand{\qedsymbol}{} pour le supprimer ;
\renewcommand{\qedsymbol}{\rule{l .5ex}{l .5ex}} pour un carré plein ■.

On peut faire référence à un théorème avec la méthode classique (cf. 5.4).

B
\begin{thm}\label{th-X}
texte. \end{thm} Théorème 2. texte.

Le théorème \ref{th-X} est important. Le théorème 2 est important.


8.15 Lemmes, théorèmes et corollaires 97

Pour encadrer les théorèmes on peut, comme dans l’exemple suivant, définir un
environnement personnalisé (cf. 19.4) utilisant une boîte tcolorbox (cf. 3.9.2).
Consultez la documentation de tcolorbox (cf. [CTAN]) pour aller bien plus loin.

\usepackage{tcolorbox}
\newtheorem{theo}{Théorème}
\newenvironment{ftheo} Théorème 1 (Cauchy-Lipschitz). Soit
{\begin{tcolorbox}\begin{theo}}
{\end{theo}\end{tcolorbox}}
E un espace de Banach, Q un ouvert...

\begin{ftheo}[Cauchy-Lipschitz]
Soit $E$ un espace de Banach , $\0mega$ un ouvert . . .
\end{ftheo}

Le compteur d’un environnement nom peut être préfixé par une autre numérotation
num en utilisant la syntaxe suivante (à ne pas confondre avec la syntaxe de la page
précédente : \newtheorem{nom} [env] {texte} ) :

\newtheorem{nom}{texte}[num]

Dans l’exemple suivant, le compteur des théorèmes est préfixé par le numéro de la
section en cours tandis que le compteur des corollaires est préfixé par la numérotation
du théorème qui le précède.

\newtheorem{thm}{Théorème}[section]
1 Éléments
\newtheorem{coro}{Corollaire}[thm] Théorème 5.1. Texte.

B
u

s
\section{Élements}
\begin{thm} Texte.
\begin{coro} Texte.
\begin{coro} Texte.
\begin{thm} Texte.
\end{thm}
\end{coro}
\end{coro}
\end{thm}
Corollaire 5.1.1. Texte.

Corollaire 5.1.2. Texte.

Théorème 5.2. Texte.


\begin{coro} Texte. \end{coro}

' Corollaire 5.2.1. Texte.

Pour des compteurs personnalisés, on utilisera les techniques vues en 5.5.

\newtheorem{thm}{Théorème}[section] 5 Éléments
\newtheorem{coro}{Corollaire}[thm]
\renewcommand{\thecoro}{ Théorème 5.1. Texte.
\arabic{section}.\arabic{thm}.\Alph{coro}}

si \section{Éléments}
| 3 |\begin{thm} Texte.
\begin{coro} Texte.
\end{thm}
\end{coro}
Corollaire 5.1.A. Texte.

Corollaire 5.1.B. Texte.


\begin{coro} Texte. \end{coro}
\begin{thm} Texte. \end{thm}
Théorème 5.2. Texte.
\begin{coro} Texte. \end{coro} I
' Corollaire 5.2.A. Texte.
98 Chapitre 8. Mathématiques

8.16 Opérations posées


Le package xlop sait effectuer les opérations arithmétiques mais surtout, il est
capable de les présenter «comme à l’école». La documentation en français est parti­
culièrement agréable à lire (cf. [CTAN]).
La commande pour poser une addition est \opadd{nblXnb2}. On peut demander
une virgule française (et pas le point décimal), un signe d’opération sur la deuxième
ligne et non entre les deux premières, et on peut aussi cacher les retenues.

\usepackage{xlop} 1
\opset{décimalsepsymbol«{,}, voperator«bottom} 4 5,0 5 4 5,0 5
\opadd{45,05}{78,4} 4- 7 8,4 4- 7 8,4
\opadd[carryadd-faise]{45,05}{78,4}
1 2 3,4 5 1 2 3,4 5

La soustraction avec \opsub{nbl}{nb2} masque par défaut les retenues.

I—« \usepackage{xlop} 245 21415


œ \opset{voperator»bottom>
$ \opsub{245}{78>
78 -i 17 8
‘—J \opsub[carrysub-true,lastcarry-true]{245}{78} 167 1 67

Pour la multiplication, \opmul{nbl}{nb2}, de nombreuses options sont possibles


mais la commande de base est déjà très satisfaisante.

1 2345
r^i•H \usepackage{xlop}
\opset{voperator"bottom}
x_____ 2 3
3 703 5
p| \opmul{12345}{23}
\opmul{12345}{23} 24690
283935

Évidemment la division est possible avec \opdiv{nbl}{nb2}.

123 3
en \usepackage{xlop}
g \opdiv{123}{3} 03 41
0

Lorsqu’elle ne tombe pas juste, on peut préciser quand s’arrêter.

124 3 _____
\usepackage{xlop} 04 4 1,3 3
m \opset{decimalsepsymbol"{,}} 10
& \opdiv[maxdivstep-4]{124}{3}
10
1
8.17 Colorer et biffer 99

8.17 Colorer et biffer


Avec les packages xcolor et cancel (cf. [CTAN]), on peut faire une présentation
pédagogique des calculs en ajoutant des couleurs et en biffant certains éléments dans
les calculs pour faire apparaître les simplifications.

\usepackage{xcolor, cancel}
\C
\frac{ {\red a} b }{b} - fib ajf
\frac-{ {\red a} \cancel{b} cancel{b}}
■ -(\red a} ~b=7 = a
\]

Les couleurs disponibles, red, green, blue, cyan, magenta, yellow et quelques
autres sont listées en 3.17.

8.18 Assistants pour l’écriture de formules


Pour trouver le code correspondant à un symbole, on peut se référer à la section 8.5
ou utiliser l’application Detexify pour smartphones. Il suffit de dessiner le symbole
pour obtenir une liste de symboles approchants.

I HJ?
\sum

E mod* math
\Upstgma

Z packaça upg>Mk

moda math
\Sigma

E
0 modt mwh
©
Autre application très intéressante : Mathpix ([Link] qui per­
met de sélectionner une formule mathématique sur un ordinateur ou de photographier
avec un téléphone une équation écrite (même à la main 1) sur une feuille de papier.
L’application analyse la sélection puis en affiche le code I^TgX à saisir ou à coller dans
un document.
® Cl T Tj«5*6PM

= ^(r)llogp(r)] + L9W[iogp(6')] + h9(«)ç(r)[iogp(


l 1

WW = 52 p^’^log w.y)/ ? H ( Y | X ) » \sum _ ( x \in \mathcal { X }, y \»n


Vnathcal {Y ) ) p ( x, y ) \log \Wt( Vrac { p ( x J}
<p(x.y))V»ght) ;
WJ
Cocfrm

( et' \ L 2L -70 0 0 \ ( ct\


hapitre

Constructions géométriques avec


PSTricks

Pour créer des graphismes directement dans lAI^X, il existe deux1 outils : PSTricks
et PGF/TikZ. Les deux étant également à la fois puissants et fréquemment utilisés
dans les documents sur le Web, le choix a été fait de les présenter tous les deux dans
cet ouvrage. Dans ce chapitre, vous trouverez les éléménts de base pour construire
des figures (essentiellement géométriques) avec PSTricks. Le chapitre 12 suit une
présentation parallèle à celui-ci mais avec TikZ.
La compilation avec PdflAIfeX des documents contenant des figures PSTricks
exigeant un réglage fin de l’environnement de travail, on pourra préférer utiliser
IATeX ou XelAT^X (cf. 2.6 et 2.7).

\usepackage{pstricks -add}
\psset{unit-l.5}

B
\begin{pspicture♦ }(-!,-1X1,1)
\pscircle(0,0){l}
\multido{\nC-0+30X12}{
\pscircle(l;\nC){l}
}
\end<pspicture*}

1. On pourrait ajouter Metapost et Asymptote mais ce sont plutôt des outils externes.
102 Chapitre 9. Constructions géométriques avec PSTricks

9.1 Présentation de PSTricks


PSTricks est un vaste ensemble de macro-commandes permettant de réaliser des
graphismes de qualité dans un document MgX. Un des concurrents sur le terrain des
graphismes est le package TikZ qui est présenté dans le chapitre 12. La syntaxe est
très différente et le choix de l’un ou l’autre est une question de goût.
Si PSTricks est très présent dans les documents téléchargeables sur Internet
(notamment dans les annales de l’APMEP), il a le défaut de poser des pro-
blêmes avec la compilation PdfLMEX (cf. 2.6).

9.2 La page A4 et le plan affine


Lorsqu’on construit une figure, il est important de pouvoir lui réserver un espace
rectangulaire dans la page pour que le texte autour ne vienne pas empiéter sur la
figure. C’est le rôle de l’environnement pspicture 2 qui va disposer sur le document
le rectangle horizontal du plan PSTricks dont la diagonale relie (x,y) à (X,Y).
begin{pspicture}(x,y) (X,Y) ... \end{pspicture}

B la blabla bla bla bla bla bla


bla bla blabla bla bla bla bla
bla bla blabla bla. /
/ Y ■
/
/
/ \
/ \
/ I
I I
y ■
Bla blabla bla bla bla bla bla \ -+■ —4-
bla bla blabla bla bla bla.
\ X X

Document A4 Plan orthonormal affine PSTricks

Pour visualiser les bords de la zone délimitée par pspicture, on peut dessiner
O ses contours : \psframebox{\begin{pspicture}...\end{pspicture}}.

\usepackage{pstricks-add} Les contours montrent bien l’espace réservé


Les contours montrent bien [...]
par l’environnement pspicture.

B
£» \psframebox{ (4,1.5)
\begin{pspicture}(0,0)(4,1.5)
\pscircle(1,l){0.5}
\end{pspicture} }
(0,0)

Nouveau paragraphe. Nouveau paragraphe.

2. La version étoilée pspicture* élimine tout ce qui dépasse du rectangle.


9.3 Coordonnées cartésiennes ou polaires des points 103

9.3 Coordonnées cartésiennes ou polaires des points


Dans le plan PSTricks, on peut définir des points par (au moins) deux types de
coordonnées entre parenthèses :
— cartésiennes (x, y) : une abscisse x et une ordonnée y séparées par une virgule ;
— polaires (r; a) : un rayon r et un angle3 a séparés par un point-virgule.

\psdots[options](x,y) \psdots[options](r;a)

L’exemple suivant montre que les options (entre crochets et séparées par des vir­
gules) permettent de changer la couleur, la forme ou encore la taille de la marque.

\usepackage{pstricks-add}
\begin{pspicture}(0,0)(5,3)
3

\psdots(l,3) 7, cartésiennes
\psdots(2; 40) 7 polaires
2 o

8 \psdots [linecolor=red](3,3)
\psdots[dotstyle-o](3,2)
\psdots[dotstyle=square](3,1)
\psdots[dotsize-3mm] (4,3)
\psdots[dotstyle-*, dotsize=3mm] (4,2)
1
X
o:.-
\psdots[dotstyle-x, dotsize-0.5cm](4,1) 2 4 5
! 0 1 3

\end{pspicture}

9.4 Géométrie plane : lignes et surfaces


Les lignes, éventuellement brisées, acceptent de nombreuses options qui permettent
de construire une grande diversité de figures.
\psline[options](x,y)(x',y’)

\usepackage{pstricks-add}
\begin{pspicture}(O,0)(4,2)

8
gj \psline[1inestyle-dashed](0,0)(1,2)
\psline [arrows —>] (l,0)(2,2)(3,l)
<o | \psline [arrows-1 -> , linewidth=0.8 mm] (3,0)(4,2)
\psline [arrows-{ [-] } , linecolor-blue] (3,2) (4,0)
\end{pspicture}

Notez l’utilisation des accolades autour des crochets pour définir le segment.
O Ils évitent l’interprétation des crochets comme délimiteur d’option.

3. La mesure de l’angle a est par défaut exprimée en \degrees. On peut changer ce comportement
grâce à la commande \radians.
104 Chapitre 9. Constructions géométriques avec PSTricks

À la différence des lignes brisées, les polygones sont des ensembles fermés, on peut
donc les remplir.

\pspolygon[options] (x,y) (x1 ,y ' ) (x' ' ,y ' ' )...

\usepackage{pstricks-add}
\begin{pspicture}(0,0)(6,2)

I
\pspolygon[linecolor-gray](0,0X1,0) (0.5,2)
\pspolygon[fillstyle-solid, fillcolor-red]
(2,0) (1,1) (2,2) (3,1)
\pspolygon[fillstyle-hlines,showpoints-true]
(3,0) (4,2) (5,1)
\end{pspicture}

Les cercles et secteurs angulaires peuvent être remplis.


\pscircle[options](x,y){rayon}

\psarc[options](x,y){rayon}{anglel}{angle2}

\pswedge[options](x,y){rayon}{anglel}{angle2}

\usepackage{pstricks-add}

oo
\begin{pspicture}(0,0)(4,2)
\pscircle(1,1)<0.75}
\psarc [linecolor-red , arrows—>]
(1,l){0.9}{-45}{45}

\pswedge (3,1X0.8X45X-45}
\pswedge[fillstyle-solid, fillcolor-red]
(3.2.1X0.8X-45X45}
\end{pspicture}

\psellipse[options](x,y)(rl,r2)

\psellipticarc[options](x,y)(rl,r2){anglel}{angle2}

\usepackage{pstricks-add}
\begin{pspicture}(0,0)(4,2)
\psellipse(2,1.5)(1.5,0.25)
g \psellipticarc[linestyle-dotted]
\ (2,0.5X1.5,0.25X0X180}
3 \psellipticarc (2,0.5) (1.5,0.25X180X0}
\psline(0.5,0.5)(0.5,1.5)
\psline(3.5,0.5)(3.5,1.5)
\end{pspicture}
9.5 Simplifier la contruction avec les nœuds 105

9.5 Simplifier la contruction avec les nœuds


Pour concevoir une figure, il est plus pratique de désigner les points par des noms
comme on le fait en mathématiques : soit P le point de coordonnées (x,y). C’est
exactement ce que fait la commande suivante sans rien dessiner.

\pnode(x,y){P}

\usepackage{pstricks-add}
\begin{pspicture}(-2 , -1)(2,1)
\pnode(1,0){A} % Définition

B
“J\pnode(1 ; 72){B} \pnode (1 ; 144){C} 7, des cinq
\pnode(1 ;-144){D} \pnode(1 ;-72){El 7, noeuds

\pspolygon(A)(B)(C)(D)(E)
\psline[linestyle=dashed](A)(C)(E)(B)(D)(A)
\end{pspicture}

9.6 Marquer des points, placer du texte


Pour marquer le nom d’un point, on ne place pas la lettre sur le point mais
juste à côté : un peu au dessus ou sur le côté. Pour faire cela, la mauvaise méthode
consisterait à placer la lettre sur une coordonnée légèrement différente de celle du
point de référence. C’est peu précis et pas lisible du tout.
La commande suivante permet de positionner un label sur un cercle de centre
(x,y) et de rayon dist (5pt par défaut) au niveau de angle. Une rotation du label
d’un angle rot est aussi possible.

\uput [angle] (x, y) {label} \uput{dist}[angle]{rot}(x,y){label}

rot
.. la^el —
Â.^angle
Y angle
(x,y) ■(x,y)~dist

\usepackage{pstricks-add}
__ \begin{pspicture}(0,0)(4,1) x» A
W \psdots(l,l) \uput [180](1,1){$AS}
i \psdots(l,0) \uput [0](1,0){$B$}
1*1\psdots(3,l) \uput[-45](3,1){$\Delta$} •B •
\psdots(3,0) \uput [0]{30}(3,0){$M_1S}
\end{pspicture}
106 Chapitre 9. Constructions géométriques avec PSTricks

Combinée avec \pnode, la commande \uput est très pratique : il suffit de


modifier les cooordonnées définissant chaque point pour déplacer le marqueur
et le label qui, attaché au point, reste positionné correctement près de lui.

\usepackage{pstricks-add}

I
\begin{pspicture}(0,0)(3,2)
\pnode(1,1){A} \pnode(3,1){B} A
\psdots(A) \uput[90](A){$A$} •B
\psdots(B) \ uput [0] ( B ) { $ B $ }
\end{pspicture}

Pour placer le texte label exactement sur un point (x,y), on peut utiliser la
commande précédente avec dist=0 mais le plus simple et d’utiliser la commande
\rput. Il est également possible de faire subir au label une rotation d’angle rot
degrés.

\rput(x,y){objet} \rput{rot}(x,y){obj et}

rot
label
(x,y) (x,y)

\usepackage{pstricks-add}
\begin{pspicture}(0,0)(4,2)

\rput(0,0.8){Espace}
\rput{10}(0,0.5){Détente}
Espace
■Qétente S Spa
\pspolygon[fillstyle-crosshatch]
(1,0) (3,0) (3,1) (1 ,1)
\rput*(2,0.5){Spa}

\end{pspicture}

La commande \rput* place un fond blanc sous le label pour le rendre plus
O lisible sur les figures chargées (comme ici le mot «Spa»).

En réalité, la commande \rput applique à n’importe quel matériel (et pas seule­
ment aux textes) une rotation d’angle rot centrée sur l’origine suivie d’une translation
de vecteur ~v = (x,y).

\usepackage{pstricks-add}
\begin{pspicture}(0,0)(4,2)

s \rput{20}(1,-0.5){

}
\pspolygon [fillstyle-crosshatch]
(1,0) (3,0) (3,1) (1,1)
\rput*(2,0.5){Spa}

\end{pspicture}
9.7 Marquer les dimensions 107

9.7 Marquer les dimensions

Même si on peut utiliser les techniques vues précédement (\uput ou \rput), il


est souvent plus simple pour marquer un segment de construire une connexion entre
deux nœuds avec la commande \pcline puis d’utiliser les commandes de placement
le long de cette connexion :

— \naput{texte} positionne texte au milieu et au dessus (above) de la connexion.

— \ncput{texte} positionne texte au milieu sur la connexion.

— \nbput{texte} positionne texte au milieu et en dessous (below) de la connexion.

Notez bien que les notions de «au dessus» et «au dessous» sont à comprendre
pour une connexion orientée où l’on considère l’origine à gauche et l’extrémité
à droite.

Le paramètre nrot permet de préciser l’angle selon lequel le texte doit être écrit.
Afin d’écrire le texte le long de la connexion, on utilise la valeur spéciale :U

\usepackage{pstricks-add}
\psset{xunit-2}

B
\pcline(0, 0)(l, 1) \naput{Dessus}
\pcline(0, 0)(l, 0) \ncput{Sur}
\pcline(0, 0)(l,-l) \nbput{Dessous}
\pcline(l, 1)(2, 0) \naput[nrot-: U]{dessus}
\pcline(l, 0)(2, 0) \ncput*[nrot-: U]{sur}
\pcline (1,-1) (2 , 0) \nbput [nrot-: U] {dessous}

Une connexion entre deux nœuds peut être décalée perpendiculairement par rap­
port à sa position de définition, c’est le rôle de l’option offset. Cette option s’avère
particulièrement utile pour marquer les longueurs des segments sans avoir à effectuer
de fastidieux calculs de décalage comme on va le voir dans l’exemple immmédiatement
après celui-ci.

\usepackage{pstricks-add}

B
\begin{pspicture}(0,0)(5,2)
\psline (0,0) (4,1) % Référence
\pcline[offset- 8mm](0,0)(4,1) % +8mm
\pcline[offset-~4mm](0,0)(4,1) %
\end{pspicture}
108 Chapitre 9. Constructions géométriques avec PSTricks

\usepackage{pstricks-add}
\begin{pspicture}(0,0)(6,2)
\pspolygon(1,0)(2,2)(3,2)(4,0)

\pcline(2,2)(3,2) L1
\naput{Ll}

B
\pcline(l,0)(4,0)
\nbput{L2}

\pcline[offset-5mm,arrows-<->](1,0)(2,2)
\ncput•{$H_1$}
L2
\pcline [offset-4mm,arrows-|-|](3,2)(4,0)
\naput*[nrot-:U]{$x$}

\end{pspicture}

9.8 Exemple récapitulatif commenté

1 \usepackage{pstricks-add}
2 \begin{pspicture}(0,0)(4,2)
3 \pnode(2,3){A} \pnode(0,0){B} A
4 \pnode(2,0){H} \pnode(3,0)<C}
5
6
\pspolygon(A)(B)(C)
\psline[linestyle-dashed](A)(H)
. . . . 7\j
S
7

O
\uput [90]{N}(A){$A$} \uput[180]{N}(B){$B$}
8 \uput[-45]{N}(H){$H$} \uput [0]{N}(C){$C$} 7 \ 2V'5
9 \rput(H){ \psframe(0,0)(0.2;45) }
10 \pcline[offset--3mm]{<->}(B)(H) \ncput*{4}
11 \psset{linestyle-none}
12 \pcline(B)(A) \naput{$4\sqrt2$}
13 \pcline(A)(C) \naput{$2\sqrt5$} B c
14 \pcline(B)(H) \ncput[nrot-:U]{\small //} — 4—
15 \pcline(H)(A) \ncput[nrot-: U]{\small /}
16 \end{pspicture}

Lignes 3 et 4 grâce à la commande \pnode(x,y){nom}, on définit des nœuds invi­


sibles aux points de coordonnées (x,y).
Ligne 5 on peut construire des objets graphiques en utilisant les noms des nœuds
définis précédemment ou en mixant avec des coordonnées cartésiennes.
Lignes 7 et 8 on place les noms des points sur la figure.
Ligne 9 on place la marque de l’angle droit.
Lignes 10 à 13 on place les dimensions des différents segments.
Lignes 14 et 15 on place des marques sur des segments.
9.9 Export GeoGebra 109

9.9 Export GeoGebra


Le logiciel de géométrie dynamique GeoGebra propose de générer le code PSTricks
des figures construites à la souris. Fichier-*Exporter en-*PSTricks.
Il est préférable d’utiliser un rectangle de sélection (clic droit de la souris) si
on ne souhaite qu’une partie de la fenêtre. Ainsi, les dimensions de l’environnement
pstricks* se limiteront à celles du rectangle.
Voici l’export GeoGebra d’une figure constituée d’un rectangle avec deux bissec­
trices et son cercle inscrit.

1 \newrgbcolor{rvvvcq}{0.0823 0.39607 0.7529}


2 \newrgbcolor{wrwrwr}{0.3803 0.38039 0.3803}
3 \psset{xunit=lcm , y unit “1 cm , algebraic-true , dimen-middle , dotstyle-o,
4 dotsize-5pt 0,linewidth-1.6pt,arrowsize»3pt 2,arrowinset-0.25}
5 \begin{pspicture♦}(-14.2027 , -7.5054) (13.7972,9.1309)
6 \pspolygon [linewidth«2pt, line col or -rvwvcq , f illcolor-rvwvcq ,
7 f illstyle-solid , opacity-0.1] (-8.46, -0.95) (0.8 , -2.39) (-7.5929,4.6257)
8 \psline [linewidth-2pt, line col or «wrwrwr ] (-8.46,-0.95) (0.8,-2.39)
9 \psline [linewidth-2pt , line col or «rvwvcq] (-8.46 , -0.95) (0.8 , -2.39)
10 \psline [linewidth«2pt, line col or «rvwvcq] (0.8 , -2.39) ( -7.5929,4.62578)
11 \psline [linewidth«2pt , linecolor«rvwvcq] (-7.5929,4.6257) (-8.46,-0.95)
12 \psplot [1 inewidth=2pt , linecolor «wrwrwr] {-14.2027}{13.7972}
13 {(--4.2248--0.5900*x)/0.80736}
14 \psplot [linewidth=2pt, linecolor«wrwrwr] {-14.2027}{13.7972}
15 {(-5.475-0.9358*x)/0.3523}
16 \pscircle [1 inewidth«2pt, line col or-wrwrwr] ( -6.1335,0.7502) {2.0375}
17 \begin{scriptsize}
18 \psdots [dotstyle-*, line col or-rvwvcq] (-8.46,-0.95)
19 \rput [bl] (-8.8390, -0.6690) {\rvwvcq{$ A$}}
20 \psdots [dotstyle-*, line col or-rvwvcq] (-7.5929,4.6257)
21 \rput [bl] (-7.5118,4.8036) {\rvwvcq{$CS}}
22 \end{scriptsize}
23 \end{pspicture*}

Notez bien qu’on a ici éliminé le préambule généré par GeoGebra pour
ne conserver que la partie qui nous intéresse entre \begin{document} et
\end{document}.

Même si on reconnaît les commandes, le code est assez confus. On peut l’alléger en
supprimant les notions de couleur : linecolor=wrwrwr, f illstyle, opacity ce qui,
une fois fait, permettra de supprimer les définitions de ces couleurs devenues inutiles :
\newrgbcolor.
Si la figure est trop grande, on peut modifier les options xunit et yunit dans les
valeurs réglées par le \psset de la ligne 3. Enfin, on pourra jouer avec les coordonnées
du rectangle défini par l’environnement pspicture* pour couper les éléments qui
dépasseraient trop.
110 Chapitre 9. Constructions géométriques avec PSTricks

9.10 Constructions euclidiennes avec pst-eucl


Les coordonnées cartésiennes sont parfois pénibles à calculer. Le package pst-eucl
permet de construire des figures à l’aide de descriptions euclidiennes : on définit
les points de départ, puis on utilise des commandes du type, milieu, médiatrice, ou
homothétie. La lecture de la documentation est indispensable (cf. [CTAN]). Mais
voyez comme cet exemple parle de lui-même.

\usepackage{pstricks-add ,pst-eucl}
\begin{pspicture}(-2,-1)(5,3)
X Les points M, P et Q
\pstTr1angle(0,0){M}(1.5,3){P}(4,0){Q}
X Deux bissectrices
RI \pstBissectBAC{M}{P}{Q}{P '}
£ \pstBissectBAC{Q}{M}{P}{M'}
* \X L'intersection des bissectrices
— \pst!nterLL{M}{M'}{P}{P1}{!}
X le cercle iscrit
\pstProjection{M}{P}{!} [I']
\pstCircleOA{I}{I'}
\end{pspicture}

Voici un petit aide-mémoire de quelques commandes usuelles.


Construction de points et tracé de ligne
— \pstGeonode [PosAngle={ml ,...,mn}] (xl ,yl){Ml}...(xn,yn){Mn} : définit puis
place les points Mi(xi,yi).
— \pstLineAB[nodesepA=-2, nodesepB=-l] : trace une ligne entre M et
P dépassant M (resp. P) de 2 unités (resp. 1 unité) à l’extérieur du segment.
Marquage de segment ou d’angle
— \pstSegmentMark[SegmentSymbol=pstslashh] {M}{P} : place une marque sur
le segment [MP]4 ;
— \pstRightAngle{A}{B}{C} : marque l’angle droit ABC.
Constructions euclidiennes
— \pstMiddleAB{M}{P}{!} : construit le milieu I du segment [MP] ;
— \pstMediatorAB{MHPHlHR} : construit la médiatrice (IR) du segment [MP] ;
— \pstBissectBAC{MHP}{Q}{R} : la bissectrice intérieure (PR) de l’angle MPQ ;
— \pstInterLL{MHP}{Q}{R}{X} : construit l’intersection X des droites (MP) et
(QH);
— XpstHomO[HomCoef =k]{P}{M1 EM11 n] : construit les images M[ de
Mi par la l’homothétie de centre P et de rapport k ;
— \pstProjection{P}{Q}{Ml[M'1 n] : construit les images M- de
Mi par la projection orthogonale sur la droite (PQ).
4. Valeurs possibles : pstslash, pstslashh, pstslashh, MarkHash, MarkHashh, MarkHashh, MarkCros
ou MarkCross.
9.10 Constructions euclidiennes avec pst-eucl 111

Un second exemple riche dont le code reste pourtant assez concis.

\usepackage{pstricks-add,pst-eucl}
\begin{pspicture}(-l,-1)(5,3)
Xpsset{PointSymbol-none}
7, Les points A, B et C
XpstTriangle(0,0){A}(3.5,0){B}(1,2){C}
7, Les points E, D et F
XpstHomO[HomCoef-0.7,PosAngle-90]{B}{C}[E]
r^n XpstProjection{A}{B}{E}[D]
® XpstProjection{B}{C}{D}[F]
a 7, Segments
LU Xpspolygon(A)(B)(C)
Xpsline(E)(D)(F) Xpsline(C)(D) |
7, Marquages B
XpstRight Angle [RightAngleSize-0.2]{E}{D}{A}
A D
XpstRightAngle[RightAngleSize-0.2]{E}{F}{D}
Xpst Segment Mark [SegmentSymbol-pstslashh] {C}{A}
Xpst Segment Mark [SegmentSymbol-pstslashh] {C}{D}
\end{pspicture}

Dans ce troisième exemple, on commence par construire les trois points B, C et


D, on construit ensuite les points A et O par homothéties de centre C et Z) et enfin
les points E et F par homothétie de centre O.

Imaginez le travail s’il avait fallu calculer les coordonnés cartésiennes des différents
points...

\usepackage{pstricks-add ,pst-eucl}
\begin{pspicture}(-2,-1)(5,3)
7» \psset{PointSymbol=none, yunit*0.5cm}
Xpsset{yunit-0.5cm}
% Les points B, C et D
\pstGeonode[PosAngle-45](4,-0.5){B}
\pstGeonode[PosAngle-90](3,1){C}
XpstGeonode[PosAngle=-45](2,0){D}
7, Première homothetie

B XpstHomO[HomCoef-2,PosAngle-90]{B}{C}[0]
q I XpstHomO[HomCoef-2,PosAngle--45]{B}{D} [A]
7, Seconde homothetie
XpstHomO[HomCoef-2,PosAngle-135] {A}{0}[E]
XpstHomO[HomCoef-2,PosAngle-45]{B}{0}[F]
7 Segments
XpstLineAB [nodesep--l]{B}{F}
XpstLineAB [nodesep--l]{A}{E}
XpstLineAB[nodesep--l]{E}{F}
XpstLineAB[nodesepA--2, nodesepB--0. 6]{A}{B}
XpstLineAB[nodesepA--0.2,nodesepB--l] {D}{C}
\end{pspicture}
112 Chapitre 9. Constructions géométriques avec PSTricks

9.11 Constructions avec multido


La commande \multido effectue nbOp fois les commandes en incrémentant la va­
riable \i de incr depuis la valeur d’origine début.

\multido{\i=debut+incr}{nbOp}{ commandes }

Dans l’exemple ci-dessous, la boucle va tourner 9 fois pour placer à chaque tour,
un point et marquer son abscisse juste au dessus.

\usepackage{pstricks-add}
\psset{xunit"0.5}

ï
\begin{pspicture}(0,0)(1,8)
\multido{\i"0+l}{9}{ 3 4 5 6 7 8
0 1 2
\psdots(\1,0)
\uput[90](\i,0){\i}
}
\end{pspicture}

On peut aussi tracer des segments horizontaux superposés dans un rectangle ou


avec une double boucle, placer 35 points (7 x 5) en seulement trois lignes de code.

\usepackage{pstricks-add}
\begin{pspicture}(0,0)(1,2)
\psframe(0,0)(1,2)
\multido{\r=0+0.2}{10}{ \psline(0,\r)(1,\r) }
\% Et maintenant, 35 points en deux lignes !
\multido{\rx»l.5+0.3}{7}{
\multido{\ry"0.5+0.3}{5}{
\psdots(\rx,\ry)
}
}
\end{pspicture}

La première lettre de la variable détermine son type : i pour un entier, r pour


O un réel. Voir la documentation [CTAN] pour plus de détails.

\usepackage{pstricks-add}
\psset{unit’3} % zoom facteur 3
\begin{pspicture}(-l. 2 , -0.2) (1.2,1.2)
\psvedge(0,0){1X0X180}
\psdots[dotstyle-o](0,0)
V] \multido{\n=10+10}{17}{
bû \rput(0.8 ;\n){\small\n}
00
\psline(0.87;\n)(1 ;\n)
}
\multido{\n=0+l}{180}{
\psline [linewidth«0.1mm](0.9;\n)(l;\n)
>
\end{pspicture}
9.12 Coordonnées calculées en RPN 113

9.12 Coordonnées calculées en RPN


On a déjà vu qu’un point peut être défini par des coordonnées cartésiennes (x,y)
ou polaires (r;a) il existe un troisième type appelé coordonnées PostScript pures
qu’on note sous la forme ( ! expr). L’expression expr rédigée sous la forme d’un calcul
en RPN5 et qui sera exécutée par postscript doit renvoyer un couple de réels qui
formeront les coordonnées cartésiennes du point à placer.
Par exemple l’expression simple (!3 4) est équivalente à (3,4) ou encore l’ex­
pression calculée (Il 1 add 5 3 mul) est équivalente à (2,15).
L’intérêt de cette notation est qu’elle se prête aux calculs dans PSTricks. Cette
notation permet d’écrire les formules arithmétiques sans utiliser de parenthèses en
présentant les opérandes avant les opérateurs et non l’inverse.

Syntaxe Signification Syntaxe Signification


x y add x+y x y sub x-y
x y mul xxy X y dïv
x y exp x* X sqrt y/x
X EXP ex X neg —X
X Log log Z X In Inz
X y mod x mod y (reste div. eucl.) X round entier le plus proche de x
X f loor plus grand entier x X ceiling plus petit entier > x
X sin sin z X cos cosz
X tau tan z X a tan arctan x

Par exemple, le calcul ((1 + 2) X 4) + 3 peut être noté en RPN :


1 2 add 4 mul 3 add ou bien 3412 add mul add

Voici une application concrète : le triangle de sommets (0,0), (0,2 + \/2), (2+\/2,0)
admet le cercle de centre (1,1) et de rayon 1 comme cercle inscrit.

\usepackage{pstricks-add}
\psset{unit-0.666cm} % Echelle 1/3

I \begin{pspicture}(-3,0)(3.5,3.5)
\pspolygon ( ! 0 0)(!0 2 sqrt 2 add)
(!2 sqrt 2 add 0)
\pscircle[linecolor-gray](! 1 1){1}
\end{pspicture}

5. Reverse Polish Notation Voir [Link] .


hapitre 10
Courbes avec PSTricks

PSTricks permet de tracer des courbes dans des repères ou des quadrillages adaptés
en écrivant le code directement dans lATgX. Ce chapitre présente les techniques pour
tracer les représentations les plus usuelles dans les études de fonctions. Le chapitre 13
suit une présentation parallèle à celui-ci mais avec TikZ.
La compilation avec PdfMfeX des documents contenant des figures PSTricks
exigeant un réglage fin de l’environnement de travail, on pourra préférer utiliser
LXTeX ou XelAI^X (cf. 2.6 et 2.7).

\usepackage{pstricks-add}
\psset{xunit«0.25 , yunit =*2}

B
\begin{pspicture*}(-8,-0.5)(10,1.2)
\psaxes[trigLabels=true,dx-3.1416]
(0,0)(-7,-0.5X10,1.2)
\psplot[algebraic]<-7}{-0.0001Xsin(x)/x}
\psplot [algebraic] {0.00001}{10}{sin(x)/x}
\end{pspicture*}
116 Chapitre 10. Courbes avec PSTricks

10.1 Repères et axes gradués


La commande \psaxes place un repère délimité par un rectangle de diagonale
(x,y) et (X,Y) et dont les axes se coupent en (x0,y0).

psaxes[param] {f lèches}(xO,y0) (x,y) (X,Y) [xlbl,xangle] [ylbl,yangle]

Parmi les paramètres, on trouve :


ylbl
subticks (X,Y)
Nom Valeur 1 --
/ (x0,y0)
labels <all |x |y |none> ticks
ticks <all I x I y lnone> H H
[x|y]ticksize long, [long.] -3 -2 -1 1^,2 xlbl
[x|y]subticks nombre (x,y) labels
-1 --
[x|y]subticksize coefficient

Un premier exemple pour montrer un repère de base sur lequel on a simplement


placé le titre des axes, xlbl et ylbl.

y
\usepackage{pstricks-add} 1 --
\begin{pspicture}(-l,-1)(1.5,1.5)
\psaxes[showorigin-faise] (0,0)(-1,-1)(1.5,1.5) [x,-90][y,0]
\end{pspicture} I-------- + x
-1 1
-1 --

Ce second exemple présente l’intérêt des options : les labels ne sont affichés que
sur l’axe des abscisses grâce à l’option labels=x et les unités de l’axe des abscisses
sont subdivisées en quatre avec l’option xsubticks=4.

\usepackage{pstricks-add}

1 \begin{pspicture}(-l,-1)(2,1.5)
\psaxes[labels-x,xsubticks-4](0,0)(-1,-1)(2,1.5)
\end{pspicture}
-1
I— —H H
1 2

Si on souhaite n’afficher qu’un axe, on active l’option yAxis=f aise.

I
\usepackage{pstricks-add}
\begin{pspicture}(-l,-0.5)(3.5,0.5)
\psaxes[yAxis-faise]{->}(0 ,0)(-1,0)(3.5,0) H + + + +■
\end{pspicture} -1 0 1 2 3

Les documentations de pstricks et pstricks-add sont très riches en exemples


montrant l’ensemble des possibilités offertes par la commande \psaxes. Il n’est pas
10.1 Repères et axes gradués 117

question d’en faire le tour ici, seulement de donner un aperçu de quelques fonction­
nalités utiles dans le cadre de l’enseignement.
On peut modifier la taille des graduations (ticksize=0 U) en dessous puis au
dessus de l’axe. Les hauteurs des sous-graduations (subticksize=»k) sont alors celles
des graduations, multipliées par un coefficient k.

\usepackage{pstricks-add}
\psset{yAxis-faise}
\begin{pspicture}(0, -1)(4,1)
L 1
g
\psaxes[subticks»2,ticksize-0 0.5] (0,0)(0,0)(3.7,0)
\end{pspicture} 0 1 2
\begin{pspicture}(0,-1)(4,1) k 4- 4- 4-
\psaxes[subticks-10,ticksize--0.1 0.2,
subt icksize-0.5] (0,0) (0,0) (3.7,0) L
0 1 2 3
\end{pspicture}

On a parfois besoin de focaliser la vue sur une partie du repère, voici un exemple.
On décale la numérotation en choisissant d’afficher 34.7 sur l’origine avec l’option
0x=34.7. Pour zoomer sur une zone très précise, on demande que la graduation prin­
cipale avance non plus par incrément de 1 mais de Dx=0.1 et cela, tous les 2 cm (dx=2).
On a aussi placé 10 sous-graduations par graduation principale avec subticks=10 et
les nombres affichés étant décimaux, on demande que le séparateur décimal ne soit
pas le point mais la virgule (decimalSeparator={,}).

\usepackage{pstricks-add}
\begin{pspicture}(0,-1)(5,1)

a
\psset{yAxis-faise,deciœalSeparator-{ ,}}
O ?
\psset{ticksize-0 0.5,subticksize-0.5}
\psaxes[Ox-34.7, Dx-0.1, dx-2, subticks-10]
(0,0)(0,0)(4,0)
L I —è- J !
\pnode(1,0){A} \psdots(A) \uput[-90](A){$A$} 34,7 A 34,8 B 34,9'
\pnode(3.2,0){B} \psdots(B) \uput[-90](B){$B$}
\end{pspicture}

Les nombres indiqués au dessus de l’axe gradué ne figurent pas dans le code : ils
montrent que les décalages n’affectent que les marques de graduation comme
les coordonnées des points A et B l’attestent.
Avec l’option trigLabels=true, il est aussi possible d’avoir une graduation tri-
gonométrique. Le pas de cette graduation particulière est réglé par le paramètre
trigLabelBase (égal à 1 par défaut) comme on le voit dans l’exemple suivant :

\usepackage{pstricks-add}
\begin{pspicture}(-2,-1)(3,1)
\psaxes[trigLabels-true](0,0)(-2,-l)(3,l) I----- 1— + -H h :
\end{pspicture} —2tt —tt TT 2ît 3/T j
\begin{pspicture}(-2,-1)(3,1)
\psaxes[trigLabels-true,trigLabelBase-6] H 4- + -H H !
-2% 7T 2* 3x
\end{pspicture}
(0,0) (-2 ,-1) (3,1)
6 ¥ 6 6 6 ;
118 Chapitre 10. Courbes avec PSTricks

10.2 Quadrillages
La commande \psgrid trace un quadrillage rectangulaire de diagonale (xmin, ymin)
et (xmax,ymax). L’immense liste des paramètres est détaillée dans [5].

psgrid[param] (xmin ,ymin) ([Link])

a \usepackage{pstricks-add}
\begin{pspicture}(-l,0)(2,2)
\psgr id (-1,0) (3,2)
\end{pspicture}
2

0 P ii
n~T
u
-1 0 2 3

On peut évidemment personnaliser l’allure de cette grille avec les options.


2

\usepackage{pstricks-add} 4-H
Pt
B
J*1 \begin{pspicture}(-l ,0)(2,2)
\psgrid[subgriddiv=4,subgridcolor«lightgray, 1
gridlabels-6pt,gridcolor-gray](-1,0)(2,2)
\end{pspicture}
0
0 1 2 3

El
\usepackage{pstricks-add}
\begin{pspicture}(-l ,0) (2,2)
“|\psgrid[subgriddiv-10,subgridcolor-orange ,
gridlabels-0](-1,0)(3,2)
\end{pspicture}
■■■s
Le cas des repères logarithmiques ou semi-logarithmiques est particulier : on se
sert de \psaxes et on joue sur la longueur des ticks.

103
\usepackage{pstricks-add}
\begin{pspicture}(-l,0)(3,3) 102

8
7‘ -j.y
\psaxes [axesstyle=«frame ,
ylogBase«10, subticks-10,logLines-y,
0x--l,xsubticks«0 ,xticksize-0 3](-1,0)(3,3) 101
\end{pspicture}

10° u
-1 0 1 2 3

| Amusez-vous avec les options pour bien comprendre le rôle de chacune.


10.3 Courbes 119

10.3 Courbes
Pour tracer le graphe d’une fonction, PSTricks propose la commande \psplot
dont la syntaxe générale est la suivante :

\psplot [algebraic, param] {xminXxmaxXf onction}

où xmin et xmax sont les bornes du domaine de définition (au sens de l’intervalle
de traçage) et param un des nombreux paramètres. La fonction de la variable x
est exprimée de façon algébrique usuelle (d’où le paramètre algebraic1) avec les
opérateurs suivants :

Expression Syntaxe Expression Syntaxe Expression Syntaxe


a x b a*b a 4- b a/b y/â sqrt(a)
ab aAb ln(a) ln(a) n! fact(n)
cos(a) cos(a) sin(a) sin(a) tan(a) tan(a)
Arccos(a) acos(a) arcsin(a) asin(a) arctan(a) atan(a)
cosh(a) ch(a) sinh(a) sh(a) tanh(a) th(a)
arg cosh(a) Argch(a) arg sinh(a) Argsh(a) argtanh(a) Argth(a)

Voici comment tracer la courbe d’équation y = x2 + x sur l’intervalle [—1.5,1].

\usepackage{pstricks-add}
\begin{pspicture}(-2,-l)(l,2)

i \psaxes{->}(0,0)(-2,-1)(1.5,2) 7. le repère
I \psplot[algebraic]1.5}{1}{x~2+x} % la courbe

\end{pspicture}

On trace aussi facilement plusieurs courbes sur un même repère. Remarquez l’op­
tion trigLabels=true qui donne un axe des abscisses trigonométrique, ainsi que
l’option dx=3.1416 qui fait de 3.1416 la nouvelle base des unités.

\usepackage{pstricks-add}
\begin{pspicture}(-2,-1)(3.5,1.5)

B
\psset{xunit“0.5}
\psaxes[trigLabels-true,dx-3.1416]
(0,0) (-4 ,-1) (7,1.5)
\psplot [algebraic , linewidth-2pt ] {-4}{7}{cos (x)}
\psplot [algebraic , linecolor-gray]{-4}{7}{sin(x)}
\end{pspicture}

1. On verra en 10.8 que pour des fonctionnalités avancées, la syntaxe RPN est utilisable.
120 Chapitre 10. Courbes avec PSTricks

On peut combiner le tracé de graphe avec les commandes géométriques vues dans
le chapitre précédent. Voici la courbe d’équation y = (1 + x)(3 — x) sur l’intervalle
[—1,1; 3,1] sur laquelle on fait figurer un point :

\usepackage{pstricks-add}
\psset{xunit-lcm,yunit-0.5cm}
\begin{pspicture}(-l,5,-l)(3.5,4.5)

\psaxes(0,0)(-1.5,-0.5)(3.5,4.5)
\psplot[algebraic]{-1.1}{3.1}{ (1+x)♦(3-x) }

% Place le point A et les pointillés


\psdots(2,3) \uput [45](2,3){$A$}
\psline[linestyle-dotted](2,0)(2,3)(0,3)

\end{pspicture}

Une bonne pratique consiste à mémoriser, grâce à \newcommand, l’expression de la


fonction afin qu’elle soit réutilisable. On utilise ici la constante \psPi pour définir la
fonction f : x ►-> tracée en deux fois sur l’intervalle [—2,2]. On voit qu’avec
un échantillonage plus fin (plotpoints=300) le tracé de droite est de meilleure qualité
que celui de gauche.

\usepackage{pstricks-add}
\psset{yunit«4cm}
\begin{pspicture}(-2, -0.3) (2,1.1)

I
\psaxes [labels-noue,ticks-x](0,0) (-2 , -0.3) (2,1.1)
\newcommand{\f}{(cos(2*\psPi*x))~2/(x~2+l)}

\psplot[plotpoints-40,linecolor-red]<-2}{0}{\f}
\psplot [linewidth-2pt,plotpoints-300]{0}{2}{\f}
\end{pspicture}

La commande suivante permet de représenter une tangente de longueur 2 x long à


la courbe représentative de la fonction f onc au point d’abscisse x et ce, en calculant
le taux d’accroissement sur un intervalle de rayon 0.00005 autour du point spécifié
(cf. [7] pour les détails).

\psplotTangent{x}{long}{fonc}

\usepackage{pstricks-add}
\newcommand{\f}{(0.3*x)~3-0.3*x} % def fontion
\psset{algebraic,xunit-0.66cm,yunit»3cm}

B
\begin{pspicture}(-3.5,-0.5)(3.5,0.5)
\psaxes(0,0)(-3.5,-0.5)(3.5,0.5)
\psplot{-3.1}{2.9}{\f} 7, trace courbe
\psset{arrous-<->,linevidth-lpt}
\psplotTangent{-2}{l}{\f} 7, tangente 1
\psplotTangent{1.5}{l}{\f} 7, tangente 2
\end{pspicture}
10.4 Courbes fabriquées de toutes pièces... 121

10.4 Courbes fabriquées de toutes pièces...


Plutôt que de déterminer l’équation d’une fonction dont le graphe contient des
points de coordonnées entières, on peut utiliser la commande suivante qui construit
une courbe passant par les points demandés.

\pscurve [options] (xl,yl) (x2 ,y2)...(xn,yn)

\usepackage{pstricks-add}
\psset{unit-lcm}
\begin{pspicture}(-3,-1)(3,2)
7. un quadrillage sous les axes :

E \psgrid [subgriddiv»4 , subgridcolor-1 ightgray , 4-


gridlabels-0,gridcolor-gray](-3,-1) (1,2)
\psaxes(0,0)(-3,-l)(l,2)
\psset{showpoints=true,dotsize-l.5mm}
7. la courbe définie par points ; 3 2 1
\pscurve(-3,0)(-2,1.5)(0,0)(1,1)
\end{pspicture}
4-

10.5 Intégration et sommes de Riemann


Dans le cadre d’un travail sur les intégrales, il peut être intéressant de faire ap­
paraître une surface délimitée par des courbes et/ou des droites. Avec \pscustom,
l’idée consiste à «faire le tour» de la zone à mettre en valeur. Dans l’exemple suivant,
la zone à hachurer est délimitée dans sa partie haute par la courbe représentative
de f : x »-♦ 2~x* sur [—1,1] et en bas par le segment d’origine (1,0) et d’extrémité
(—1,0) dans cet ordre.

\usepackage{pstricks-add}
\psset{yunit«2.5cm}
\begin{pspicture}(-2.2,-0.3)(2,1.3)
\psaxes {->}(0,0)(-2.2,-0.3)(2,1.2)
\newcommand{\f}{1/(2~(x~2))}

B \pscustom [f illstyle“vlines , linestyle-none]


{
\psplot[algebraic]{-l}{l}{\f}
\psline(1,0)(-1,0)
>
\psplot[algebraic]{-2.2}{2}{\f}
\end{pspicture}

Une fois n’est pas coutume, les deux flèches autour de la figure ne font pas partie
du code reproduit à gauche. Elles montrent le chemin parcouru pour tracer la
O zone fermée qui sera hachurée. Remarquez que les deux verticales n’ont pas
besoin d’être décrites dans le code : \pscustom interpole par segment entre les
points non consécutifs.
122 Chapitre 10. Courbes avec PSTricks

Même principe pour griser une zone située entre deux courbes. La commande
\pscustom prend comme argument entre accolades la description de la zone définie
en deux temps : d’abord de gauche à droite la portion du graphe de f : x •—> de
x — 1 à 3 puis de droite à gauche la portion du graphe de h : x de x = 3 à
1.

\usepackage{pstricks-add}
\psset{yunit«3cm,algebraic,plotpoints-200} 1.0
\begin{pspicture}(-i,-0.7)(3.5,1.1)
0.8 --
\newcommand{\f}{l/(x~2+l)}
\nevcommand{\h}{sin(\psPi*x)/(x~2+l)} 0.6
0.4

i
g\pscustom[fillstyle-solid, f illcolor“lightgray ,
linestyle-none]{ 0.2
\psplot<l}{3}{\f}
\psplot{3}{i}{\h} F 7
>
-0.2 --
\psplot{0}{3.5}{\f}
\psplot<0}{3.5}{\h}
-0.4 --
-0.6 --
\psaxes[Dy-0.2,labels-y](0,0) (-1, -0.7) (3.5,1.1) [

Il existe une commande prête à l’emploi pour représenter les sommes de Riemann
pour l’approximation des intégrales :

\psStep[algebraic, param] {xminXxmaxXfonction}

Parmi les paramètres, l’option StepType, donne le choix entre infimum (somme
des minima), louer (somme à gauche), upper (somme à droite), supremum (somme
des maxima), Riemann (somme des erreurs).

\usepackage{pstricks-add}
\psset{xunit-4cm,yunit»2cœ,algebraic}
\begin{pspicture}(-0.3,-1)(1.3,1.3)

a
\newcommand{\s}{co8(2*\psPi*x)/(x~2+l)}

\psStep[StepType»infimum,fillstyle-solid,
fillcolor-green] (0,1){25}{\s}

\psplot{0}{l.2}{\s}

\psaxes{->}(0,0)(0,-1)(1.3,1.3)
\end{pspicture}
10.6 Courbes polaires et paramétrées 123

10.6 Courbes polaires et paramétrées


Les courbes polaires peuvent être tracées avec la commande \psplot en ajoutant
simplement le paramètre polarplot.

\psplot [polarplot, algebraic, param] {xminHxmax}{p(rr)}

Le limaçon d’Archimède est un exemple de courbe polaire : p(x) = 3cos(|).

90
120 60
\usepackâge{pstricks-add}
\psset{unit-0.9cm}
\begin{pspicture*}(-3,-3)(3,3) 150 30

B
5 \psaxes[axesstyle-polar, labels-y,
labelFontSize-\scriptstyle](2,361)

\psplot[polarplot,algebraic,linewidth-2pt]
{0}{9.32}{3* cos (x/3) }
180

210
0

330

\end{pspicture*} 240 300


270

Remarquez l’option axesstyle=polar de \psaxes qui lui permet de tracer un


O repère polaire.

Pour tracer des courbes paramétrées, PSTricks propose une commande adaptée.

\parametricplot [algebraic, paramXtminXtmaxXx(t) I y(t)}

Voici un exemple de courbe paramétrée avec une courbe de Lissajous :

sin(5<)
pour t g [0, 2tt]
sin(6t)

\usepackage{pstricks-add}
\psset{unit“1.5cm,plotpoints-200}
\begin{pspicture*}(-1.6,-1.3)(1.6,1.3)

B \psaxes(0,0)(-1.6,-1.3)(1.6,1.3)

\parametricplot [algebraic] {0}{6.28}{sin (5*t) I sin(6*t)}

\end{pspicture*}
124 Chapitre 10. Courbes avec PSTricks

10.7 Histogrammes et représentations statistiques


Commençons par une commande assez efficace pour tracer des diagrammes circu­
laires présentant des données dans un disque de rayon r. On peut mettre en avant
une liste sect de secteurs : dans l’exmple qui suit, on pourrait faire ressortir l’océan
Indien (donnée numéro 3) en remplaçant l’accolade vide par {3}.

\psChart [param] {données}{sect}{r}

\usepackage{pstricks-add}
\begin{pspicture}(-3,-3)(3,3)
\psChart{44,28,19,5,4}{}{2}

I \rput(psChartl1){\small \white Pacifique}


\rput(psChartI2){\small \white Atlantique}
\rput(psChartI3){\small \white Indien}
\rput(psChartI4){\small \white Austral}
\rput(psChartI5){\small Arctique}
\end{pspicture}

À partir d’une liste de valeurs enregistrées avec la commande \savedata, on


construit facilement une représentation graphique avec la commande \dataplot.

\savedata{nom}[données] \dataplot[param]{nom}

Le type de représentation est donné par le paramètre plotstyle (=line par dé­
faut) comme on le voit dans l’exemple suivant qui superpose trois représentations des
données.

\usepackage{pstricks-add}
\savedata{\donnees}[{1,30},{2,17},{3,34},
{4,46},{5,41},{6,10}]
40 --
\psset{xunit-0.6,yunit-0.06}
30 --

0
ô’"l \begin{pspicture}(-l, -10) (6,50)
J \psaxes [Dy-10]{ — >}(0,0)(0,0)(6,50) 20 --
S \dataplot[plotstyle-line ]{\donnees}
\dataplot[plotstyle-dots]{\donnees} 10 --
\dataplot [plotstyle-bar,
barwidth-0.5]{\donnees} 0+ + + + + +
\end{pspicture} 0 1 2 3 4 5 6

Les données peuvent être chargées depuis un fichier texte nommé, par exemple,
[Link] contenant [{1,1229},{3,265},...{1232,1778}]. On écrira alors
O \readdata{\mydata}{[Link]}
\dat aplot{\mydat a}
10.8 Un peu plus loin dans calcul avec RPN 125

10.8 Un peu plus loin dans calcul avec RPN


On a vu qu’on peut définir dans PSTricks une fonction par son expression algé­
brique en spécifiant l’option algebraic-true ou simplement algebraic. Cependant,
si on veut effectuer des calculs complexes, il est intéressant d’exprimer les fonctions
en notation polonaise inverse, en anglais RPN (cf. 9.12).
Dans l’exemple qui suit, on s’intéresse à la fonction suivante dont l’expression en
RPN est : x 2 exp neg EXP.

f : x >-» exp(-x2)
L’ordonnée du point intermédiaire de la ligne brisée en pointillés est calculée à
partir de l’abscisse x = 0.5 et dans le petit texte sous la figure, la valeur approchée
de /(0.5) est calculée par la commande \psPrintValue [param] {expr} où expr est
une expression en RPN dont l’évaluation renvoie un réel.

\usepackage{pstricks-add,pst-fune}
*/• Définition de f en RPN
\newcommand{\f} [1]<#1 2 exp neg EXP}

S
\begin{pspicture}(-1,-0.5)(2,1.4)
\psaxes{->}(0,0)(-l,-0.5)(2,1.4)
\psplot{-l}{1.7}{\f{x}}
\psset {linestyle-dotted , showpoints-true , dot style-o}
\psline(!0.5 0)(!0.5 \f{0.5})(!0 \f{0.5})
\end{pspicture}

On a $f(0.5)\simeq$ \psPrintValue [decimals-3]{\f{0.5}}

Pour peu que les expressions des fonctions f et g soient exprimées en RPN, la
commande XpstlnterFF[options] {f}{g}{xO}{M} du package pst-eucl permet de
déterminer une intersection en un point M dont l’abscisse est proche2 de xO.

\usepackage{pstricks-add ,pst-eue1}
X g (x) = (x~3)/3+x+2/3 en RPN :
\newcommand{\f}{x 3 exp 3 div x sub 2 3 div add}
X h(x)-x~2 en RPN :
\newcommand{\g}{x 2 exp}
Mo

g \begin{pspicture*}(-2.2,-0.5)(2.5,2)
\psaxes [labels-none]{->} (0,0) (-2.2 , -0.5) (2.5,2)
\psplot{-2.2H2X\f}
\psplot{-2.2H2H\g}
+
i

\pstInterFF [PosAngle«90] {\f HXgHiHP)


\pstinterFF [PosAngle-45]
\end{pspicture♦}

2. La recherche de l’intersection se fait en utilisant l’algorithme de Newton, elle pourra donc ne


pas aboutir dans certains cas particuliers.
Chapitre 11
Graphes et arbres avec PSTricks

PSTricks propose une suite de commandes adaptées à la construction de graphes


et d’arbres. Les exemples exposés ici présentent des situations classiques en faisant un
tour d’horizon des possibilités. Le chapitre 14 suit une présentation parallèle à celui-ci
mais avec TikZ.
_ La compilation avec PdfLMÈX des documents contenant des figures PSTricks
exigeant; un réglage fin de l’environnement de travail, on pourra préférer utiliser
~ LXTeX ou XeMfeX (cf. 2.6 et 2.7).

\usepackage{pstricks-add}
\psset{unit»0.5}

B
\begin{pspicture}(-l,-1)(5,4)
\cnodeput(0,0){a}{A} \cnodeput(1,3){b}{B}
\cnodeput(3,0){c}{C} \cnodeput(4,3){d}{D}
\ncline{a}{b} \ncline{a}{c}
\ncline{a}{d} \ncline{b}{c>
\end{pspicture} >
128 Chapitre 11. Graphes et arbres avec PSTricks

11.1 Graphes
Pour tracer des graphes simples, on peut utiliser les techniques vues dans les
sections 9.3 et 9.4.
\usepackage{pstricks-add}
\begin{pspicture}(0,0)(4,2)
\psset{dotsize-6pt}
\psdots (1,0) (2,1) (1,2) (0,1) 7, cartésiennes
\psline(1,0)(2,1)(1,2)(0,1)(1,0)(1,2)

B \psline(0,1)(2,1)

\rput(3,0.75){ % On translate
\psdots(0,0)(1 ;-30)(1 ; 90)(1 ;-150) % polaires
\psline (0,0) ( 1 ;-30) (1 ;-150) ( 1 ; 90) (0,0) ( 1 ; -150)
\psline(1;90)(1 ;-30) }
\end{pspicture}

Une méthode plus élaborée consiste à définir des nœuds avec \cnode en spécifiant
leurs coordonnées puis à tracer (dans le bon sens) les liaisons droites avec \ncline.
On voit que l’option Arrowlnside permet de faire apparaître le sens de parcours de
chaque connexion.

\usepackage{pstricks-add}
\begin{pspicture}(0,-1)(2,1)
\cnode(0,0){3pt}{A} \uput [180](A){$A$>
\cnode(3,-1){3pt}{F} \uput[-45](F){$F$}
\cnode*(l,l){3pt}{B}

8
\cnode* (2,0){3pt}{C}
“ \cnode*(l,-l){3pt}{D} \cnode*(3,l){3pt}{E}

\psset{Arrovinside»->,arrowscale=2}
\ncline{A}{B} \ncline{A}{D} \ncline{B}<C}
\ncline{C}{D} \ncline{C}{E} \ncline{D}{B}
\ncline{E}{B} \ncline{E}{F} \ncline{F}{C}
\end<pspicture}

Si on veut des connexions courbées, on choisira \ncarc dont le rayon est per­
sonnalisable. Là encore le sens de parcours lors de la définition de la connexion est
important.

\usepackage{pstricks-add}
\begin{pspicture}(-1, -0.25)(1,1.5)
\cnode(0,0){4pt}{A}
\cnode(1,1){4pt}{B}

B
pl \cnode(0,1.5){4pt}{C} \cnode(-1,1){4pt}{D}
\psset{arcangle-20} % définit la courbure
\ncarc{A}{B} \ncarc{B}{A}
\ncarc{A}{D} \ncarc{D}{A}
\ncarc{C}{B} \ncarc{D}{C}
\ncline{A}{C} % la liason droite
\end{pspicture}
11.1 Graphes 129

Seconde méthode pour construire des graphes : placer les nœuds dans une matrice
avec l’environnement psmatrix. Lorsque le graphe présente des alignements verticaux
et horizontaux réguliers, c’est sans doute la méthode la plus lisible. Les connexions se
font alors entre les nœuds repérés par leurs coordonnées matricielles.
\usepackage{pstricks-add}
\begin{psmatrix} [mnode-circle , col sep -. 5 , rowsep-. 5]
A 4 B 4 C \\
D 4 4 E \\
F 4 G 4 H \\

il \end{psmatrix}
\ncline{2,l}{!,2}
\ncline{3,2}{2,3}
\ncline[border-3pt]{1 ,1}{3,3}
\ncline[border-3pt]{3,1}{1,3}
\neline[border-3pt]{1,2}{2,3}
\ncline[border-3pt]{2,1}{3,2}

On peut utiliser les coordonnées matricielles pour construire un diagramme com­


mutatif en utilisant les techniques de placement de texte le long des connecteurs
comme on l’a vu dans la section 9.7.
\usepackage{pstricks-add}
\begin{psmatrix} f
$G$ 4 S\mathrm{im}(f)S \\ G * im(/)

8
$G/\ker(f)$ 4 \\ X
\end{psmatrix}
<P
Zz h
\psset{arrows--> , shortput-nab , nodesep-2mm}
\ncline{l,1}{1,2} \naput{$f$}
\ncline{l,1}{2,1} \nbput{S\varphi$} G/kerÇf)
\ncline[linestyle-dashed]{2,1}{1,2} \nbput{$h$} l

Enfin, un graphe pondéré pour un problème de probabilités. Remarquez comment


les probabilités x et y on été déplacées à 25 % et à 75 % de la longueur sur leur
connecteur circulaire à l’aide de l’option npos.

\usepackage{pstricks-add}
\begin{pspicture}(-l,-l)(6,l)
\begin{psmatrix}[mnode-circle,colsep-3]
A 4 B
\end{psmatrix}

B \psset{arrov8"->}
x| \ncarc[arcangle-20]{1,1}{1,2} \naput{$l-x$}
% I \ncarc[arcangle-20]{1,2}{1 ,1} \naput{$l-y$}
\nccircle[angleA-90]{1,1}{.5}
\nbput[npos-0.25]{$x$}
\nccircle[angleA--90]{1,2}{.5}
\nbput [npos-0.75]{Sy$}
\end{pspicture}
130 Chapitre 11. Graphes et arbres avec PSTricks

L’utilisation de \multido permet de belles constructions. Une première boucle


définit les sommets Ndl, Nd2, Nd3, Nd4, Nd5, Nd6 et Nd7 d’un heptagone régulier
avec des coordonnées polaires. Ensuite une double boucle contruit les connexions de
chaque sommet avec chaque autre sommet.

\usepackage{pstricks-add}
\begin{pspicture}(-2,-2)(2,2)

\multido{\rA-0+51.429,\nA-0+l}{7}{
\cnode♦(2;\rA){Ipt}{Nd\nA}

ffl’
\multido{\nA-0+l}{7}{
\multido{\nB-0+l}{7}{
\ncarc[arcangle--40]{Nd\nA}{Nd\nB}
}
}
\end{pspicture}

11.2 Création assistée de graphes PSTricks


L’auteur de Texmaker, propose Pstplus ([Link]
un outil qui permet, entre autres, de générer le code compatible avec PSTricks pour
des graphes à contruire dans une interface simple et ergonomique.
Après avoir consruit un graphe dans l’interface, il suffit de copier-coller le code
généré dans un document M£X.
>au«tant : Mtr <h*re>llpUa.<i<»ci«.gr ô *
fKhrtf

No» »</»••» A
i'^rr^a

U Oatt _
o - ■
i Afilet iwtAMei tu uamt :
ertri~tfvoattrvt'[Link]
ÏJMCJ--------------------------- L^t-

Orteil t^lo&Acn

EEH D i—
tta**^*» d» Ipftvi 14 0

r
,4 . ". -x n 1/
\>«*ln(HMtrl>}l«n9amrcla)
y
r
___ _Jc
11.3 Arbres 131

11.3 Arbres
Pour construire des arbres avec PSTricks, on dispose de la commande :

\pstree{racine}{successeurs}

Dans l’exemple suivant, les successeurs de la racine A sont, d’une part deux nœuds
(B et C), et d’autre part un nouvel arbre de racine D. Par ailleurs on a réglé l’orienta­
tion vers la droite (R pour right) de l’arbre avec l’option treemode. Autres choix : L,
D ou U (pour left, down ou up). On a aussi précisé la distance séparant les connexions
des nœuds avec l’option nodesep; la longueur des connexions est fixée avec l’option
levelsep. La commande \TR{A} construit le nœud et son étiquette A.

\usepackage{pst-tree} r
\psset ■( treemode=R, nodesep»5pt,
B
levelsep-1.7cm,arrows«->}
|œ| \pstree{\TR{A}}{ \TR{B}
A C
5 \TR{C1
p| \pstree{\TR{D}}{ \TR{E} E
\TR{F} D
>
1 F

On peut agir sur l’écartement entre les nœuds frères avec le paramètre treesep :

\usepackage{pst-tree}
\pstree [nodesep»5pt ,treesep»0.4] {\Tc*{2mm}}{
\Tdia{A>

8
\Tcircle{B}-
\Ttri{C}
\TR{\psframebox{D}}
\TR{\psframebox [shadov«true , framearc«O. 3 ,
fillstyle-solid,fillcolor-gray]{E}} ! 0 Q
>

Les techniques habituelles (cf. 9.7) de placement de texte le long de connecteurs


fontionnent toujours.

\usepackage{pst-tree>
\psset{nodesep-5pt,treesep»! ,
levelsep»! . 5cm , arrows—>} 1 -P
\pstree{\Toval{BernoullilX

8 \pstree{\TR{Al} \nbput{$l-p$}}
{\TR{A2} \nbput{Sl-qîl
\TR{B2} \naput{Sq$l
\pstree{\TR{Bl} \naput{$p$l 1
{\TR{A3} \nbput{Sl-rS}
}

'■’A’
Al
1 —r r
:
i

\TR{B3} \naput{$r$} 1
1 A2 B2 A3 B3
132 Chapitre 11. Graphes et arbres avec PSTricks

Un dernier exemple qui montre l’étendue des possibilités de la commande \pstree.

\usepackage{pst-tree}
\newcommand{\Boite}[1]{\Tr[ref■!]{\psframebox{#l}}}

\renevcommand{\psedge}{\ncangle}
\psset{treemode-R, ,treesep-0.3, angleB-180 , angleA-0 ,levelsep-2.6cm}
\pstree{\Boite{George VI}}{

B \Boite{Margaret}
\pstree{\Boite{Elisabeth II}}{
\Boite{Charles}
\Boite{Anne}
\Boite{Andrew}
\Boite{Edward}
1
}

— Charles
r- Margaret
George VI — Anne
Elisabeth II
— Andrew

— Edward

11.4 Création assistée d’arbres PSTricks


L’auteur deTexmaker, proposePstplus ([Link] un
outil qui permet, entre autres, de générer le code compatible avec PSTricks pour des
arbres à construire dans une interface simple et ergonomique.
ts. St fl -
r<hK jm

-------- i____ __________


| i-»«»
:__ ... ,
I EH;
k-04 »
; w
0.6 B
\

1____ Oo-e*____ A
0.3
c
0.1
TJ • IJ
n | U*X IkWSwWl
t LJ-. 0.4
0.5
D

. • . ::V~.
toWTat i 0.8 B 0.2
t pti A
0.9
W.3))
y w_.
\:oA-|V«.i>r)(IU)\t4r>t('JM!L [Link]) g .fTSKLfti. 0.2 B

Un autre outil de génération de code PSTricks d’arbres est disponible à l’adresse


[Link]
Chapitre 12
Constructions géométriques avec
TikZ

Pour créer des graphismes directement dans DTgX, il existe deux1 outils : PSTricks
et PGF/TikZ. Les deux étant également à la fois puissants et fréquemment utilisés
dans les documents sur le Web, le choix a été fait de les présenter tous les deux dans
cet ouvrage. Dans ce chapitre, vous trouverez les éléménts de base pour construire des
figures (essentiellement géométriques) avec TikZ. Le chapitre 9 suit une présentation
parallèle avec PSTricks.

\usepackage{tikz}
\begin{tikzpicture}
\draw(O,O) circle(2);

B
jn\draw(0,0) circle(2.5);

>> 1% segments en coordonnées polaires ;


\foreach \k in <0,...,360}
\draw(10*\k: 2)--(15*\k: 2.5) ;
\end{tikzpicture}

1. On pourrait ajouter Metapost et Asymptote mais ce sont plutôt des outils externes.
134 Chapitre 12. Constructions géométriques avec TikZ

12.1 Présentation de TikZ


PGF/TikZ est un vaste ensemble de macro-commandes permettant de réaliser des
graphismes de qualité dans un document I^TeX. Un des concurrents sur le terrain des
graphismes est le package PSTricks qui est présenté dans le chapitre 9. La syntaxe
est très différente et le choix de l’un ou l’autre est une question de goût.

12.2 La page A4 et le plan affine


Lorsqu’on construit une figure, on préfère généralement qu’un espace lui soit ré­
servé dans la page pour que le texte autour ne vienne pas empiéter sur la figure. TikZ
sait gérer cela : le compilateur détermine le plus petit rectangle 2 dans lequel il peut
tracer la figure incluse dans l’environnement tikzpicture. Ensuite, il place la figure
à l’endroit où se trouve le curseur.
begin{tikzpicture} ... \end{tikzpicture}

Bla blabla bla bla bla bla bla


bla bla blabla bla bla bla bla
bla bla blabla bla. /
i
i
/
/ \
/ \
/ i
i /
\
bla bla bla bla bla bla
Bla blabh \
bla bla lblabla bla bla bla.
\

Document A4 Plan orthonormal affine TikZ

Pour visualiser les bords de la zone délimitée par TikZ, il est pratique de des­
O siner ses contours :
\begin{tikzpicture} [show background rectangle] ...\end{tikzpicture}.

\usepackage{tikz} Les contours montrent bien


Les contours montrent bien [...] l’espace réservé par l’environ­
nement tikzpicture.

B \begin{tikzpicture} [shov background rectangle]


\draw(l,l) circle(0.5);
\end{tikzpicture}

Nouveau paragraphe.
Nouveau paragraphe.

2. En fait, il ajoute une petite marge sur chaque bord pour aérer.
12.3 Marquer et nommer des points 135

12.3 Marquer et nommer des points


Pour placer un marqueur sur un point, on a le choix entre deux types de coordon­
nées :
— cartésiennes (x, y) : une abscisse x et une ordonnée y séparées par une virgule ;
— polaires (a : r) : un angle a (en degrés) et un rayon r séparés par deux points.

\draw(x,y) node[param]{marqueur} ; \draw(a:r) node[param]{marqueur} ;

\usepackage{tikz}
\begin{tikzpicture} 3

\draw (1,3) node{$\bullet$}; 7. cartésiennes i


\draw (40:2) node{$\bullet$}; 7. polaires
2:... +
B \draw (3,3) node {$\red\bullet$};
\draw (3.2) node {$\circ$};
\draw (3.1) node {$\Box$};
\draw (4.3) node [scale-2]{$\bullet$};
\draw (4.2) node[scale-2] {$*$}; a - 40°

\draw (4,1) node[scale-3]{$\time8$} ; ï ’ 2


\end{tikzpicture}

Pour nommer les points, on place l’étiquette en précisant l’orientation en anglais


dans les paramètres entre crochets : below, above, lef t ou right. Les combinaisons
sont possibles. Une rotation peut même être ajoutée.

\usepackage{tikz}

I
\begin{tikzpicture} I

B •a !
\draw(l, 1) node{$\bullet$} node [left]{$A$};
\draw(1,0) node{$\bullet$} node [right] {$B$} ;
\draw(3,1) node{$\bullet$} node[below right]{S\Delta$};
\draw(3,0) node{$\bullet$} node [right, rotate-30]{$M_1$}; [
•B
\end{tikzpicture}

12.4 Géométrie plane : lignes et surfaces


Pour les segments et lignes brisées, le principe est simple : dessiner (\draw) des
lignes (—) entre des points dont on donne les coordonnées.

\draw[options] (xl,yl)— (x2,y2)— ... —(xn,yn);

\usepackage{t ikz}
\begin{tikzpicture}

B
£|\draw[dashed] (0,0)--(1,2);
1 \draw[->] (1,0) —(2,2) — (3,1);
•h | \draw [line width-2pt, I ->] (3,0) — (4,2) ;
\draw[{[-]},blue]
\end{tikzpicture}
(4,0)--(3,2);
136 Chapitre 12. Constructions géométriques avec TikZ

Pour les polygones, on utilise cycle qui permet de fermer un chemin, ce qui permet
de le remplir.
\draw[options] (xl,yl) — (x2,y2) — (x3,y3)—cycle ;

\usepackage{tikz}
\begin{tikzpicture}
m \draw (0,0)--(1,0)—(0.5,2)--cycle ;
J \drav[fill-red]
; g! (2,0) —(1,1)--(2,2)--(3,1)--cycle;
L_J \draw [pattern-north east Unes]
(3,0)--(4,2)--(5,1)--cycle;
\end{tikzpicture}

Pour tracer un cercle, il suffit de donner son centre (x,y) et son rayon : Pour les
arcs et secteurs angulaires on précise de plus l’amplitude angulaire al : a2.
\draw[opts](x,y) circle(r); \draw[opts](x,y)++(al:r) arc(al:a2:r) ;

\draw[opts](x,y)—++(al:r) arc(al:a2:r)—cycle;

\usepackage{tikz}
\begin{tikzpicture}
\draw (1,1) circle (0.75);

8
*1 \drav [red,->] (1 ,1)++(-45:0.9) arc (-45:45:0.9);

\draw (3,1)--++(45:0.8) arc(45 :315:0.8)--cycle ;


\draw[fill=red] (3.2 ,1)--++(-45:0.8)
arc(-45:45:0.8)--cycle;
\end{tikzpicture}

| La syntaxe à base de ++ ci-dessus est expliquée en 12.6 .

On définit une ellipse comme un cercle, en précisant simplement le petit et le


grand rayon rl et r2. Pour un arc d’ellipse, attention, x et y sont les coordonnées de
l’extrémité de départ.
\draw[opts](x,y) ellipse (rl and r2);

\draw[opts](x,ÿ) arc (al:a2:rl and r2);

\usepackage{tikz}
\begin{tikzpicture}
\draw (0,1/2) ellipse (1.5 and 0.25);
a. \drav (-1.5,-0.5) — (-1.5,0.5);
£K \drav (1.5,-0.5) — (1.5,0.5);
_5J \draw (-1.5,-1/2) arc (-180:0:1.5 and 0.25);
\draw [dotted] (1.5,-1/2) arc (0:180:1.5 and 0.25);
\end{tikzpicture}
12.5 Simplifier les constructions avec coordinate 137

12.5 Simplifier les constructions avec coordinate


Pour concevoir une figure, il est plus pratique de désigner les points par des noms
comme on le fait en mathématiques : soit P le point de coordonnées (x,y). C’est
exactement ce que fait la commande suivante sans rien dessiner.
\coordinate(P) at (x,y);

\begin{tikzpicture}
\coordinate (A) at (0:1) ;
\coordinate (B) at (72:1) ; \coordinate (C) at (144:1);
\coordinate (E) at (-72:1); \coordinate (D) at (-144:1);

\draw(A) — (B )--( C)--(D )--(E)--cycle;


\draw [dashed] (A)--(C)--(E) —(B) — (D) —cycle ;
\end{tikzpicture}

12.6 Coodonnées relatives


Dans le plan TikZ, on peut repérer un point relativement à son prédécesseur :
++(x,y). Cette notation s’interprète comme une translation de vecteur (x,y).
Ainsi (3,4)—++(2,0)—++(0,0.5) signifie (3,4) — (5,4) — (5,4.5).
Voici un exemple qui serait difficilement réalisable sans l’usage des coordonnées
relatives : il s’agit de poser le sommet d’un rectangle sur un arc de cercle.

\usepackage{tikz}

S
\begin{tikzpicture}
\draw (3,0) arc (0:90:3);
^1 \draw[thick] (30 :3)--+♦ (2,0)--♦♦ (0,1)
--♦♦(-2,0)—cycle;
\end{tikzpicture}

Pour revenir sur la remarque de la page 136, concernant le tracé d’un arc de cercle
avec la commande \draw(5c,ÿ) arc (al :a2:r), le point (5c, ÿ) n’est pas le centre mais
l’extrémité de départ3 comme on le voit dans l’exemple ci-dessus. Les coordonnées
relatives facilitent donc grandement le tracé de l’exemple suivant.

\usepackage{tikz}
\begin{tikzpicture}
\draw (2,0)--♦♦(70: 2);
\draw (2,0)--++ (135:2);
\draw (2,0)++(70:1) arc (70:135:1);
\end{tikzpicture}
I

3. Ce choix est sans doute lié à l’accent mis sur les chemins dans TikZ.
138 Chapitre 12. Constructions géométriques avec TikZ

12.7 Marquer les dimensions des segments


Tout comme on dessine des étiquettes pour les points, on peut placer un texte (et
plus généralement n’importe quel matériel) sur le chemin reliant deux points.

\draw (xl,yl) —node[options]{texte} (x2,y2);

Le paramètre sloped permet d’écrire en suivant la direction du chemin.

\usepackage{tikz}
\begin{tikzpicture}[x-2cm]
\draw(0, 0) —node[above]{Dessus} (1,1); Dessj
ü”l \draw (0 , 0) --node{Sur} (1,0);
\draw(0, 0) --node[below]{Dessous} (1,-1); ■Sttr sur
\draw(l, 1) —node[sloped,above]{dessus} (2,0);
\draw(l, 0) --node[fill»white]{sur} (2,0); Dessoi
\draw(1,-1) —node [sloped,below]{dessous} (2,0);
\end{tikzpicture}

Une connexion entre deux noeuds peut être décalée perpendiculairement par rap­
port à sa position de définition en utilisant des coordonnées spéciales, calculées par
rapport à la connexion entre ces deux noeuds.

$(xl,yl) ’.dist ! angle : (x2,y2)$

Voyons cela sur un exemple : $ (0,0) ! 2mm ! 90 : (3,1) $ signifie littéralement «Consi­
dérer le segment reliant (0,0) à (3,1) et y construire un point à 2mm de (0,0) puis
faire subir à ce point une rotation de 90° de centre (0,0).

\usepackage{tikz}
\usetikzlibrary{calc}
\begin{tikzpicture}
\draw(0,0)--(3,l);
\draw($(0,0)! 8mm!90:(3,1)$)--($(3,1)! 8mm!-90:(0,0)$);
\draw($(0,0)! 4mm1-90:(3,1)$)--($(3,1)! 4mm ! 90 :(0,0)$);
\end{tikzpicture}

Appliquons ces outils à un exemple concret :


\usepackage{tikz}
\uset ikzlibrary{cale}
\begin{tikzpicture}
\draw (1,0)— (2,2) — node[above]{Ll}(3,2)

B
— (4,0) — node[below]{L2} cycle;

k \draw[<->] ($(1,0)! 5mm!90:(2,2)$)


—' — node [fill-white]{$H_l$} ($(2,2)! 5mm !-90 :(1,0)$) ;
\draw[|-|] ($(3,2)! 4mm ! 90 :(4,0)$)
— node[above,sloped]{$x$} ($(4,0)! 4mm !-90 :(3,2)$) ;
\end{tikzpicture}
12.8 Exemple récapitulatif commenté 139

L2

12.8 Exemple récapitulatif commenté


i \begin{tikzpicture}
2 \coordinate(A) at (2,3); \coordinate(B) at (0,0);
3 \coordinate (H) at (2,0); \coordinate(C) at (3,0);
4 \draw (A)--(B)--(C)—cycle;
5 \draw (A) node[above]{$A$}
6 (B) node[left]<$B$}

8
7 (C) node[right]<$C$}
8 (H) node[below right]{$H$};
9 \draw (H) rectangle ++(45:0.2);
10 \draw (B) — node [above , shif t-{ (-0.5,0) }] {$4\sqrt {2}$} (A);
11 \draw (A) — node [above , shif t-{(0.5,0) }] {$2\sqrt{5}$} (C) ;
12 \drav[<->] ($(B)! 4mm !-90 :(H)$) — node [fill-uhite]{4} (S(H)! 4mm ! 90 :(B)S) ;
13 \draw [dashed] (A)-- node[sloped]{\small /} (H);
14 \draw (B) — node [sloped] {\small //} (H);
15 \end{tikzpicture}

A
4^2 / \ 2y/5

B ZZ
<- 4—>"
c

Lignes 2 et 3 on définit les points de la figure,


Ligne 4 on peut construire des objets graphiques en utilisant les noms définis précé­
demment ou en mixant avec des coordonnées cartésiennes.
Lignes 5 à 8 on place les noms des points sur la figure.
Ligne 9 on place la marque de l’angle droit.
Lignes 10 à 12 on place les dimensions des différents segments.
Lignes 13 et 14 on place des marques sur des segments.
140 Chapitre 12. Constructions géométriques avec TikZ

12.9 Export GeoGebra


Le logiciel de géométrie dynamique GeoGebra propose de générer le code TikZ
des figures construites à la souris. Fichier—* Exporter en—♦ P GF/TikZ.
Il est préférable d’utiliser un rectangle de sélection (clic droit de la souris) si on
ne souhaite qu’une partie de la fenêtre. Ainsi, une commande clip aux dimensions
du rectangle de sélection sera insérée dans le code produit.
Voici l’export GeoGebra d’une figure constituée d’un rectangle avec deux bissec­
trices et son cercle inscrit.

1 \def inecolor{wrwrwr}{rgb}{0 .3803,0.3803,0.3803}


2 \definecolor{rvwvcq}{rgb}{0 .0823,0.3960,0.7529}
3 \begin{tikzpicture}[line cap-round,line join-round,
4 >-triangle 45,x=lcm,y-lcm]
5 \clip(-14.2027,-7.5054) rectangle (13.7972,9.1309);
6 \fill[line width-2pt,color-rvwvcq,fill-rvwvcq, f ill opacity-0.1000]
7 (-8.46,-0.95) — (0.8,-2.39) — (-7.5929,4.6257) — cycle;
8 \draw [line width-2pt,color-wrvrvr] (-8.46,-0.95)-- (0.8,-2.39);
9 \draw [line width-2pt,color-rvwvcq] (-8.46,-0.95)-- (0.8,-2.39);
10 \draw [line width-2pt,color-rvwvcq] (0.8,-2.39)-- (-7.5929,4.6257);
11 \draw [line width-2pt,color-rvwvcq] (-7.5929,4.6257)-- (-8.46,-0.95);
12 \draw [line width-2pt,color-wrwrwr,domain--14.2027 :13.7972]
13 plot(\x,{(--4.2248--0.5900*\x)/0.8073});
14 \draw [line width-2pt,color-wrwrwr,domain--14.2027 :13.7972]
15 plot(\x,{(-5.4757-0.9358*\x)/0.3523});
16 \draw [line width-2pt,color-wrwrwr] (-6.1335,0.7502) circle (2.0375cm);
17 \begin{scriptsize}
18 \draw [fill-rvwvcq] (-8.46,-0.95) circle (2.5pt);
19 \draw[color-rvwvcq] (-8.766363636363634,-0.46) node {SAS};
20 \draw [fill-rvwvcq] (0.8,-2.39) circle (2.5pt);
21 \draw[color-rvwvcq] (0.9427272727272799,-2.0054545454545467) node {$B$};
22 \draw [fill-rvwvcq] (-7.59292262005074,4.625789262729273) circle (2.5pt);
23 \draw[color-rvwvcq] (-7.439090909090906,5.012727272727274) node {$C$};
24 \draw [fill-wrwrwr] (-6.133575297056303,0.7502468389738048) circle (2pt);
25 \draw[color-wrwrwr] (-5.73,0.8127272727272727) node {$D$};
26 \end{scriptsize}
27 \end{tikzpicture}

Notez bien qu’on a ici éliminé le préambule généré par GeoGebra pour
ne conserver que la partie qui nous intéresse entre \begin{document} et
\end{document}.

Même si on reconnaît les commandes, le code est assez confus. On peut l’alléger
en supprimant les notions de couleur : color=wrwrwr, ce qui, une fois fait, permettra
de supprimer les définitions de ces couleurs devenues inutiles : \def inecolor.
Si la figure est trop grande, on peut ajouter l’option scale=0.5 dans le crochet
des options de \begin{tikzicture}. Enfin, on pourra jouer avec les coordonnées du
rectangle de la commande \clip pour couper les éléments qui dépasseraient trop.
12.10 Constructions euclidiennes avec tkz-euclide 141

12.10 Constructions euclidiennes avec tkz-euclide


Les coordonnées cartésiennes sont parfois pénibles à calculer. Avec le package
tkz-euclide, on peut construire des figures à l’aide de descriptions euclidiennes : on
définit les points de départ, puis on utilise des commandes du type, milieu, médiatrice,
ou homothétie. La lecture de la documentation est indispensable ([CTANj). Mais voyez
comme cet exemple parle de lui-même :

Xusepackage{tkz-euclide}
Xusetkzobj{ail}
\begin{tikzpicture}
X Les points M, P et Q et le triangle
XtkzDefPoint(0,0){M} \tkzDefPoint(1.5,3){P}
XtkzDefPoint (4,0){Q} \tkzDrawPolygon(M,P,Q)
X Deux bissectrices
XtkzDrawBisector(M,P, Q) XtkzGetPoint {P '}

B
XtkzDrawBisector(Q,M , P) XtkzGetPoint{M ' }
X L'intersection I des bissectrices
XtkzInterLL(M,M')(P,P') \tkzGetPoint{1}
X Le cercle inscrit
XtkzDefPointBy [projection«onto M—P](I)
XtkzGetPoint{I'}
XtkzDrawCircle (1,1')
X Marquage des points et étiquettes
XtkzDrawPoints(M,P,Q,P 1,W ,1,1*)
XtkzLabelPoints(M,Q,I,I',P')
\tkzLabelPoints [right](P,M ' )
\end{tikzpicture}

Dans ce second exemple, on commence par construire les trois points B, C et D,


on construit ensuite les points A et O par homothétie de centre C et D et enfin les
points E et F par homothétie de centre O.

\usepackage{tkz-euclide}
\begin{tikzpicture} [xscale»l,yscale-0.5]
X Les points A, B et C
XtkzDefPoint (4 , -0.5){B} XtkzDefPoint(3,1){C} XtkzDefPoint(2,0){D}
X Première homothétie
XtkzDefPointBy[homothety ■ center C
ratio —11(B) XtkzGetPoint{0}
XtkzDefPointBy[homothety - center D

K
ratio —11 (B) XtkzGetPoint{A}
X Seconde homothétie
XtkzDefPointBy[homothety ■ center 0
ratio -1](A) \tkzGetPoint{E}
\tkzDefPointBy[homothety - center 0
ratio -11(B) \tkzGetPoint{F}
X Dessin des segments
XtkzDrawSegments(F,B A,E F.E A,B C,D)
X Marquage des points et étiquettes
XtkzDrawPoints(A,B,C,D,0,E,F)
XtkzLabelPoints(A,B,C,D,0,E,F)
\end{tikzpicture}
142 Chapitre 12. Constructions géométriques avec TikZ

12.11 La boucle foreach


Voici l’équivalent TikZ de la boucle for des langages de programmation. Elle
permet d’itérer plusieurs fois des instructions. Pour chaque valeur de la variable (ou
des variables) \var dans la liste, les instructions seront effectuées.
\foreach \var in {liste} {instructions}
La liste peut être définie en extension, c’est-à-dire en donnant tous les éléments
séparés par des virgules comme dans {1,2,3,7,8,22} ou dans {lundi, mardi,
mercredi}. Cependant, on peut aussi utiliser des progressions arithmétiques, TikZ se
charge seul de déterminer la raison de la progression :
— {1,2,... ,50} : tous les entiers 1, 2, 3, 4 etc. jusqu’à 50;
— {2,6,... ,47} : les entiers de la forme 2 4- 4n entre 2 et 47 ;
— {1,0.5,... ,-1} : les nombres décimaux relatifs 1, 0,5, 0, —0.5, —1.

\usepackage{tikz}
\begin{tikzpicture}[x«0.5cm]

È
\foreach \x in {0,1,...,8} { 0 3 4 5 6 7 8
\draw (\x,lmm) node{$\bullet$} node[above]{\x};
1 2
}
\end{tikzpicture}

On peut aussi tracer des segments horizontaux superposés dans un rectangle ou


avec une double boucle, placer un grand nombre de points en seulement quelques
lignes de code.

\usepackage{tikz}
\begin{tikzpicture}
\draw (0,0) rectangle (1,2);
\foreach \y in {0,0.2,...,2} {

B
\draw (0,\y)—(l,\y);
}
\foreach \x in {1.8,2.1,. 3.7} {
\foreach \y in {0.5,0.8 .,1.8} {
\draw (\x,\y) node{$\bullet$};
}
}
\end{tikzpicture}

\usepackage{tikz}
\begin{tikzpicture}[x-3cm ,y»3cm]
\foreach \a in {0,1 180} {
\drau (\a:l) — (\a:0.85);
}

g \foreach \a in {10,20,...,170}{

}
\draw[thick](\a:l)--(\a:0.8) ;
\draw (\a:0.75) node{\tiny \a};

\draw(l,0) arc (0:180:1) — cycle;


\draw (0,0) node{$\circ$};
\end{tikzpicture}
12.12 Transformations du plan avec scope 143

On peut effectuer des boucles sur des n-uples, c’est à dire itérer plusieurs variables
simultanément et de façon associée, en les séparant avec une barre oblique. Dans
l’exemple suivant, on itère sur les trois variables x, mois et ef f qui prennent chacune
une nouvelle valeur, dans la liste, à chaque tour de boucle.

\usepackage{tikz}
\begin{tikzpicture} I
\foreach \x/ \mois/ \eff in n

1
{l/Jan/20, 2/Fév/19, 3/Mar/36,
4/Avr/29, 5/Mai/ll, 6/Jui/27 }{
\draw(\x,0) node[below] {\mois};
\draw[fill-red](\x-0.3,0) rectangle

}
\end{tikzpicture}
(\x+0.3,\eff); Ui —; □
Jan Fév Mar Avr Mai .lui

12.12 Transformations du plan avec scope


Avec l’environnement scope, on peut isoler une partie du dessin et lui faire su­
bir des transformations comme des translations ou des rotations. Les homothéties,
similitudes et affinités sont aussi possibles.

\usepackage{tikz}
\begin{t ikzpicture}
\draw (0,0)—(1,1)—(0,1) —(1,0);

O \begin{scope}[xshift-2cm]
h \draw (0,0) —(1,1) —(0,1) —(1,0);
\end{scope}

\begin{scope} [xshift»2cq,yshift«1cm, rotate-20]


\draw (0,0)--(1,1)--(0,1) —(1,0);
\end{scope}
\end{tikzpicture}

\usepackage{tikz}
\begin{tikzpicture}
\draw (0,0) —(1,1)--(0,1) — (1,0) ;

ü
\begin{scope}[xshift-1.5cm,scale-0.5]
\draw (0,0)—(1,1)--(0,1)--(1,0) ;
\end{scope}

\begin{scope } [xshif t "2.5cm , yshif t“l cm , x«0.6cm, y*-2cm]


\draw (0,0)--(1,1)--(0,1) —(1,0) ;
\end{scope}
\end{tikzpicture}
X
144 Chapitre 12. Constructions géométriques avec TikZ

12.13 Cordonnées calculées avec TikZ


Les coordonnées d’un point peuvent être saisies sous forme d’un calcul que le com­
pilateur va effectuer. Par exemple la commande \draw(l+l,1/2)— (0,{sqrt(4)})
est équivalente à \draw(2,0.5) — (0,2).
Remarquez les accolades autour de sqrt(4) : elles évitent que la parenthèse
fermante après 4 qui ferme l’expression racine carrée soit interprétée comme
celle qui ferme l’énoncé des coordonnées.
Exemple : Le triangle de sommets (0,0), (0,2 + \/2), (2 + V2,0) admet le cercle de
centre (1,1) et de rayon 1 comme cercle inscrit :

\usepackage{tikz}

I
\begin{tikzpicture}[scale-0.66]
\draw(0,0)--(0,{2+sqrt(2)})
—({2+sqrt(2)},0)—cycle;
\draw (1,1) circle(l);
\end{tikzpicture}
hapitre

Courbes avec TikZ

TikZ permet de tracer des courbes dans des repères ou des quadrillages adaptés
en écrivant le code directement dans Ce chapitre présente les techniques pour
tracer les représentations les plus usuelles dans les études de fonctions. Le chapitre 10
suit une présentation parallèle à celui-ci mais avec PSTricks.

\usepackage{tikz}
\begin{tikzpicture} [xscale-1,yscale«1.5]
\tkzlnit [xmin=-l. 5 , xmax-3 , ymina-l, ymax“l]

S \tkzAxeXY[orig=faise,swap]
\draw[domain = -1.5:3]
plot (\x, {l/(l+(\x)‘2)} );
\draw (1,0.5) node[scale-1] {$\bullet$}
node[above right] {$A$};
\end{tikzpicture}
146 Chapitre 13. Courbes avec TikZ

13.1 Repères et axes gradués


Le package tkz-base apporte des commandes pour tracer un axe des abscisses,
des ordonnées ou les deux axes othogonaux d’un repère du plan :

\tkzAxeX[opt] \tkzAxeY[opt] \tkzAxeXY[opt]

Les dimensions du repère sont définies grâce à la commande :

\tkzlnit [xmin=0,xmax=10, xstep=l, ymin=O, ymax=10 ,ystep=l]

\usepackage{[Link]-base}
£ \begin{tikzpicture} F— -+- -+- -+- -+-
\tkzlnit[xœin"-l,xmax-3]
\tkzAxeX;
-1 0 1 2 3 x
\end{tikzpicture}

La commande \tkzDefPoint permet de définir des points sur les axes et avec
l’option label, on peut remplacer le x par défaut.

\usepackage{tikz,tkz-base}
\begin{tikzpicture}[scale-2]

I \tkzlnit[xmin-37.2,xmax«37.4,xstep«0.1];
\tkzAxeX[label«{temp.}];
\tkzDefPoint(37.35,0){T}
\drav(T) node {$\bullet$} node[above]{t};
\end{tikzpicture}
H
37,2
—H
37,3
t
37,4 temp.

Pour un repère simple, le code est simple.


3/a
\usepackage{tikz,tkz-base} 1 ■■
\begin{tikzpicture}

B \tkzlnit[xmin--l,xmax»2,

\tkzAxeXY
ymin«-l,ymax-1]

\end{tikzpicture}
i------ 0
-1
-11
+
1
-+-
2 x

On peut supprimer les mentions des variables avec label«O et les 0 avec l’option
orig=faise qu’on complète avec l’option swap qui évite un petit blanc disgrâcieux.

s
\usepackage{tikz,tkz-base} 1
\begin{tikzpicture}
\tkzlnit[xmin--0.5,xmax»l,xstep-0.5,
ymin"-0.5,ymax-1] i— —4— ■+-
\tkzAxeXY[label-{},orig-faise,swap] -0,5 0,5 1
\end{tikzpicture}
-1
13.1 Repères et axes gradués 147

Pour un repère aux graduations trigonométriques et fractionnaires, on peut uti­


liser les options trig=t et frac-f qui permettent d’obtenir des graduations trigo­
nométriques en y et fractionnaires en y sur deux axes tracés séparément. L’option
label options permet de régler l’allure des graduations ici, on modifie la distance
des fractions trigonométriques à l’axe des abscisses pour éviter que les fractions soient
trop collées à celui-ci.

\usepackage{tikz,tkz-base} y
\begin{tikzpicture}
\tkzlnit[xmin«-2,xmax-4,
1
1

B ymin-0,ymax-1,ystep-0.5] A
\tkzAxeX [trig-3,label options-{below ■ 8pt}] 2
XtkzAxeY[frac«2]
\tkzDefPoint(pi,0.5){A} 04- x
—7F 7F 27F
\draw(A) node{$\bullet$} node[above]{$A$}; 0 7r
\end{tikzpicture} V 3 3

Pour des repères personnalisés, notamment avec des sous-graduations, on pourra


utiliser des boucles foreach pour placer des graduations et des coordonnées.

\usepackage{tikz}
\begin{tikzpicture}
\draw[->] (-1,0)--(3.5,0) ;

s
\foreach \x in 3} {
\draw[thick] (\x,2mm)--(\x,-2mm)
node[below]{$\x$} ; };
JjJ \foreach \x in {-1,-0.75,...,3} { Ji H I I I I | l-wf
\draw (\x,1mm)--(\x,-1mm); -1 0 1 2 3
\foreach \y in {0,0.1.... 1} {
\draw (-1mm,\y)--(1mm,\y) ; };
\end{tikzpicture}

Pour construire un repère trigonométrique personnalisé, on fait appel aux boucles


sur des n-uples (cf. dernière partie de 12.11).

\usepackage{tikz}
\begin{tikzpicture}[xscale-0.2]
\draw[->,>»latex] (-7,0) — (11,0);
\draw [->,>-latex] (0,-0.5) — (0,0.5);

E
\foreach \x/\label in
{-2/-2\pi, -l/-\pi, l/\pi, 2/2\pi, 3/3\pi} { |lllll|llllliHHl|lilll|llHl|«
\draw[thick] (\x*3.14,2mm) — (\x*3.14,-2mm) TT 27F 37F
-2?r -7T
node(below) {$\label$}; };
\foreach \x in {-12,...,18} {
\draw (\x*3.14/6,1mm) — (\x*3.14/6,-1mm);
>;
\end{tikzpicture}
148 Chapitre 13. Courbes avec TikZ

13.2 Quadrillages
L’instruction grid permet de tracer des quadrillages rectangulaires dont la dia-
gnale a pour extrémités (xmin,ymin) et (xmax,ymax).
\draw ([Link]) grid (xmax ,ymax)

\usepackage{tikz}
\begin{tikzpicture}
\draw (-1,0) grid (3,2);
\end{tikzpicture}

La taille des divisions est pesonnalisable avec l’option step. La graduation est à
ajouter manuellement.

\usepackage{tikz} 2

s
\begin{tikzpicture}
\draw (-1,0) grid [step-0.25] (3,2);
\foreach \x in {-1,0,1,2,31 {
1
\draw (\x,0) node[below]{$\x$}; };
\foreach \y in {0,1,2} {
\draw (-l,\y) node[left]{$\y$}; };
0
\end{tikzpicture} -1 0 1 2 3

\usepackage{tikz}

i
\begin{tikzpicture}
\clip(-l.5,-0.1) rectangle (3.5,2.1);
\drav[gray] (-1,0) grid (3,2);
\draw[gray,very thin] (-1,0) grid[step=O.1]
\end{tikzpicture}

Le cas des repères logarithmiques ou semi-logarithmiques peut être traité avec des
boucles \foreach.
\usepackage{tikz}
usetikzlibrary{cale}
\begin{tikzpicture} 103
\draw (-1,0) grid (3,3);
\foreach \y in {0,1,2} {
\foreach \yy in {1,2,...,10} 102
\draw (-1 ,{\y+ln(\yy)/ln(10)})
—(3,{\y+ln(\yy)/ln(10)});
} 101
\foreach \x in {-1,0,1,2,31
\draw (\x,0) node[below]{$\x$};
\foreach \y in {0,1,2,3} 10°
\draw (-l,\y) node[left]{$10"\y$}; -1 0 2 3
\end{tikzpicture}
13.3 Courbes 149

13.3 Courbes
C’est extrêmement simple de tracer le graphe d’une fonction. Il suffit de charger
le package tikz, puis d’utiliser la commande \draw plot. La syntaxe est en général
la suivante :

\draw [domain^xmin:xmax] plot (\x, {fonction de \x} )

où xmin et xmax sont les bornes du domaine de définition (au sens de l’intervalle de
traçage) et fonction est la fonction de (a variable x exprimée de façon algébrique
usuelle avec les opérateurs suivants :

Expression Syntaxe Expression Syntaxe Expression Syntaxe


a x b a*b a -r- b a/b y/â sqrt(a)
ab aAb ln(a) ln(a) ex exp(x)
cos(a) cos(a) sin(a) sin(a) tan(a) tan(a)
Arccos(a) acos(a) arcsin(a) asin(a) arctan(a) atan(a)
Arrondi round(x) Partie entière floor(x) Partie entière ceïl(x)
kl abs(x) min(z,?/) min(x,y) max(r, y) max(x,y)

Voici comment tracer la courbe d’équation y = x2 + x sur l’intervalle [—1.5,1].

\usepackage{tikz}
\begin{tikzpicture}
(-2,0)--(1,0);

8
\draw[->]
\draw[->] (0,-1)--(0,2) ;

7» La courbe
\draw[domain«-l.5 :1] plot (\x, {(\x)~2+\x} );
\end{tikzpicture} :
i

On trace aussi facilement plusieurs courbes sur un même repère. Remarquez le


lissage appliqué sur la courbe en trait épais avec l’option smooth.

\usepackage{tikz}
\begin{tikzpicture} [xscale-0.4, domain "-4:7]
\drav[->] (-4,0) — (7,0) node[right) {$x$};
\draw[->] (0,-1) — (0,1.5) node[above] {$y$};
\foreach \x/\xtext in {-l/-\pi,l/\pi,2/2\pi} {

g \draw (3.14*\x,1mm) --
(3.14*\x,-1mm) node [below]{$\xtext$}; }
■o | \foreach \y in {-1,1}
\draw (1mm ,\y)--(-1mm,\y) node[left]<$\y$};
\draw plot (\x, {sin(\x r)} );
\draw[line width»2pt,smooth]
plot (\x, {cos(\x r)} );
\end{tikzpicture}
150 Chapitre 13. Courbes avec TikZ

Même si TikZ sait faire quelques calculs, il n’a pas les capacités d’un logiciel de
calcul formel. Il faut donc veiller à ne pas le pousser à la faute. L’exemple de la
fonction x | est révélateur. Le domaine de tracé est un intervalle fermé, il doit
donc être inclus dans le domaine de définition de la fonction à tracer. Dans l’exemple
suivant, c’est donc une fonction définie par deux morceaux [domain=-2 : -0.2] et
[domain=0.2:2] qui est représentée.

\usepackage{tikz,tkz-base}
\begin{tikzpicture}[scale-0.2]
\tkzlnit [xmin--2,xmax-2,ymin--2,ymax-2]
p£~j \tkzDrawXY 7, Trace les axes avec les graduations

11 % La courbe
% mais sans les coordonnées

\drav[domain- -2:-0.2] plot (\x, {l/\x} );


\draw[domain-0.2:2 ] plot (\x, {l/\x} );
\end{tikzpicture}

Cela fonctionne mais les valeurs extrêmes des ordonnées sont trop grandes (—5 et
+5). On peut évidemment calculer les abscisses pour que les ordonnées conviennent
mais cela peut être fastidieux.
Une solution consiste à utiliser la commande \clip, qui permet de réduire la
fenêtre d’affichage à une zone en éliminant tout ce qui en dépasse.

\clip (xmin,ymin) rectangle ([Link]);

\usepackage{tikz,tkz-base}
\begin{tikzpicture}[scale-0 .5,>-latex]
\tkzlnit[xmin--2,xmax-2,ymin--2,ymax-2] y
\tkzDrawXY

\clip (-2,-2) rectangle (2,2);


X
% La courbe
\drav[domain- -2:-0.2] plot (\x, {l/\x} );
\draw[domain-0.2:2 ] plot (\x, {l/\x} );
\end{tikzpicture}

En réalité, la commande \clip permet de réduire la fenêtre d’affichage autour


O de n’importe quelle forme et pas seulement d’un rectangle.

\usepackage{tikz}
■^“i \begin{tikzpicture}[scale-1]
\clip (0,0) ellipse (2 and 1);
c \draw (0,0) ellipse (2 and 1);
\draw (-2,-2) grid[step-0.1] (2,2);
\end{tikzpicture}
13.4 Courbes fabriquées de toutes pièces... 151

13.4 Courbes fabriquées de toutes pièces...


Plutôt que de déterminer l’équation d’une fonction dont le graphe contient des
points de coordonnées entières, on peut utiliser la commande suivante qui construit
une courbe passant par les points demandés :

\draw plot [options] coordinates {(xl,yl) (x2,y2) ...([Link])};

\usepackage{tikz , tkz-base}
\begin{tikzpicture}
\clip (-3.2,-1.2) rectangle (1.6,2.2);
\draw[step-.25cm,lightgray,very thin]

E (-3,-1) grid (1,2);


\tkzlnit[xmin«-3,xmax=l,
ymin--l,ymax-1.5]
\tkzAxeXY[label-{}]
\draw plot [mark»* , mark size»0.6mm,smooth]
coordinates {(-3,0) (-2,1.5) (0,0) (1,1)};
\end{tikzpicture}

13.5 Surfaces délimitées par des courbes


Dans le cadre d’un travail sur les intégrales, il peut être intéressant de faire ap­
paraître une surface délimitée par des courbes et/ou des droites. Avec \fill, l’idée
consiste à «faire le tour» de la zone à mettre en valeur. Dans l’exemple suivant, la
zone à hachurer est délimitée dans sa partie haute par la courbe représentative de
f : x »-* 2“x2 sur [—1,1] et en bas par le segment d’origine (1,0) et d’extrémité
(—1,0) dans cet ordre.

\usepackage{tikz}
\usetikzlibrary{patterns}
\begin{tikzpicture} [xscale«0.98,yscale»2.5]

\fill[pattern«north east lines]


plot [domain = -l: 1] (\x, {(2~(-\x*\x))} )

B
— (1,0) — (-1,0) — cycle;

\draw[->,>»latex] (-2.2,0) — (2,0);


\draw[->,>-latex] (0,-0.2) — (0,1.2);
\foreach \x in {-2,-1,1}
\draw (\x , 0.3mm) - -(\x , -0.3mm) node [below] {$\x$} ;

\draw (1mm , 1)--(-1mm , 1) nodetabove left]{$l$};


\draw[domain»-2.2: 2] plot (\x, {(2~(-\x*\x))} );
\end{tikzpicture}

Les flèches autour de la figure ne font pas partie du code reproduit à gauche.
O Elles montrent le chemin parcouru pour hachurer avec \fill.
152 Chapitre 13. Courbes avec TikZ

Même principe pour griser une zone située entre deux courbes. La commande
\fill va suivre la description de la zone définie, d’abord de gauche à droite par la
portion du graphe de f : x •-* de x = 1 à 3, puis de droite à gauche par la
2^51 de x = 3 à 1.
portion du graphe de g : x
\usepackage{t ikz}
\begin{tikzpicture}[xscale-0.9,yacale«2.7, samples-300]
\f ill[color-gray! 40]
plot [domain-l:3] (\x, <sin(pi*\x r)/((\x*\x)+1)} )
— plot [domain-3:1] (\x, {1/((\x*\x) + 1)} ) — cycle;
\foreach \x in {1,2,3}

a \draw[thick] (\x,0.5mm)--(\x,-0.5mm);
\foreach \y in {0.2,0.4,...,1}
\draw[thick] (1mm,\y)--(-1mm,\y) node[left]{$\pgfmathprintnumber\y$};

\drav[->]
\draw[->]
(-0.5,0) — (3.5,0);
(0,-0.4) — (0,1.1);
\draw (1mm,1) — (-1mm,1) node[left] {$1$};
\draw [domain-0:3.5] plot (\x, {ain(pi*\x r)/((\x*\x)+ 1)} );
\draw[domain-0:3.5] plot (\x, {l/((\x*\x)+l)> );
\end{tikzpicture}

Remarquez, lignes 4 et 14, la syntaxe particulière sin(pi*\x r). Il s’agit bien


sûr de l’expression sin(Trx) mais deux remarques peuvent être faites. D’abord,
O on constate l’utilisation de la constante pi que propose TikZ. Ensuite, ce \x r
dans lequel r signifie qu’on travaille en radians : il s’agit d’une conversion (voir
la remarque au bas de la page suivante).
13.6 Courbes polaires et paramétrées 153

13.6 Courbes polaires et paramétrées


Les courbes polaires peuvent être tracées avec la commande \draw plot en lui
ajoutant une syntaxe spéciale.

\draw[domain=xmin:xmax] plot (xy polar es :angle=\x, radius={f (\x)}) ;

Le limaçon d’Archimède est un exemple de courbe polaire : p(x) = 3cos(|).

\usepackage{tikz} 90
\begin{tikzpicture}[scale-0 .5] 120 60
\foreach \a in <0,30,...,330} {
\draw[lightgray,thin] (0,0)--(\a:3); 150 30
\draw (\a:3.4) node{\a}; }

B
\foreach \r in {1,2,3}
\draw[lightgray,thin] (0,0) circle(\r); 180 0
\draw[domain»0: 540,samples-200,line width“2pt]
plot (xy polar es:angle “\x, 210 >30
radius«{3*cos(\x/3)}) ; i
i 240 300
\end{tikzpicture} ! 270
i

Pour tracer des courbes paramétrées, on utilise la commande classique :

\draw[domain=xmin:xmax] plot ({X(\x)J, {Y(\x)});

Voici un exemple de courbe paramétrée avec une courbe de Lissajous :

sin(5t)
pour t e [0,360]
sin(6t)

\usepackage{t ikz}
\begin{tikzpicture}[scale»l.5]
\draw[->, thick] (-1.3,0) — (1.3,0);
\draw[->, thick] (0,-1.3) — (0,1.3);

B
\foreach \x in {-1,1}
\draw (\x,1mm)--(\x,-1mm) node[belou]{$\x$};
\foreach \y in {-1,1}
\draw (1mm,\y)—(-1mm,\y) node [left] {$\y$};

\draw[domain«0: 360,samples-400,smooth]
plot ({sin(5*\x)},{sin(6*\x)}) ;
\end{tikzpicture}

Si on avait voulu tracer en radians sur [0, 2tt], on aurait écrit (voir la remarque
O au bas de la page précédente) :
\draw[domain=0:6.28,samples=400] plot (sin(5*\x r),sin(6*\x r)),
154 Chapitre 13. Courbes avec TikZ

13.7 Histogrammes et représentations statistiques


La commande \foreach s’applique à tous les usages. Voici comment on peut
construire un diagramme circulaire grâce à l’utilisation d’un quadruplet de variables.
\a et \b représentent les angles de début et de fin des secteurs angulaires. Mabel est
le texte à écrire dans le secteur et \p représente le pourcentage qui sert ici à moduler
l’intensité du gris avec fill=gray!\p.
\usepackage{tikz}
\begin{tikzpicture}[very thin]

\foreach \a/\b/\label/\p in
{ 0/158.4/Pacifique/44 ,
158.4/259/Atlantique/28,
259/327.6/Indien/19,

I
327.6/345.6/Austral/5,
345.6/360/Arctique/4
} {
\draw[f ill=gray!\p]
(0,0)
—(\a:3) arc (\a:\b:3)
— cycle ;
\draw({(\a+\b)/2}: 2) node{\label};
}
\end{tikzpicture}

À partir d’une liste de valeurs enregistrées avec \newcommand, on construit élé­


gamment une représentation graphique avec une boucle comme précédemment. Mais
une autre méthode est possible avec la commande plot comme en 13.4.

\newcommand{\nom}{données} \draw plot[options] coordinates {\nom}

Dans l’exemple qui suit, on a d’abord une représentation en bâtons avec l’option
ycomb dont on a augmenté les largeurs avec l’option line width. Sur la représentation
en ligne brisée, les points de la liste sont marqués grâce à l’option mark.
\usepackage{tikz}
\begin{tikzpicture}[xscale»O.6,yscale-0.06]
\draw[<->] (0,45)--(0,0)--(7,0);
\foreach \x in {1,2,...,6}
\draw (\x,-4) node{\x};

a \foreach \y in {0,10,... ,40}


\draw (1mm,\y)—(-1mm,\y) node[left]{\y};

\newcommand{\données}
{(1,30)(2,17)(3,34)(4,46)(5,41)(6,10)}
\draw[line width-0.5cm,color-gray]
plot[ycomb] coordinates {\donnees};
\drav plot[mark»*] coordinates {\donnees};
\end{tikzpicture}

Q | Les données peuvent aussi être chargées depuis un fichier texte (cf. [8]).
hapitre 14
Graphes et arbres avec TikZ

TikZ propose une suite de commandes adaptées à la construction de graphes et


d’arbres. Les exemples exposés ici présentent des situations classiques en faisant un
tour d’horizon des possibilités. Le chapitre 11 suit une présentation parallèle à celui-ci
mais avec PSTricks.

\usepackage{tikz}
\begin{t ikzpicture}
\matrix[nodes-{draw,circle}, row sep“0.5cm,
colunm sep«0.5cm] {
\node (a){l}; à\node (c){3>; k ;\\

B
\node (b)<2>; k ; !t\node <d){4} ;\\ };

\tikzstyle{f leche} ■ [draw,thick,,>-latex]


\draw[fléché] (b) (a);
\draw [fléché] (c) (a) ;
\draw [fléché] (b) — (c);
\draw[fléché] (c) to[bend right] (d) ;
\draw[fléché] (d) to[bend right] (c);
\end{tikzpicture}
156 Chapitre 14. Graphes et arbres avec TikZ

14.1 Graphes
Pour tracer des graphes simples, on peut utiliser les techniques vues en 12.4. Il
est possible de définir des styles personnalisés qu’on applique sur les nœuds ou les
segments.

\tikzstyle{nom}=[options]

\usepackage{tikz}
\begin{tikzpicture}
\tikzstyle{ligne}-[draw,thick,-]
\tikzstyle{plots}-[circle, draw,fill-black, inner sep-Opt]
\tikzstyle{petit}-[plots, minimum width-3pt]
\node [petit] (A) at (1,0)0; \node [petit] (B) at (2,1)0;
\node [petit] (C) at (1,2)0; \node [pet it ] (D) at (0,1)0;
\draw (A) — (B) — (C) — (D) — (A) — (C) ;

0
\draw (B) — (D);

z \begin{scope}[xshift-lcm, yshift«-2cm] ; X on translate


\tikzstyle{gros}-[plots , minimum width-6pt]
\node [gros] (E) at (0,0)0;
\node [gros] (F) at (-30:1)0;
\node [gros] (G) at (90:1)0; \node [gros] (H) at (-150:1)0;
\draw[ligne] (E) — (F) — (G) — (H) — (E)— (G);
\draw[ligne] (F) — (H);
\endoscope}
end{tikzpicture}

Dans ce second exemple, le sens de parcours de chaque connexion apparaît. On


aurait pu se contenter de -> pour ajouter la flèche mais elle a plus d’allure grâce à
l’option >=latex.
Remarquez l’usage de \foreach pour simplifier la construction (cf. 12.11).

\usepackage{tikz}
\begin{tikzpicture}
\t ikzstyle-fnoir}» [circle, draw, f ill-black, inner sep-Opt, minimum width»6pt]
\t ikzstyle-fblanc}-[circle, draw, inner sep-Opt, minimum width»6pt]
\tikzstyle{fleche} - [draw,thick,->,>-latex]

X Les deux noeuds blancs


\node [blanc] (A) at (0,0) [label-lef t : $A$] O;

I
\node[blanc] (F) at (3,-1)
[label-below right:$F$] O;

X Les noeuds noirs


\foreach \pos/\name in {(1,1)/B, (2,0)/C,
(1,-1)/D, (3,1)/E}
\node [noir] (\name) at \pos O;

X Les connexions
\foreach \orig/\dest in {A/B, A/D, B/C, C/D, C/E, D/B, E/B, E/F, F/C}
\draw [fléché] (\orig) — (\dest);
\end{tikzpicture}
14.1 Graphes 157

Les liaisons peuvent avoir une courbure (bend en anglais). Pour cela, on n’utilise
plus la syntaxe avec les double tirets — mais to[bend right] (ou to[bend left]).
On contrôle la courbure, en précisant l’angle globalement avec bend angle ou loca­
lement comme ceci : to [bend right=angle].

\usepackage{tikz}
\begin{tikzpicture} [bend angle-20]
\tikzstyle<db}« [circle, draw, inner sep-Opt,
minimum widtha,6pt]
\node[db](A) at(O,O)
O; \node[db](B) at(l.l) {};
\node [db] (C) at(0,1.5)0; \node[db](D) at(-l,l)O;
\draw (A) to [bend right] (B) to [bend right] (A);
\draw (A) to [bend right] (D) to[bend right] (A);
\draw (A) — (C);
\draw (B) to[bend right«60] (C);
\draw (D) to[bend left-60] (C);
\end{tikzpicture}

Lorsque le graphe présente des alignements verticaux et horizontaux réguliers, il


est pratique de placer les nœuds dans une matrice avec la commande \matrix.

\usepackage{tikz}
\begin{tikzpicture}
\matrix[nodes-{draw,circle}. row sep«0.5cm,
column sep»0.5cm] {

a
\node (a){A}; & \node (b){B}; t \node (c){C}; \\
\node (d){D}; k ; A \node (e){E}; \\
\node (f){F}; & \node (g){G};
,w. . k \node (h){H}; \\ };
x |\tikzstyle{connect} - [draw-white, line width«3pt,
double-black,-]
\draw[connect] (d) — (b); \draw [connect] (g) — (e) ;
\draw[connect] (a) — (h); \draw[connect] (c) — (f);
\draw[connect] (b) — (e); \draw[connect] (d) — (g);
\end{tikzpicture}

Dernière méthode : on peut placer les nœuds relativement les uns par rapport aux
autres. Dans l’exemple suivant les nœuds nommés im et quo sont positionnés à droite
et en dessous du nœud initial nommé g.

\usepackage{tikz}
\begin{tikzpicture}[node distance-2.5cm]
\node(g){$G$}; f >m(/) |
\node(im) [right of«g] {$\mathrm{im}(f)$}; G
\node(quo) (below of»g] {$G/\ker(f)$};
lïï]
o, \tikzstyle{f leche}- [draw , ->, >»latex] P
!
I
|o I \tikzstyle{tirets}-[fléché, dashed] /h i

\draw[fléché] (g) — node[above] {$f$} (im); I


\draw [fléché] (g) — node[left] {$\varphi$} (quo);
\draw[tirets] (quo)— node[below] {$h$} (im);
\end{tikzpicture}
158 Chapitre 14. Graphes et arbres avec TikZ

Voici une nouvelle illustration de ce principe de positionnement relatif des nœuds.

\usepackage{tikz}
\begin{tikzpicture}[node distance»3cm, bend angle-15]
\tikzstyle{ci}-[circle , drav, inner sep-Opt, minimum width-15pt]
\node [ci] (a){A>;
\node [ci] (b)[right of-a] {B}; ------------------------------------

\drav [fléché] (a) to[bend left]


node[above] {$l-x$} (b);
\draw[fléché] (b) to[bend left]
node[belov] {$l-y$} (a);
\drav[fléché] (a) to[loop left] node[left] {$x$} (a);
\draw[fléché] (b) to[loop right] node [right] {$y$} (b);
\end{tikzpicture}

L’exemple suivant montre une autre approche avec tkz-graph dont il est impos­
sible de couvrir les possibilités ici (cf [CTAN]).

\usepackage{tikz}
\tikzset{
LabelStyle/.style - { rectangle, rounded corners, drav, fill-white},
VertexStyle/.append style " { inner sep»5pt},
EdgeStyle/.append style - {->, bend left} }
\begin{tikzpicture}
\SetGraphUnit{5}

U \Vertex{B}
\WE(B){A}
\Edge[label - 1](A)(B)
\Edge[label - 4](B)(A)
\Loop[dist ■ 4cm, dir ■ NO, label ■ 5]([Link])
\Loop[dist - 4cm, dir - SO, label - 6]([Link])
\end{tikzpicture}

Finissons en beauté. Une première boucle définit les sommets nommés 1, 2,


7 (en coordonnées polaires) grâce au compteur noeud. Ensuite une double boucle
contruit les connexions pour chaque sommet avec chaque autre sommet.

\usepackage{tikz}
\begin{tikzpicture}[bend angle-25, scale-2]
\tikzstyle{vide}-[inner sep-Opt, minimum width-Opt]

CO
\foreach \a [count ■ \noeud] in {0,51.429 360}
O \node[vide] (\noeud) at (\a:l) {};
8

£ \foreach \orig in {1,...,7}


\foreach \dest in {!,...,7}
\drav (\orig) to [bend right] (\dest);

\end{tikzpicture}
14.2 Arbres 159

14.2 Arbres
Les notions de nœud et de connexion étudiées précédemment s’appliquent aux
arbres puisqu’un nœud admet autant d’enfants qu’on souhaite.
Dans l’exemple suivant, les successeurs de la racine A sont, d’une part deux nœuds
B et C et d’autre part un nouvel arbre de racine D. Par ailleurs on a :
— réglé l’orientation vers la droite (right) avec l’option grow'. Autres choix pos­
sibles : left, down ou up. Notez qu’avec l’option grow (sans apostrophe), les
enfants B,C et D auraient été positionnés du bas vers le haut et non comme ici
du haut vers le bas ;
— précisé la distance séparant les enfants avec l’option sibling distance;
— réglé la longueur des connexions avec l’option level distance ;
— demandé une flèche à l’extrémité des connexions avec l’option ->.

\usepackage{t ikz}
\begin{t ikzpicture} [grow ' -right,level distance«2cm .sibling distance"0.8cm, ->]

\node {A}
child { node {B}}

B
child { node {C}}
child { node {D}
child •( node {E}}
child { node {F}}
};
\end{tikzpicture}

Toutes sortes de décorations sont possibles pour les nœuds à condition d ajouter
la librairie shapes comme le montre l’exemple suivant. La librairie shadows permet
l’ajout simplifié d’ombres.

\usepackage{tikz}
\usetikzlibrary{shapes,shadows}
\begin{tikzpicture}[grow-down ,
level distance-3cm]
\node[draw, circle , fill-black] {}

B
child •( mode [draw, diamond] {A}}
child { node[draw, circle] {B}}
child { node [draw, regular polygon,
regular polygon sides-5]{C}}
child •{ node [draw, rectangle] {D}}
child { node[draw, rectangle, white,
fill-black!75, rounded corners,
drop shadow] {E}};
\end{tikzpicture}
160 Chapitre 14. Graphes et arbres avec TikZ

Observez enfin les pondérations spécifiées le long des chemins (cf. 12.7).

\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{tikzpicture}[grow-down,->]
\tikzstyle{level l}=[sibling distance-3cm]
\tikzstyle{level 2}»[sibling distance■1.5cm]

\node[draw, ellipse] {Bernoulli}


child { node {Al}
child { node {A2}
edge from parent node[left-4pt] {$l-q$} Bernoulli
}
child { node {B2}
1 -P

ï
edge from parent node[right-4pt] {$q$}
}
edge from parent node[left-4pt] {$l-p$} Al
}
child { node {Bl}
child { node {A3}
edge from parent
’-’/V 1 —r

A2 B2 A3 B3
node[left-4pt] {$l-r$}
}
child { node {B3}
edge from parent
node[right-4pt] {$r$}
}
edge from parent node[right-4pt] {Sp$}
>;
\end{tikzpicture}

Un dernier exemple qui montre l’étendue des possibilités de TikZ en matière de


construction d’arbres.

\usepackage{tikz}
\usetikzlibrary{trees}
\begin{tikzpicture}[level distance»3cm, sibling distance«0.7cm]
\tikzstyle{every node}-[draw-black]
\node {George VI} [edge from parent fork right, grow ' «=right]
child { node {Margaret}}
child { node {Elisabeth II} Charles
child { node {Charles}} ------------- I— Margaret

I };
child { node {Anne}}
child { node {Andrew}}
child { node {Edward}}

\end{tikzpicture}
George VI —I L
L- Elisabeth II -
Anne
Andrew
Edward
14.3 Création assistée de graphes et d’arbres 161

14.3 Création assistée de graphes et d’arbres


Pour simplifier la création d’arbres en TikZ, le site [Link]
fr/TikZ/Arbres .html propose une interface très intuitive.
Par exemple :
feoooeoeeeeoooeeeoeeeooooeeeoeeeoooeeeeoeeooeeeeee

J
• Utiliser + pour créer un nouveau Nœud Fils
À partir de la racine : j | Racine • Utiliser X pour supprimer un Noeud et ses descendants.
]+& • Utiliser f et 4 pour changer l'ordre des Nœuds en tant que flls.

I X
-»lï 1 ___ «_L
J -»l u- l-»ls +
]
X
]->E 1+
I ■*------------------
Choisissez le mode d'étiquetage de l'erbra : Q Arcs étiquetés Feuilles commentée

Choslssaz le mode d'affichage pour l'arbre ainsi défini :

M là t? Après composition L*TgX :

Clic sur : pour obtenir le code engendré. Copiez-le et collez-le dans votre source L*TeX.
hapitre

Chimie

Quelques packages permettent de faciliter le travail des chimistes souhaitant ré­


diger des documents enrichis de figures. Dans ce chapitre, on présente des packages
pour écrire les réactions chimiques et les équations bilan mais aussi pour schématiser
les molécules. La dernière partie présente des techniques pour dessiner la verrerie et
le matériel de laboratoire.

\usepackage{chemfig} h3c H
\chemf ig{
C(-[:-120]H)
(-[:120]H_3C) c=c
“C ( - [ :-60]CH_2-CH_3)
(-C:60]H)
} H ch2—ch3
164 Chapitre 15. Chimie

15.1 Écrire une réaction chimique


Pour les noms des molécules et les réactions chimiques, on peut utiliser le package
mhchem dont la commande \ce permet d’écrire naturellement les éléments.

I
£ \usepackage{mhchem}
\ce{CH4 + 202 -> C02 + 2H20} CH4 + 2 02

La flèche peut être annotée et les molécules peuvent être nommées.


► CO2 + 2 H2O

B
\usepackage{mhchem}
\ce{CH4 ->[+202] + 2 Oq
C02 + $\underset{\text{Eau}}{\ce{2H20}}$
ch4 CO2 + 2H2O
Eau
}

Pour les ions et leur état, pas de difficulté particulière.

i \usepackage{mhchem}
\ce{Fe_{(s)} + Cu"2 -> Fe~2+{}_{(aq)} + Cu}

Enfin, on peut schématiser les liaisons.


Fe(s) 4- Cu2 Fe2+ (aq) "b Cu

S \usepackage{mhchem}
\ce{C-C} ou \ce{C-C} ou \ce{C#C} C-C ou C=C ou C = C

15.2 Dessiner des molécules


Il est possible de dessiner les molécules à la main en utilisant les techniques des
chapitres 9 ou 12 mais le package chemfig facilite énormément le travail avec sa
documentation en français (cf. [CTAN]).
Commençons par un exemple dans lequel on voit que la première liaison simple
entre H et 0 s’écrit simplement H-0. La seconde liaison, de 0 à H, est notée - [ :75] ce
qui signifie qu’on demande une liaison simple avec un angle de 75°.

U)
\usepackage{chemfig} H
\chemf ig{
O*
H-0-[:75]H
/
S } H----- O

En plus de «-», «=» et «~» pour une liaison simple, double ou triple, on dispose
de > pour A^^-B et >: pour A II*”-B (et le sens contraire avec <).
Si on veut plusieurs liaisons sur un même atome, on écrit une série de parenthèses
contenant le type de liaison et l’angle.
15.2 Dessiner des molécules 165

\usepackage{chemf ig} H
\chemf ig{
C(-[:9O]H)

V
(-[:-135]H)
(<[:-80]H)
O: [:-30]H) H H
> H

Encore deux exemples pour bien comprendre le mécanisme :

\usepackage{chemfig}
O

B \chemfig{

1
H_3C-C(-[:-30]OH)
(»[:30]0)
H3C----- C
OH

\usepackage{chemf ig}
H H
\chemf ig{
C(-C:-121.33H)
<-[:121.3]H) C=C
-C(-[:-58.70]H)
(-[:58.70]H)
1 H H

Toutes les constructions sont possibles avec une syntaxe remarquablement simple.
1

I \usepackage{chemfig}
\scriptsize
qI\chemfig{*6(-®----)}

B
\usepackage{chemf ig}
\setchemfig{atom sep-2mm}
\scriptsize
\chemf ig{*6(--(Br)—-(Br)-)}
i

Les structures de Lewis sont aussi possibles avec la commande suivante dans la­
quelle ni est un nombre entre 1 et 7 suivi du caractère vide, «. » ou « : ». Le nombre
représente la position (en multiple de 45°) du caractère autour de l’atome.
\lewis{nl n2 ni,atome}

\usepackage{chemf ig}
\chemfig{ \lewis{0.,X}}
1^1\chemfig{ \lewis{l.,X}}
w \chemfig{ \lewis{2,X}} X- x’ X ’X :X IXI
I J | \chemfig{ \lewis{3:,X}}
\chemfig{ \lewis{4:,X}}
\chemfig{ \lewis{024,X}}
166 Chapitre 15. Chimie

Mettons cela en application sur deux molécules :

B \usepackage{chemfig}
\chemfig{ H-\lewis{2:6:,0}-H} H----- Q------ H

Xusepackage{chemfig} H

B
Xchemf ig{
C(-[: 120]H)
(-[:-120]H) c=o)
(-\lewis{17,0})
} H

15.3 Représenter la verrerie de laboratoire


L’étonnant package pst-labo propose une collection de verrerie, bec Bunsen et
autres pHmètre. Les commandes sont détaillées dans la documentation en français
(cf. [CTAN]).
Comme son nom l’indique pst-labo dépend de pstricks. La compilation avec
O PdfM^jX peut donc ne pas fonctionner (cf. 2.6).
La commande XpstTubeEssais reçoit en paramètre le type de verrerie et les élé­
ments à lui ajouter.

\usepackage{pst-labo}
Xpsset{unit-0.4cm}

B
XpstTubeEssais rv
XpstTubeEssais[glassType-balIon]
XpstTubeEssais[glassType-erlen]
U
\pstTubeEssais[glassType-becher]
XpstTubeEssais[glassType-flacon]
XpstTubeEssais[glassType-fioleJauge]

a Xusepackage{pst-labo}
Xpsset{unit-0.4cm}
XpstTubeEssais[bouchon-true]
XpstTubeEssais[glassType-erlen,pince-true]

La verrerie peut être penchée en précisant un angle, le niveau de liquide (50 par
défaut) est réglable et on peut déplacer les objets avec la commande \rput (cf. 9.6).

\usepackage{pst-labo}

B
Xpsset{unit-0.4cm}
Xrput(0,1.5){
XpstTubeEssais [tubePenche--50,niveauLiquide1-90] }
Xrput(2,0){
XpstTubeEssais [glassType-becher,niveauLiquide1-0] }
15.3 Représenter la verrerie de laboratoire 167

Concernant la substance liquide contenue dans la verrerie, jusqu’à trois phases


peuvent être représentées.

\usepackage{pst-labo}

S
Xpsset{unit-0.4cm}
XpstTubeEssais[niveauLiquide1-100,
niveauLiquide2-50]
XpstTubeEssais[niveauLiquide1-100,
niveauLiquide2-66,niveauLiquide3-33]

La nature de la substance peut être modifiée pour y faire apparaître des bulles ou
des filaments. Le nombre étant réglable, comme on le voit.

\usepackage{pst-labo}
£ \psset{unit-0.4cm,glassType-becher}
e XpstTubeEssais [substance -XpstFilaments{gray}]
| x | XpstTubeEssais[substance -XpstBilles]
XpstTubeEssais [substance -{XpstBilles [70] }]

La substance contenue dans la verrerie peut contenir des solides. Là encore, la


quantité est réglable.

\usepackage{pst-labo}

3
Xpsset{unit-0.4cm, glassType-becher}
\pstTubeEssais [solide-XpstTournureCuivre]
XpstTubeEssais [solide=\pstClouFer]
XpstTubeEssais [solide-{\pstClouFer [20] }]
XpstTubeEssais [solide »\pstGrenailleZinc]

L’ensemble des possibilités du package pst-labo ne peut être présenté ici. Référez-
vous à sa documentation.
I
\usepackage{pst-labo}
gj Xpsset{unit-0.4cm}
fo XpstChauffageBallon [doubletube ,
|£ I recuperationGaz, ;
substance-XpstClouFer]

\usepackage{pst-labo}

B
g Xpsset{unit-0.3cm}
c3 XpstChauffageTube[becBunsen,
'I barbotage,
glassType-flacon]
168 Chapitre 15. Chimie

15.4 Ressources sur le Web


La section du CTAN consacrée aux packages en lien avec la chimie est une lecture
recommandée, [Link]
Chapitre 16
Physique

De nombreux packages permettent aux physiciens d’écrire des documents en


leur facilitant le travail de mise en forme. On présente ici deux packages différents, au
choix, pour dessiner des circuits électriques. Les schémas optiques sont aussi abordés
dans ce chapitre. Enfin on propose une sélection de packages avec des aperçus de leurs
possibilités qui permettront aux spécialistes de trouver ce dont ils ont besoin.
_ La compilation avec PdfDTÈX des documents contenant des figures PSTricks
exigeant; un réglage fin de l’environnement de travail, on pourra préférer utiliser
~ DTeX ou XeM^X (cf. 2.6 et 2.7).

\usepackage{chemfig}
\begin{tikzpicture}
\coordinate(0) at (0,0);
\coordinate(A) at (45:3);
\coordinate(B) at ({3*cos(45)},0);

i \draw (O)--(A)--(B);
\draw[fill“white] (A) circle(0.2);
\draw (A) node{$\bullet$};
\draw[f ill”lightgray](45:1) --++(135:0.4)
--++(-135:0.4) —++(-45:0.4) —cycle;
\draw[fill»gray](A) ++(0.1,-l) --++(0.2,0)
—++(0,-0.2) —++(-0.2,0) —cycle;
\draw[thick] (45 :1)++(135: 0.2)--++(45:2) arc (135:0:0.2) --++(0,-1);
\end{tikzpicture}
170 Chapitre 16. Physique

16.1 Circuits électriques avec pst-circ


Le principe de construction de circuits avec pst-circ est basé sur la notion de
nœud (cf. 9.5) qu’on définit avec une paire de coordonnées et un nom. Le dipôle est
alors défini par une commande qui réclame le nom de ses extrémités et une étiquette
à lui aposer. Dans l’exemple suivant, on construit une résistance entre les nœuds M et
N avec un étiquette $R$.
2
\usepackage{pst-cire}
\begin{pspicture}(0,0)(3,2)
R
1
\pnodes(0,1){M}(3,1){N}
M - N
\resistor(M)(N){$R$}
\end{pspicture} 0:
0 1 2 3

Une très grande variété de dipôles, relais, opérateurs logiques, etc. est disponible
et décrite dans la documentation (cf. [CTAN]). Évidemment les composants peuvent
être branchés les uns aux autres : il suffit qu’ils aient un nœud en commun.
\usepackage{pst-circ}
\begin{pspicture}(0,0)(6,2)
\pnodes(0,1){M}(3,1){N}(6,1){P}
\capacitor(M)(N){$C$}
\coil(N)(P){$L$}
\end{pspicture}

Le principe étant posé, on peut construire des circuits complets.


\usepackage{pst-circ}

a
\begin{pspicture}(0,0)(4.5,2.5)
\pnodes(0,0){M}(0,2){N}(4,2){P}(4,0){Q}
\switch(P)(Q){}
\capacitor(M)(Q){$C$}
\vac(M)(N){$E$}
\coil(N)(P){$L$}
\end{pspicture}

Chaque composant peut être chargé d’options entre crochets. Ici, la résistance
est branchée, comme l’interrupteur, sur les nœuds P et Q mais elle est branchée
en parallèle. De plus, son étiquette est positionnée sur le composant avec l’option
labeloffset=0. D’autre part, la tension aux bornes de la bobine figure sur le schéma
électrique grâce à l’option tensionlabel.

\usepackage{pst-cire} UL
\begin{pspicture}(0,0) (4.5,3)
\pnodes(0,0){M}(0,2){N}(4,2){P}(4,0) {Q}
\switch(P)(Q){} My\
\resistor[parallel,labeloffset«0](P)(Q){$R$}
\capacitor(M)(Q){$C$}
\vac(M)(N){$E$}
\coil[tensionlabel-{$u_L$}](N)(P){$L$}
c A~J|
\end{pspicture}
16.1 Circuits électriques avec pst-circ 171

PSTricks accepte de définir les coordonnées de la manière suivante : (xl,ylI x2,y2).


Le séparateur « I » signifie ici qu’on prend l’abscisse du premier point et l’ordonnée du
second. On a donc (xl,ylIx2,y2)=(xl,y2). Cette écriture prend son sens lorsque
des points sont définis : le point défini par (A I B) a la même abscisse que A et la même
ordonnée que B. Voici un exemple d’application :

\usepackage{pst-cire}
\begin{pspicture}(0,0)(4.5,3) XXX
£+-
g
\psset{labeloffset-0.5}
\pnodes(0,0){A}(4,1){B}(4,2){C}
\wire[arrows-*-o](A)(B I A)
r>i
-O
\diode(AIB)(B){$D_1$}
\LED(A IC)(C){}
\end{pspicture}

Le cas des tripôles est particulier. Prenons le transistor : on peut donner explicite­
ment les coordonnées des trois points, PSTricks va alors tenter de faire lui-même les
connexions entre ces points et les sorties du tripôle. Mais on peut aussi ne préciser que
les coordonnées de la base pour définir la position du transistor et demander à créer
automatiquement deux nouveux nœuds correspondant à l’émetteur et au collecteur.

\usepackage{pst-circ}
\begin{pspicture}(0,0)(4.5,3)

0
J]\pnodes(0,1){A}(2,0){B}(4,2){C}
\transistor(A)(B)(C)
£> | \transistor (B){emet}{col}
\wire[arrows--*](col)(col IC)
\end{pspicture}

Un exemple plus complexe montrant le schéma d’un variateur de tension :

\usepackage{pst-cire}
\begin{pspicture}(0,0)(4.5,3)
\psset{labelangle-: U]
\pnodes(0,0){A}(2,4){D}(4,2){F}(2,-1){W}
\battery(A)(A ID){12V}

10 K
\wire(A)(D|A)

s
\potentiometer(DI A)(D)(F){$10k\0mega$} > J.r
OO-- —
\transistor(F){emet}{col}
\wire(col)(col ID)
\vire(col ID)(A ID) lOO/iF
\wire(emet)(emetI A)
\capacitor(DI A)(emetI A){$100\mu F$}
\pnode(2,-1){W}
\vire[arrows»-o](DI A)(W)
\wire[arrows--o](emetI A)(emetIW)
\tension(emet|W)(W){0 à 12V}
0 à 12V
\end{pspicture}
172 Chapitre 16. Physique

16.2 Circuits électriques avec circuitikz


Le package circuitikz est évidemment basé sur TikZ. Le principe reprend la
syntaxe à base de to vue page 157. Dans l’exemple suivant, on relie les points (0,1)
à (3,1). Le dipôle est défini entre les crochets [type=étiquette] : ici le type R
signifie qu’on demande une résistance avec une étiquette R\ au dessus.

2
\usepackage{circuitikz} Ri

8 \begin{circuitikz}
\draw (0,1) to[R-$R_l$]
\end{circuitikz}
(3,1);
1 wv
1 2 3

Une très grande variété de dipôles, relais, opérateurs logiques, etc. est disponible
et décrite dans la documentation (cf. [CTAN]). Évidemment les composants peuvent
être branchés les uns aux autres : il suffit qu’ils aient un point en commun.

\usepackage{circuitikz}

I
\begin{circuitikz} C
\draw (0,1) to[C=$C$] (3,1);
L
\draw (3,1) to[L-$L$] (6,1);
\end{circuitikz}

Le principe étant posé, on peut construire des circuits complets.

\usepackage{circuitikz}
\begin{circuitikz}

I
\draw (0,2) to[L-$L$] (4,2);
\draw (4,2) to[svitch] (4,0);
\draw (0,0) to[C-$C$] (4,0); C
\draw (0,0) to[sV-$E$] (0,2);
\end{circuitikz}

Dans ce dernier circuit, on ajoute une résistance en construisant un nouveau che­


min avec deux fils supplémentaires : short. La tension aux bornes de la bobine est
affichée grâce à l’option v=ul et enfin, on a réduit la taille des derniers dipôles avec
l’option bipoles/length.

\usepackage{circuitikz}
\begin{circuitikz}
\draw (0,2) to[L-$L$, v»$u_LS) (4,2); L
\draw (4,2) to[svitch] (4,0);
\draw (0,0) to[C-$C$] (4,0); ul
\ctikzset{bipoles/length’0.9 cm}
\drau (0,0) to[sV»$E$] (0,2); C R
\draw (4,2) to[short] (5,2)
to[R»$R$] (5,0)
to[short] (4,0);
\end{circuitikz}
Pourquoi utiliser TikZ et plus spécifiquement Circuitikz pour réaliser vos schémas d'électricité ou
d'électronique ? Avec CircuiTikZ, votre figure sera codée est vous obtiendrez toujours le même résultat
en tapant la même ligne de code. Il s'agit de dessin vectoriel, donc pas d'effets disgracieux si vous
grossissez l'échelle.

Circuitikz permet d'obtenir un aspect uniformisé de votre texte et de vos schémas ; c'est intéressant, la
police utilisée sera la même partout, dans le texte de votre document LaTeX comme dans les schémas. Le
document apparaîtra plus homogène. On peut sans problème changer l'échelle du schéma pour mieux
l'inclure dans une page. On peut également inclure de belles formules mathématiques dans les schémas,
chose difficilement possible avec d'autres solutions.

Et puis surtout, à part ce remarquable outil, qu'utiliser pour réaliser des schémas à peu près aux normes ?
Les logiciels de dessins dans ce domaine ne sont pas légion. Utiliser des logiciels de simulation et copier-
coller le schéma obtenu n'est pas très satisfaisant.

Nicolas Le Boulaire a écrit deux tutoriaux pour circuitikz en français. Ces tutoriaux se trouvent ici :

[Link]

[Link]

Il existe aussi un tutoriel écrit par Claude Chevassu, tutoriel disponible ici

[Link]

et là pour récupérer le fichier .tex :

[Link]

Des exemples en anglais peuvent être examinés et téléchargés ici :

[Link]
16.3 Optique 173

16.3 Optique
Le package pst-optic (cf. [OTAN]) permet de dessiner des schémas représentant
des faisceaux lumineux traversant des lentilles. La commande générale est Mens.

\usepackage{pst-optic} B

B \psset{unit-0.5}
\begin{pspicture*}(4,0)(15,6)
Mens
\end{pspicture*}
A F O
t
A'

B7^^

Les options de la commande Mens permettent de modifier la hauteur AB, la focale


ou l’épaisseur de la lentille.

\ use package -{pst - optic}

B \psset{unit-0.5}
\begin{pspicture*}(4,0)(15,6)
\lens[AB-2,focus-1.5,lensWidth-1]
\end{pspicture*}

On peut évidemment dessiner des lentilles convergentes ou divergentes de tous


types.

\usepackage{pst-optic}
\psset{unit-0.3 , drawing=faise,lensWidth-2}
\begin{pspicture*} (-5,-3)(4,3)
i
\rput (0,0) {Mens [X0--4] }
\rput (0,0) {Mens [X0--2 , lensType-PCVG]}
\rput (0,0){\lens [X0-1, lensType-DVG]}
\rput (0,0) {Mens [XO-3 , lensType-PDVG]}
\end{pspicture*}

Pour une lentille divergente, on règle ici le focus à -2.

\usepackage{pst-optic}

B \psset{unit-0.5}
S | \bogin{pspicture*}(4 ,0)(15,6)
Mens [lensType=DVG , focus--2]
\end{pspicture*}
174 Chapitre 16. Physique

16.4 Ressources sur le Web


De nombreux sites proposent des ressources sour forme de code prêt à copier pour
construire des figures et schémas en sciences physiques.
— Le site [Link] propose une section contenant de nombreux exemples.
http : //physagreg . f r/schemas-f igures-physique-svg-tikz. php

Bobine fine seule


Boussole et champs magnétiques
2L

O
2R 0 x

i
M
La bnbinr
parcourue par
UH r» Hlmni t

Code I
| Code j1

— Le site [Link] propose un document riche de très nombreux exemples,


[Link] [Link]/[Link]

e e

© ©

‘Sr® cal 20 V
—<V>—
sol. Nfl2SO4
c c

solution HCf c c
Figure 54 - électrolyse Figure 55 - électrolyse

demi-pile 1 demi-pile 2
V)----------1

métal 1 métal 2
ri pont salin |4
solution 1 solution 2
Figure 56-pile

— Le site texample .net met à disposition des dizaines de figures en TikZ avec le
code associé, [Link]
16.4 Ressources sur le Web 175

— Enfin, la section du CTAN consacrée aux packages en lien avec les sciences
physiques est une lecture recommandée, [Link]
Voici une sélection :
pst-solarsystem pour représenter le système solaire ;

tikz-optics pour dessiner des rayons lumineux, miroirs, ou lentilles ;

pst-optexp pour représenter des schémas expérimentaux en optique ;

pst-magneticfield pour dessiner des champs magnétiques ;

[[Link]-i]
176 Chapitre 16. Physique

pgf-spectra pour représenter le spectre des éléments ;


\pgfspectra[height=40pt]

\pgfspectra[element=H]

\pgfspectra[element={H,He}]

pst-coil pour dessiner des ressorts ;

-A/wv
pst-diffraction pour représenter des figures de diffraction par des trous de
différentes formes ;

pst-osci pour produire des affichages d’osciloscopes.


CM-Fd A . B:
I V/<frv ON

RS
J4-.
J__
OfwtA On«i8 O'HmC
hapitre

Numérique et science informatique

Que ce soit au collège, au lycée ou dans l’enseignement supérieur, la place oc­


cupée par les sciences autour du numérique va grandissante. De nombreux packages
permettent de proposer des présentations de grande qualité autour des questions re­
latives aux calculatrices, aux logiciels ou aux langages de programmation.

\usepackage{listings}
\lstset{language«Python,frame-tb , 1 def est_premier (n) :
numbers=left,
basicstyle«\sffamily}
2 ’ ’ ’n est—il premier ?'''
3 for i in range(2,n//2) :
\begin{lstlisting} 4 if n%i==0:
def est_premier(n): 5 return False
11'n est-il premier ?'''
6 return True
for i in range(2,n//2):
7

i
if n%i=BO:
return False 8 def Iiste_premiers (n) :
return True '''Liste des premiers <n ' ' '
9
def liste_premiers(n): 10 L = [2]
‘‘'Liste des premiers <n''' 11 # de 3 à n-1 par incr. de 2
L-[2] 12 for i in range(3,n,2) :
* de 3 à n-1 par incr. de 2 13 i f est_prem ier ( i ) :
for i in range(3,n,2):
if [Link](i): 14 L = L+[i]
L - L+Cil 15 return L
return L
\end{lstlisting}
178 Chapitre 17. Numérique et science informatique

17.1 Calculatrice
Avant de parler de présentation de code ou d’algorithmes, évoquons le cas de la
calculatrice et de l’écriture d’une séquence de touches. Un moyen simple consiste à
créer une petite macro-commande.

\usepackage{fancybox}
\neucommand{\touche}[1]{\Ovalbox{\textsf{#!}}}
Pressez [ 2nd puis [ EXE |
Pressez \touche{2nd} puis \touche{EXE}

Les packages ticollege et tipfr permettent de dessiner les touches et l’écran


des calculatrices d’une certaine marque.

ne*»*.
\usepackage{ticollege, tipfr}

\scalebox{0.3}{
r:
F. G O -æ,
» <= o & ;
* «■' O Œ» » :

\TiCCalc \Calculatrice G> G» O CO «ôoiô


}

! a • JOCL-Q « ;

\usepackage{ticollege}
\TiC[principal“cos]
\TiC [ style-number,principal“5,
colour key-uhite, colour text-black]
\TiC [style«=arrows]

III Pour éteindre :


\TiC [principal“2nde,
colour text-black, colour key«=TIJaune]
Pour éteindre :
2ndc
ofT

\TiC[principal-on,
second-off, color second-black]

La lecture des documentations (cf. [CTAN]) donne les explications complètes mais
le principe est simple : la commande \TiC prend sa forme et son contenu en fonction
des valeurs des options.
L’affichage de l’écran est aussi possible. Les lignes sont constituées de couples
expression/résultat séparés par des virgules.

\usepackage{ticollege} 3+2
£•"1 \TiCScreen [height-2 , width-4] 5
3+2/5,
/, 1:3
l:3/{0,333333333}}
0,333333333
17.2 Tableur 179

17.2 Tableur
Le package pas-tableur dont la documentation est en français (cf. [OTAN]) pro­
pose des commandes pour imiter l’apparence des tableurs. La commande principale
permet de construire un tableur à nbl lignes et dont les colonnes sont nommées ex­
plicitement (A,B,C,D) ou par plage (A-D).

\tableur[nbl]{nom des colonnes}

a
\usepackage{pas-tableur}
\begin{tikzpicture} A B C !
I
\tabcolwidth{2.3cm} !
\tablineheight{6mm} 1
\tableur[2]{A-C}
\end{tikzpicture}
2

Dans l’exemple précédent, on a réglé globalement la hauteur des lignes et la largeur


des colonnes.
La commande étoilée \tableur* permet de régler la taille des colonnes individuel­
lement. On peut sélectionner une cellule particulière avec \selecCell. Evidemment,
on peut écrire du texte dans une cellule (n_col, n_ligne) et choisir la position en
réglant le paramètre pos à 1 left, c center ou r vight.

\celtxt[pos]{n col}{n ligne}{texte}

\usepackage{pas-tableur}
\begin{tikzpicture} A
____

g
\tableur* [3]{A/13mm,B/2cm}
\celtxt[c]{A}{l}{10} 1 10 =A1*2
\celtxt{B}{!}{-A 1*2} 2 15
\celtxt[c]{A}{2}{15}
\selecCell{B}{l} 3
\end{tikzpicture}

La sélection d’une plage de cellules est visible avec la commande \multiSelec.

A L8 .
1

a
\usepackage{pas-tableur}
g|\begin{tikzpicture}
\tableur♦ [5]{A/1cm,B/1cm,C/lcm}
\multiSelec{B-2}{C-4} r 3 g
\end{tikzpicture} t 4 j

5
180 Chapitre 17. Numérique et science informatique

17.3 Scratch
Pour l’affichage de programmes Scratch, les packages scratch et scratch3 donnent
d’excellents résultats et leurs documentations sont en français (cf. [CTAN]).

\usepackage{scratch3} p> ZI
\begin{scratch}
\blockinit{Quand \greenflag est cliqué} stylo en position d’écriture
\blockpen{stylo en position d'écriture}

B
% \blockrepeat{répéter \ovalnum{10} fois} {
\blockmove{avancer de \ovalnum{10}} i • -■ (io> ' i
• i
\blockmove {
tourner \turnleft{} de \ovalnum{36} degrés i
}
}
\end{scratch} I ; (36)^^
. -J..------ :

Avec l’option num blocks, on peut numéroter les blocs.

\usepackage{scratch3} 1
\begin{scratch}[num blocks]

I \blocksound{ajouter \ovalnum{4} au volume}


\blockcontrol{attendre \ovalnum{l} seconde}
\blockpen{stylo en position d'écriture}
\end{scratch}
2

3
! -

i
. ■ '.'.'i <:■. (1 ,)

stylo en position d’écriture

L’option print colorie les blocs en gris pour un meilleur résulat à la photocopie.

\usepackage{scratch3}
\begin{scratch}[print,fill blocks] Quand est cliqué
\blockinit{Quand \greenflag est cliqué}
\blockpen{effacer tout}

B \blockpen{relever le stylo}
\blockmove{

}
ajouter \ovalnum{5}
à \ovalvariable{abscisse}
| effacer tout

| relever le stylo

\end{scratch} ajouter (J) à (abscisse)

L’intégration de blocs dans un texte permet d’écrire facilement des consignes.

\usepackage{scratch3}

B
® Un \begin{scratch}
\blockmove{bloc de mouvement} Un TSW-W
h
seul.
\end{scratch}
seul.
17.4 Python et autres langages 181

17.4 Python et autres langages


17.4.1 Présenter du code avec listings
Parmi les nombreuses 1 façons de présenter un code source dans un document
lATgX, nous nous intéressons ici au package listings.
Grâce à listings, on dispose de l’environnement Istlisting dans lequel on sai­
sira le code. Afin que les mots-clés soient mis en valeur, on utilisera l’option language
de la commande \lstset pour spécifier le langage parmi C, C++, Caml, Java, Ma-
thematica, Matlab, Python, Ruby, Scilab, TeX et bien d’autres (cf. [CTAN]).

\usepackage{listings}
\lstset{language=Python}
def fact(n) :
\begin{lstlisting}
# Factorielle en Python

B
def fact(n):
# Factorielle en Python x=l
x= l for i in range(2 ,n+l) :
for i in range(2,n + 1 ) :
x-x*i
x=x* i
return x return x
\end{lstlisting}

La présentation peut être complètement personnalisée comme le montre l’exemple


suivant où on choisit une police sans sérif (\sf f amily). Les mots-clés du langage sont
en gras (\textbf) et les commentaires sont en bleu. L’option frame=tb ajoute des
lignes au dessus et sous le code (top et bottom). Enfin, la numérotation des lignes est
demandée à gauche du code.

\newcommand\pythonstyle{\lstset{
language=Python,
basicstyle=\sffamily,
keywordstyle=\textbf,
commentstyle=\color{blue},
showstringspaces=faise,
1 def fact(n):
frame=tb, numbers=left }}
2 # Fonction factorielle en Python

B
7. Python environment
\Istne«environment{python}[1] { 3 x=l
\pythonstyle \lstset{#l} }{} 4 for i in range(2 ,n + l):
\begin{python} 5 x=x* i
def fact(n): 6 return x
# Fonction factorielle en Python
x»l
for i in range(2,n+1):
x=x*i
return x
\end{python}

Remarquez qu’on a même créé un environnement dédié, ce qui permet de chan­


O ger facilement de présentation en fonction des besoins ou du langage.

1. Voir par exemple [Link]


182 Chapitre 17. Numérique et science informatique

Lorsqu’on a besoin d’insérer des éléments de code dans un texte, le package


listings propose la commande \lstinline. L’usage est un peu particulier puis­
qu’elle reprend (en l’améliorant) l’usage de la commande \verb (cf. 17.5) : on entoure
le code à mettre en exergue de deux caractères non présents dans le code. Par exemple
deux symboles dollar : \lstinline$range$ ou deux points d’exclamation comme dans
l’exemple suivant.

\usepackage{listings} -------------------------------------------------------------
\lstset{language-Python,basicstyle=\sffamily } La ligne def fact(n) : définit la
La ligne \lstinline!def fact(n):! fonction factorielle.
définit la fonction factorielle.

Toutes les personnalisations sont possibles, on peut même faire en sorte que l’af­
fichage ressemble à celui du site [Link] souvent utilisé en classe. Pour
l’exemple suivant, on pourra reprendre le préambule du document partagé suivant :
[Link]

long préambule...
\begin{lstlisting}[language-replit, [Link]
caption-programme 1■py]
from math import ♦ 1 from math import *
2
def aire(r): def aire(r):

a
3
""" renvoie a-pi*r**2""" 4 renvoie a — p i ♦ r **2
a - pi * r**2 G a = pi * r **2
return a 6 return a
l__
\end{lstlisting}

\begin{lstlisting}[language-console, dans la console


caption-dans la console]
> aire(2)
-> 12.566370614359172
\end{lstlisting}

17.4.2 Présenter du code avec minted

Le package minted est plus récent et donne immédiatement des résulats très satis­
faisants. Il fonctionne parfaitement sur [Link] mais attention, pour une exécu­
tion en local il faudra au préalable installer la bibliothèque de coloration syntaxique
Pygments 2 dans un environnement Python fonctionnel. Consultez la documentation
pour plus de détails (cf. [OTAN]).

2. Sous Windows et Mac, la commande pip install pygments est recommandée. Sous Gnu/Linux
on préférera installer le paquet python-pygments.
17.4 Python et autres langages 183

Puisque minted fait appel à un programme externe, l’option de compilation


-shell-escape est obligatoire (cf. 2.13). Sous Texmaker, il suffit de cliquer sur
l’onglet Commandes du menu Configurer Texmaker puis, par exemple pour
O une compilation avec XelAT^X, on remplacera la ligne
xelatex -synctex=l -interaction=nonstopmode %.tex
par
xelatex -synctex=l -interaction=nonstopmode -shell-escape %.tex

\usepackage{minted}
\begin{minted}{python} from random import *
from random import ♦

B def somme_deux_des():
a - randint(1,6)
b ■ randint(1,6)
return a+b
def somme_deux_des():
a = randint(1,6)
b = randint(1,6)
return a-b
\end{minted}

Pour insérer des éléments de code dans un texte, on dispose de la commande


\mintinline.

B
\usepackage{minted} La fonction randint(a,b) .
La fonction
\mintinline{python}{randint(a,b)} renvoie un entier compris entre ;
renvoie un entier compris entre a et b. a et b.
| !

La commande \usemintedstyle{bw} permet de sélectioner le style noir et blanc3


qui peut améliorer le résultat à la photocopie. On voit aussi qu’il est possible de
préciser des options pour l’environnement minted afin de numéroter les lignes, ajouter
une couleur de fond ou des lignes horizontales pour encadrer le code.

\usepackage{minted}
\usemintedstyle{bw}
\begin{minted} [linenos«true, 1 from random import ♦
bgcolor=lightgray, frame=lines]
2 !

B
{python}
from random import ♦ 3 def somme_deux_des() :
4 a = randint(1,6)
def somme_deux_des(): b = randint(1,6)
5
a ■ randint(1,6)
b - randint(1,6) 6 return a+b
return a+b
\end{minted}

Si le code à insérer dans le document se trouve dans un fichier, on peut éviter de le


copier-coller en utilisant la commande \inputminted{python}{[Link]}. Il est
même possible de limiter l’insertion à un bloc compris entre deux numéros de lignes
par exemple \inputminted[f irstline=10, lastline=30]{python}{[Link]}
3. Il y en a bien d’autres. Voir par exemple [Link] ou encore
https : //www. overleaf . com/leam/latex/Code_Highlighting_with_minted#Reference_guide.
184 Chapitre 17. Numérique et science informatique

17.4.3 Exécuter du code Python avec pythontex

Les packages vus précédemment (listings et minted) permettent d’afficher du


code avec une présentation soignée mais pas de l’exécuter. Avec pythontex (cf. [CTAN]
et [13]), on peut à la fois présenter et exécuter du code Python à l’intérieur d’un do­
cument comme dans un notebook Jupyter.
Avant de voir comment cela fonctionne, voici un exemple :

\usepackage{pythontex} On définit une fonction


On définit une fonction
\begin{pyconsoie} »> import math

I import math
def aire(r):
return [Link]*r**2

aire(4)
»> def aire(r):
... return [Link]*r**2

»> aire (4)


\end{pyconsole} 50.26548245743669

Pour fonctionner, pythontex a besoin d’un environnement Python installé sur la


machine, de la bibliothèque Pygments (cf. introduction de 17.4.2) et de trois com­
mandes exécutées successivement4 :
1. DT^X : une première compilation détecte les portions de code Python et les
rassemble dans un fichier ;
2. Python : les résultats d’exécution sont sauvegardés par le script pythontex. py ;
Sous Windows Le script pythontex. py doit être exécuté en précisant bien le
chemin d’accès. Pour une distribution TexLive 2019 :
python C:\texlive\2019\texmf-dist\scripts\pythontex\[Link] [Link]
Sous Gnu/Linux Le paquet texlive-extra-utils contient le programme python­
tex qu’il suffit de lancer : pythontex [Link]
3. DTgX : une seconde compilation récupère les résultats et compose le document.
Dans Texmaker, on peut créer une commande utilisateur (cf. 2.13) pour lancer les
trois commandes en une fois. Exemple pour deux compilations XeDT^X sous Win­
dows :
xelatex %.tex | python C:\texlive\2019\texmf-dist\scripts\pythontex\[Link] %.tex
| xelatex -synctex=l -interaction=nonstopmode %.tex

Command 1 ! pythontex Item menu | pythontex ,


■ Command 2:
i Command 3: Commande (% : nom fichier sans extension)
! Command 4 : xelatex %.tex | python fc:\texlive\2019\texmf-dist| | {g assistant I
i Command 5 :
(les commandes sont séparées par '|')

XÇancel ; <^OK

4. Au moment où sont écrites ces lignes, [Link] ne supporte pas ce type de compilation.
17.4 Python et autres langages 185

En chargeant une librairie graphique comme matplotlib, il est possible d’effectuer


des tracés. L’exemple suivant montre comment afficher une figure après l’avoir tracée
avec Python.

»> from [Link] import «


\usepackage{pythontex} »> from numpy import *
\usepackage{graphicx} »> X » linspace(-pi, pi, 100)
\newcommand{\fig}[2][]{ »> plot(X, sin(X))
\IfFileExists{#2} [<[Link].Line2D object at 0x7f534eb8a860>]I
{\includegraphics[#1]{#2}} »> savef igCgrapheOl .png")
{#2 n'existe pas} }
1.00
\begin{pyconsole}
nn from [Link] import * 0 75

$ from numpy import * 0.50


en X ■ linspace (-pi, pi, 100)
0J5
L2J plot(X, sin(X))
savef ig("[Link]") 000

\end{pyconsole} -O.J5
i
-0.50
\begin{figure}[h]
-075
\centering
\fig[scale-0.5]{[Link]} -100

\caption{graphe01 .png} 0

\end{f igure}
Figure 1: [Link]

La commande personnalisée \f ig présentée dans le préambule évite une erreur


à la première compilation qui a lieu avant que le script Python ait été
exécuté et donc que la figure existe.

Le package pythontex propose aussi l’environnemnt pycode (ou la commande \py


qui est équivalente) pour pouvoir exécuter du code plus discrètement, c’est à dire en
n’affichant que les sorties.

\usepackage{pythontex}
\begin{pycode}
import math

III
|
def aire(r):
return [Link]*r**2
| \end{pycode}
L’aire d’un disque de rayon 4 est environ
égale à 50.26548245743669. •

L'aire d'un disque de rayon 4


est environ égale à \py{aire(4)}.

Dans ce dernier exemple, le calcul de l’aire aurait pu être écrit en DTgX mais
on aurait dû faire appel à des commandes peu intuitives. Nous reviendrons en
O 20.6 sur les facilités offertes par Python pour programmer dans un document
DTeX.
186 Chapitre 17. Numérique et science informatique

17.5 IATeX
Le package listings peut évidemment mettre en forme du code lAT^X mais il est
parfois utile de pouvoir écrire du code brut : un texte qui ne sera pas traité par le
compilateur. Pour cela on dispose de l’environnement Verbatim

I \begin{verbatim}
La commande \LaTeX.
\end{Verbatim}
La commande \LaTeX.

Pour une commande isolée, on utilise \verb ! texte ! où le caractère « ! » peut être
remplacé par «?» ou «$».

i La commande \verb!\LaTeX!. La commande \LaTeX.

17.6 Algorithme en langage naturel


Le package algorithm2e (cf. [CTAN]) propose un environnement et des com­
mandes adaptées pour la présentation d’algorithmes en langage naturel.

\usepackage [f rench , ruled , linesnumbered , vlined] {algorithm2e}


\begin{algorithm}
\caption{Compte à rebours} Algorithme 1 : Compte à rebours
$N \gets 10$ \;
1 TV — 10;

î
\Tq{N>0}{
$N \gets N-l$ \; 2 tant que N>0 faire
Afficher la valeur de N \; 3 TV — N-l-
}
\end{algorithm} 4 Afficher la valeur de N ;

Dans l’exemple, on a chargé le package algorithm2e avec des options permettant


que le mot «Algorithme» apparaisse en français, que l’algorithme soit entouré de lignes
horizontales, que ses lignes soient numérotées et enfin que les blocs d’instructions
soient marqués par des filets verticaux.
hapitre 18
Présentation de diapositives avec
Beamer

Beamer est une classe dédiée à la conception de présentations à vidéo-projeter.


Les diaporamas ainsi construits bénéficient de toutes les possibilités de MgX aux­
quelles viennent s’ajouter des fonctionnalités spécifiques facilitant la conception de
diapositives.

i
\documentclass [20pt]{beamer}
\usetheme{Warsaw}
\title [De motu corporum]
{De motu corporum in gyrum}
corp<^gJ^“JI
\author{Isaac-Newton}
\institute{University of Cambridge}
\date{1684} Isaac Newton
\begin{document} Umvcrvty al Cambndff

1684
\begin{frame} % Diapo 1 j
1 \t itlepage
\end{frame}

\begin{frame} % Diapo 2
\frametitle{De motu corporum in gyrum}

\begin{block}
{Proposé à Edmond Halley en 1684}
Proposé à Edmond Halley en 1684
En français : Du mouvement des corps
En français : Du mouvement des
\end{block}
corps_______________________
\end{frame}

\end{document} I
188 Chapitre 18. Présentation de diapositives avec Beamer

18.1 Les transparents d’une présentation


Beamer est une classe MgX adaptée à la création de présentations à vidéo-projeter
qu’on appelle aussi diaporamas. Beamer permet de créer des transparents (frames
dans la terminologie beamer) qui vont se succéder ou découvrir au fur et à mesure du
texte ou des images.
La commande \usetheme définit le thème, c’est à dire les couleurs et le format
de la présentation. Voici une liste de thèmes possibles : AnnArbor, Antibes, Ber­
lin, Boadilla, CambridgeUS, Copenhagen, Dresden, Goettingen, Hannover, Ilmenau,
JuanLesPins, Luebeck, Madrid, Malmoe, Montpellier, PaloAlto, Rochester, Singapore,
Szeged, Warsaw.
C’est l’environnement f rame qui crée les transparents, ici la commande \titlepage
va y afficher les renseignements saisis dans les commandes \title, \author et \date
du préambule. La commande \block pour sa part va définir un cadre bien visible
avec un titre.

\documentclass[20pt]{beamer}
\usetheme{Madrid} V, theme bleu
\title[Titre court]{Titre long}
\author{N.-Poulain}
\date{\today}
\begin{document}
N. Poulain
\begin{frame} % Transparent 1
\titlepage 13 février 2019
\end{frame}

N PouU>n Titre court 13 févne» 2019 1/3

Boi
\begin{frame} % Transparent 2

I
\frametitle{Bonjour à tous}
Le cours commence maintenant.
Le cours commence maintenant.
\end{frame}

N l*OUl4il> I lire court 13 (é.r>CT 2019 2/3


\begin{frame} 7, Transparent 3

\frametitle{Les bases} tesbas» ]


\begin{block}{Les blocs de texte}
Ils mettent des éléments en valeur.

C'est important pour agrémenter Les blocs de texte


l'exposé oral. Ils mettent des éléments en valeur.
\end{block} C'est important pour agrémenter
l’exposé oral.
\end{frame}

\end{document}
I me court 1 3 (evner 2019
18.2 Les couches d’un transparent 189

18.2 Les couches d’un transparent


Pour pouvoir découvrir ou faire disparaître un texte ou des images de façon dy­
namique, beamer apporte le concept de couches.
L’idée est d’écrire un contenu complet dans une f rame mais de pouvoir en afficher
le contenu au fur et à mesure en plaçant des commandes aux bons endroits. La frame
sera alors divisée en couches qui seront autant de nouvelles pages à faire défiler.
La commande \pause est la plus simple pour afficher des éléments étape par étape
dans une frame. La commande beamertemplatetransparentcovered du préambule
permet d’afficher en gris clair les éléments non encore découverts. Sans cette com­
mande ils seraient complètement invisibles.

Dans la vieille mare,

\documentclass [20pt]{beamer}

a
\beamertemplatetransparentcovered

« \begin{frame} Dans la vieille mare,


I 7. Un Haïku une grenouille saute,
j Dans la vieille mare, \\ \pause
une grenouille saute, \\ \pause
le bruit de 1'eau.
\end{frame}
Dans la vieille mare,
une grenouille saute,
le bruit de l'eau.

Pour maîtriser complètement les affichages/masquages sur les diverses couches


d’un transparent, on a besoin de commandes supplémentaires :

\invisible<nl>{contenu} le contenu est invisible sur la couche ni ;


\visible<nl>{contenu} le contenu est visible sur la couche ni ;
\uncover<nl>{contenu} comme \visible mais le contenu non rendu sera gris en
cas d’utilisation de \beamertemplatetransparentcovered;
\only<nl>{contenu} comme \visible mais ne réserve pas la place pour le contenu
lorsqu’il est caché. La mise en page est réorganisée;
\alt<nl>{cont. l}{cont. 2} affiche cont. 1 sur la couche ni et cont .2 ailleurs;
\alert<nl>{contenu} le contenu est mis en évidence sur la couche ni.

Les changements d'état


\documentclass [20pt]{beamer}
\begin{frame} Fusion :

a Les \alert<l>{changements d'état}

Fusion : \invisible<l>{Solide à Liquide} \\


\visible <2>{ Vaporisation : Liquide à Gazeux} \\
Ionisation : \alt<1>{??}{Gazeux à Plasma}

\end{frame}
Ionisation :??

Les changements d’état


Fusion : Solide à Liquide
Vaporisation : Liquide à Gazeux
Ionisation : Gazeux à Plasma
190 Chapitre 18. Présentation de diapositives avec Beamer

Concernant les spécificateurs qui déterminent les couches sur lesquelles les com­
mandes sont actives, on peut choisir une page, plusieurs ou même des plages de pages :
— <nl> uniquement sur la couche ni ;
— <nl,n2,n3> uniquement sur les couches nl,n2 et n3 ;
— <nl-n2> de la couche ni à la couche n2 ;
— <nl-> de la couche ni jusqu’à la fin du transparent ;
— <-n2> du début du transparent jusqu’à n2.

18.3 Équations et beamer


Le principe des couches se prête bien à l’affichage de résolution d’équations et plus
généralement à la présentation de calculs.

\documentclass[20pt]{beamer} 12
\begin{frame}
15

i \[

\]
\frac{12}{15}
\visible<2->{ - \frac{3\tiœeB 4}{3\time8 5}}
\visible<3->{ ■ \frac{4}{5}}
12
15
12
3x4
3x5
3x4 4
\end{frame} 15 3x5 5

Un exmple un peu plus construit :

\usepackage{siunitx}
\begin{frame}

\[ \frac{E}{m} ■ \SI{9 ,Oe 16}{\meter'*2\per\second'‘2} \]

B \visible<2->{
et donc :
\begin{align*}
\sqrt\frac{E}m ft" \SI{3,0e8}{\meter\per\second} \\
\visible<3->{k« c}
\end{align*}
}
\end{frame}

- = 9,0x 10,B m2/s2 - = 9,0x 1O10 m2/s'.2 - = 9,0 x 1016 m2/s.2:


m m m
et donc : et donc :

\ — = 3,0 x 108 in/s \ — = 3,0 x 108 m/s


V m V m
=c
18.4 Graphismes et beamer 191

18.4 Graphismes et beamer


Les commandes d’affichage et de masquage sur les couches peuvent aussi être ap­
pliquées à la construction de graphiques évolutifs comme le montre l’exemple suivant.
\usepackage{tikz}
\begin{frame}

\begin{tikzpicture} [scale-1]
7> Le repère
\draw[->, thick] (-3.5,0) — (1,0); \drav[->, thick] (0,-1) — (0,2);

a \foreach \x in {-3,-2,-1,1} \draw (\x,lmm) — (\x,-lmm) node[below] {$\x$};


\foreach \y in {-1,1} \draw (1mm,\y) — (-1mm,\y) node[left] {$\y$};

\draw plot[smooth] coordinates {(-3,0) (-2,1.5) (0,0) (1,1)};

\visible<2->{\draw[dashed] (-2,0)--(-2,1.5) node{$\bullet$};}


\visible<3->{\draw [daehed] (-2,1.5)--(0,1.5) node(right]{1,5};}
\end{tikzpicture}

\end{frame}
Commandes et environnements
personnalisés

Les macro-commandes permettent de définir des raccourcis personnalisés. Tout


est possible en matière de constuction de macros. Pour preuve, LMpX est un jeu de
macro-commandes TgX. Il n’est pas question de faire le tour de la question en un
chapitre mais de donner les éléments essentiels pour comprendre le fonctionnement
d’une macro et être capable de se créer ses propres outils pour gagner du temps.

\usepackage{amsfonts}
\usepackage{esvect}
\newcommand{\R}{\mathbb{R}}

8 \newcommand{\RRH\R\times\R} iSoit (x,y) 6 R x R, on place)


\newcommand{\Oi j }{(0 , \ vv\imath , \vv\ jmath)} un point M(x,y) dans le repère :
\newcommand{\cursive} [1]{\mathcal{#1}} (O, T, 7) du plan P.
Soit $(x,y)\in\RR$, on place un point $M(x,y)$
dans le repère $\0ij$ du plan $\cursive{P}$.
194 Chapitre 19. Commandes et environnements personnalisés

19.1 Commandes sans paramètres


Pour éviter de saisir des combinaisons de commandes fréquentes ou complexes,
L>TeX fournit la commande \newcommand pour définir de nouvelles commandes1.

\newcommand{\nom}{déf inition}

> \newcommand{\ssiXsi et seulement si }


Un entier est pair si et seule­
H
co Un entier est pair \ssi il est divisible par 2. ment si il est divisible par 2.

Une commande pour marquer la fin d’une démonstration avec un petit carré contre
la marge de droite :
H*"] \neucommand{\cqfd}{\hfill$\Box$}
P| S [ On a donc Sx-0$. \cqfd
On a donc x = 0. □

\newcommand possède un mécanisme qui évite de redéfinir par erreur une com­
mande déjà existante. Par exemple tenter de définir une commande \begin
O conduira à une erreur explicite : LaTeX Error : Command \begin already
defined. Si on veut vraiment redéfinir une commande existante, on utilise
\renewcommand dont la syntaxe est exactement la même.

On peut créer des commandes pour le mode mathématique :

B
\usepackage{amsfonts}
\neucommand{\R}{\mathbb{R}}
\newcommand{\RR}{\R \times \R} le symbole R et le produit R x R
le symbole $\R$ et le produit $\RR$

Mieux vaut ne pas spécifier le mode mathématique dans la définition de la macro,


cela produirait un conflit lors de l’utilisation de la macro en mode mahématique. Pour
éviter ce genre de problème, on peut utiliser la commande \ensuremath qui assure
que son argument sera imprimé en mode mathématique quel que soit le mode courant.

B
\usepackage{amsfonts}
\newcommand{\Q}{\ensuremath{\mathbb Q}} Pour x non nul dans l’ensemble Q,
Pour $x$ non nul dans l'ensemble \Q, on a | 6 Q
on a $\frac{l}{x} \in \Q$

Voici une commande \exo qui à chaque appel va incrémenter un compteur qui
servira à numéroter automatiquement des exercices (cf. 4.1, pour une autre manière
de procéder). La première étape consiste à créer puis initialiser le compteur que nous
appelons Ex. Ensuite on crée la commande qui va incrémenter le compteur avant d’en
afficher la valeur \theEx en blanc dans une boîte rectangulaire de couleur grise.
1. On trouve souvent la syntaxe \def\nom{définition} qui correspond à une primitive 'IfeX.
19.2 Commandes avec arguments 195

\usepackage{xcolor}
\def inecolor{gris}{rgb}{0 .5,0.5,0.5}
'/• Définition & initialisation du compteur
\newcounter{Ex} \setcounter{Ex}{0}
% Définition de la commande Q Calculer /(2).

B
\newcommand{\exo}{\stepcounter{Ex} i
i
\colorbox{gris}{\textcolor{white}{\theEx}}
} Fl Déterminer /-1(0). I

\exo Calculer $f(2)$. Fl Calculer /'(O).


»—_________________
\exo Déterminer $f“{-1}(0)$.

\exo Calculer $f'(0)$.

19.2 Commandes avec arguments


Une nouvelle commande peut prendre jusqu’à neuf arguments qu’on spécifie entre
crochets et qui seront appelés #1, #2 etc...

\newcommand{\nom} [narg] {déf inition}

Dans l’exemple suivant, la commande est définie avec deux arguments. Lors de
l’appel par \problm{de physique}{5 pts}, l’argument #1 sera remplacé par de
physique et #2 par 5 pts.

\newcommand{\problm}[2] {

I I Problème de physique
\textbf{Problème #1} \hfill (#2)\par (5 Pts);
}
blabla...
| a> | \problm{de physique}{5 pts} blabla... Problème de chimie (4 pts)i
blabla...
\problm{de chimie}{4 pts} blabla...

Le premier argument de la commande \QCM suivante sera la question et les trois


suivants, les trois propositions de réponse placées dans trois colonnes de largeur 30 %.

\newcommand{\QCM} [4]{#l\par
\begin{tabular }{0{} p{0.3\linewidth} p{0.3\linewidth} p{0.3\linewidth}}
\fbox{A} #2 k \fbox{B} #3 k \fbox{C} #4 “-- 7-------------

T \end{tabular}
}

\QCM{Si Sx—2-2$, alors}


{$x-0$}{$x—4$}{$x-4$}
j £1 * = “2 “ 2’-Ê19rS
j A X = 0 B z =-4

C 1=4

QO supprime l’espace séparateur de colonnes pour permettre au contenu de la


O première cellule de coller à la marge de gauche.
196 Chapitre 19. Commandes et environnements personnalisés

19.3 Commandes avec argument optionnel


La syntaxe complète de la \newcommand est finalement :

\newcommand{\nom}[narg][defaut]{définition}

où narg désigne le nombre d’arguments et defaut désigne la valeur prise par défaut
de l’argument optionnel (c’est obligatoirement le premier).

\newcommand{\remq}[2][Remarque]{
\textbf{#l} : \textit{#2}

B
}
Remarque : sans arg. optionnel
\remq{sans arg. optionnel} Attention : avec arg. optionnel
\remq[Attention]{avec arg. optionnel}
blabla...

Reprenons la commande \prblm du paragraphe précédent. Elle écrivait en gras


le titre. Ce comportement pourrait être celui par défaut mais avec possibilité d’en
changer.

\newcommand{\problm}[3][\textbf]{
#l{Problème #2} \hfill (#3)\par Problème de physique (5 pts)

11
} blabla...
\problm{de physique}{5 pts} blabla...
Problème de chimie (Bonus)
\problm[\textit]{de chimie}{Bonus} blabla...
blabla...

Il est possible (mais plus complexe) de créer des commandes avec plusieurs
O arguments optionnels notamment grâce au package xargs (cf. [CTAN]).

19.4 Environnements personnalisés


De la même manière qu’on a créé des commandes, on peut créer ses propres envi­
ronnements commençant par \begin{nom} et se terminant par \end{nom}.
La syntaxe est simple :

\newenvironment{nom}[narg][defaut]{début}{fin}

Voici un environnement simple pour mettre entre guillemets à la française (\og


pour ouvrez les guillements et \fg pour fermez les guillemets').

\newenvironment{extrait}{\og }{\fg{}}

\begin{extrait} « Rien ne se perd. »


Rien ne se perd.
\end{extrait}
19.4 Environnements personnalisés 197

On peut ajouter un argument pour préciser l’auteur de l’extrait.

\newenvironment{extraitbis}[1]
{Comme dit \textsc{#l} : \og}

B
F {\fg{}>
\begin{extraitbis}{Lavoisier}
Rien ne se perd.
\end{extraitbis}
• Comme dit Lavoisier : « Rien ne .
i se perd. »

Les arguments ne peuvent être utilisés que dans la définition du début mais
O pas dans celle de la f in. Voici un contournement possible.

\newenvironment{extraitter}[1]
{\og \def\foo{#l}}
{\fg{}\begin{flushright}

g
i
\textsc \foo 1 « Rien ne se perd. »
\end{flushright} }
Lavoisier
\begin{extraitter }{ Lavoisier }
Rien ne se perd.
\end{extraitter}
hapitre 20
Programmation et calculs avec KTgX

Ici on aborde les questions plus complexes de gestion des boîtes, des dimensions
et des calculs avec LM^X. Dans cette dernière partie, il ne s’agit plus vraiment de
composer un document à imprimer mais d’entrevoir les possibilités de DT^X. Tout
est faisable en théorie mais TgX est un langage difficile et l’objectif de ce chapitre
est de de donner quelques pistes pour entrevoir ses possibilités comme langage de
programmation à part entière. On terminera avec un retour sur les possibiltés offertes
par le module pythontex pour générer des commande DT^X en exécutant du code
Python.

\usepackage{lcg,cale}
\usepackage{amsmath}
\newcommand{\randfrac}{
\reinitrand [f irst-1, last ==10 , counter-num] \rand r
\reinitrand [f irst-2 , last-20 , counter=deno]\rand j
: Simplifier la fraction : 30
\reinitrand [first-2,last-5 , counter-coef]\rand 21
\ se tcounter{num}{\value {coef }*\value{num}}
\ se t count er {deno }{\value { coef }*\value {deno}} 20 ■
Simplifier la fraction :

I
$\dfrac{\thenum}{\thedeno}$
45 !
>
Simplifier la fraction : \randfrac
\medskip
I Simplifier la fraction :
±36 i
Simplifier la fraction : \randfrac
\medskip 10
Simplifier la fraction :
22
Simplifier la fraction : \randfrac
\medskip

Simplifier la fraction : \randfrac


200 Chapitre 20. Programmation et calculs avec IATjtX

20.1 Boîtes et dimensions


Quand DTgX compose un texte, il effectue un travail
assez proche de celui des premiers imprimeurs après Gu- I h []~m~n rHÏTn
temberg avec les caractères mobiles : il place des boîtes
qu’il colle les unes aux autres.
Les boîtes de DTjÿC ne contiennent pas seulement des De jolies boîtes
lettres puisqu’il est possible d’y regrouper du matériel
avec la commande \makebox (cf. 3.9.1) ou avec l’envi­
ronnement minipage (cf. 3.12). De plus chaque boîte peut être manipulée : tournée,
translatée ou déformée (cf. 3.18).
Pour créer une boîte vide de la taille d’un caractère ou d’un mot, on dispose de la
commande \phantom et de ses variantes \vphantom : boîte vide de largeur nulle mais
de hauteur égale à celle de son argument et \hphantom : boîte de hauteur nulle mais
*e largeur égale à celle de son argument.

\phantom{texte} \vphantom{texte} \hphant om{texte}

g Texte \phantom{à trou} simple Texte simple


II Dans l’exemple suivant, si on veut masquer la fraction sous la racine carrée, on
voit que la solution avec phantom est la meilleure puisque les autres n’ont soit pas la
bonne largeur, soit pas la bonne hauteur, soit ni l’une ni l’autre.

\[ \sqrt{\frac{l}{200}}
■771 \quad \sqrt{}

8 \quad
\quad
\quad
\]
\sqrt{\phantom {\frac{l}{200}}}
\sqrt{\vphantom{\frac{!}{200}}}
\sqrt{\hphantom{\frac{l}{200}}} V2ÔÔ V V
Pour bien clarifier, on dessine ici avec \fbox ou \boxed (l’équivalent en environ­
nement mathématique) le tour de chaque boîte des deux exemples précédents.

\setlength{\fboxrule}{0. Olpt}
\setlength{\fboxsep}{0pt}
Texte \fbox{\phantom{à trou}} simple Texte [ ] simple
ïïl \quad
S
\sqrt{\boxed{\frac{l}{200}}}
\sqrt{\boxed{}}
*3 I \quad \sqrt{\boxed{\phantom{\frac{1}{200}}}} nn
\quad \sqrt{\boxed{\vphantom{\frac{l}{200}}}} 2ûn
\quad \sqrt{\boxed{\hphantom{\frac{l}{200}}}}
\]

Remarquez que dans l’exemple précédent, on a réduit l’épaisseur du bord des


O boîtes et rendu nulle la distance de séparation entre le contenu et le bord en
redéfinissant les longueurs \fboxrule et \fboxsep.
20.1 Boîtes et dimensions 201

Si on veut remplacer un groupe de mots par une série de pointillés de la largeur


exacte de ce groupe de mots, ou si on souhaite que le trou en pointillés ait une
dimension 50 % plus grande que celle du groupe de mots, on comprend qu’il devient
nécessaire de pouvoir mesurer la taille d’une boîte et faire des calculs élémentaires sur
cette dimension.
Trois outils sont nécessaires : la commande \newlength qui permet de définir une
nouvelle variable var de type longueur, la commande \settowidth qui permet de
donner la largeur d’un contenu à la variable var et une commande \setlength qui
permet d’affecter la longueur long à la variable var.

\newlength\var \settowidth\var{contenu} \setlength\var{long}

Dans l’exemple suivant, la nouvelle longueur \lrg reçoit la largeur du texte «à


trou» après avoir été définie. Elle peut alors être utilisée pour dessiner une boîte de
la bonne largeur qui sera remplie de pointillés.

8
\newlength\lrg
\settowidth\lrg{à trou} Texte à trou évolué
Texte à trou évolué \\ Texte évolué
Texte \makebox[\lrg]{\dotfill} évolué

Dans ce second exemple, on définit une seconde longueur \biglrg à laquelle on


donne la longueur 1.5x\lrg afin de créer un trou visible 50 % plus large pour per­
mettre d’y écrire la réponse au stylo.

\newlength\lrg
\settowidth\lrg{à trou}

il \newlength\biglrg
\setlength\biglrg{l.5\lrg}
Texte à trou évolué \\
Texte \makebox[\biglrg]{\dotf ill} évolué
' Texte à trou évolué
j léxte . évolué

Il est maintenant tentant de construire une macro \trou.

\newlength\lrg
\newlength\biglrg
\nevcommand{\trou}[1]
\settowidth\lrg{#l} 7. Rien ne se , rien ne se
™ \setlength\biglrg{l.5\lrg}£
| S | \makebox[\biglrg]{\dotfill}}} tout........

Rien ne se \troufperd}, rien ne se \trou{crée},


tout \trou{se transforme}.

La commande \settowidth qui affecte la largeur à une variable a bien sûr son
pendant pour récupérer la hauteur d’une boîte. La section suivante explique
notamment comment.
202 Chapitre 20. Programmation et calculs avec LHfeX

20.2 Boîtes enregistrées réutilisables


On dispose avec lAT^X d’un moyen assez simple de créer des boîtes réutilisables
avec les commandes :

\newsavebox{\cmd} \savebox{\cmd}{contenu} \usebox-C\cmd}

\nevsavebox{\mybox}
\savebox{\mybox}{^
\begin{minipage}{\0.75\linewidth} Du texte juste pour rem­
Du texte juste pour remplir. plir. Du texte juste pour
Du texte juste pour remplir.

B \end{minipage}
}

\usebox{\mybox}
\begin{center}
remplir.
Du texte juste pour rem­
plir. Du texte juste pour
remplir.
\usebox{\mybox}
\end{center}

L’avantage à sauvegarder une boîte se trouve dans le fait qu’on peut accéder à ses
dimensions avant de l’utiliser. Ainsi, si on veut dessiner un trait vertical de la hauteur
de la boîte, à gauche de celle-ci, on va procéder en deux temps. width
Dans un premier temps, déterminer la hauteur et la
profondeur de la boîte car celle-ci s’étend au dessus et height
au dessous de la ligne d’écriture. Dans un second temps, .Ligne
d’ecriture
additionner la hauteur et la profondeur pour déterminer depth
la hauteur totale.

\settoheight\var{contenu} \settodepth\var{contenu}

\addtolength\var{long}

\newsavebox{\mybox}
\savebox{\mybox}{#
\begin{minipage}<\0.75\linewidth}
Du texte juste pour remplir.
Du texte juste pour remplir.
\end{minipage}
}
Du texte juste pour rem­

B
< \newlength\hauteur
\settoheight\hauteur{\usebox{\mybox}} plir. Du texte juste pour
\neulength\prof ondeur remplir.
\settodepth\profondeur{\usebox{\mybox}}
\addtolength\hauteur{\profondeur}

\begin{center}
\rule[-\profondeur]{4pt}{\hauteur}
\usebox{\mybox}
\end{center}
20.2 Boîtes enregistrées réutilisables 203

On peut maintenant créer une commande pour automatiser.

\newsavebox{\mybox} \newlength\hauteur \newlength\profondeur

\newcommand{\boiboite}[1] {
\savebox{\mybox}{\begin{minipage}{0.75\linewidth}#l\end{minipage}}
\settoheight\hauteur{\usebox{\mybox}}
\settodepth\prof ondeur <\usebox{\mybox}}
\addtolength\hauteur{\profondeur} bla bla bla bla bla bla bla
bla bla bla bla bla bla
co \begin{center}
\rule[-\profondeur]{4pt}{\haut eur} I bli bli bli bli bli bli
\usebox<\mybox}
\end{center}
}
\boiboite{ bla bla bla bla bla bla bla bla bla bla bla bla bla}
\boiboito{ bli bli bli bli bli bli }

Le package cale décrit dans la section suivante apporte une série de commandes
qui simplifient l’écriture des calculs avec les quatre opérations de base. Dans l’exemple
2x1 KIA de la page précédente, on avait :
\newlength\hauteur
\settoheight\hauteur{\usebox{\mybox}}
\newlength\prof ondeur
\ se ttodept h \ prof ondeur {\usebox{\mybox}}
\addtolength\hauteur{\profondeur}

Avec les commandes \heightof et \depthof qu’apporte également cale (dont la


signification se passe d’explications), on peut maintenant écrire une addition.
\usepackage{calc}
\newlength\hauteurtôt
\settoheight \ hauteur tôt -{\heightof \usebox\œybox + \depthof\usebox\mybox}

En réalité il existe même une commande \totalheightof.

\usepackage{calc}
\newsavebox{\mybox}
\newcommand{\boiboite}[1]{
\savebox{\mybox}{\begin{minipage}{0.75\linewidth}#l\end{minipage}}
\setlength\prof ondeur {\depthof {\usebox\mybox}}
\setlength\haut eurtot{
\totalheightof{\usebox\mybox}}
bla bla bla bla bla bla
\begin{center} bla bla bla bla bla
a. | \rule [-\profondeur] {4pt}{\hauteurtot}Z
-2J \rule [-\prof ondeur-4pt] {Ipt }{\hauteurtot+8pt}
bli bli bli bli bli bli !
\usebox{\mybox}
\end{center}
}

\boiboite{ bla bla bla bla bla bla bla bla bla bla bla bla bla}
\boiboite{ bli bli bli bli bli bli }
204 Chapitre 20. Programmation et calculs avec

20.3 Arithmétique avec cale


Avec le package cale, on peut effectuer des calculs de manière lisible avec les
quatre opérations de base.
On peut travailler sur des entiers (compris entre —231 et 231 — 1). Le principe est
de déclarer un compteur ent puis de lui donner une valeur entière val. On affiche
alors sa valeur avec \the suivi de son nom : \thecnt.

\newcounter{cnt} \setcounter{cnt}{val}- \thecnt

\usepackage{calc}
\newcounter{na} \newcounter{nb}

g
\setcounter{na}{6} \setcounter{nb}{3}
\newcounter{nc}
\setcounter{nc}{\value{na} ♦ \value{nb}} \thenc,
19, 3, 18, 2?
\setcounter{nc}{\value{na} - \value{nb}} \thenc,
\setcounter{nc}{\value{na} ♦ \value{nb}} \thenc,
\setcounter{nc}{\value{na} / \value{nb}} \thenc.

On peut aussi travailler avec des longueurs réelles avec les commandes de décla­
ration et d’affectation vues dans la section précédente. On affiche la valeur d’une
longueur \lng avec la commande \the suivie de son nom : \the\lng.

\newlength{\lng} \setlength{\lngXval} \the\lng

\usepackage{calc}
\nevlength{\la} \newlength{\lb}

I
\setlength{\la}{6pt} \setlength{\lb}{3pt}
\newlength{\lc}
\setlength{\lc}{\la + \lb} \the\lc,
9.0pt, 3.0pt, 18.0pt, 2.0pt.
\setlength{\lc}{\la - \lb} \the\lc,
\setlength{\lc}{\la ♦ 3 } \the\lc,
\setlength{\lc}{\la / 3 } \the\lc.

Attention : les longueurs ont une unité. L’addition et la soutraction de longueurs


ont donc un sens mais pas le produit ni le quotient. Par ailleurs, cale autorise
le produit et le quotient dans le sens \la*3 mais pas dans le sens 3*\la.

Il est possible d’effectuer des multiplications par des réels mais il faut alors les
déclarer comme tels.
\usepackage{cale}

g
\newcounter{na} \newlength{\la}
\setcounter{na}{6} \setlength{\la}{6pt} 9, 9.0pt.
\setcounter{na}{\value{na} ♦ \real{1.5}} \thena,
\setlength{\la}{ \la ♦ \real{1.5}} \the\la.
20.3 Arithmétique avec cale 205

Attention, les compteurs étant des entiers, après multiplication par un réel, l’éven­
tuelle partie décimale est supprimée.

\usepackage{cale}
H \newcounter{na} \setcounter{na}{6}
LS* \newlength{\la} \setlength{\la}{6pt} >11, 11.25pt.
IcoJ \ set counter{na}{\value {na} ♦ \real {1.875}} \thena ,
\setlength{\la}{ \la * \real{1.875}} \the\la.

Mettons tout cela en application pour créer un petit bandeau publicitaire dont on
a dessiné à droite un schéma de construction.

la séance ! HA - boxA---- ----- boxB----- HB


HA/2-HB/2

LA LB

On crée deux longueurs \HA et \LA qui vont servir pour donner une grande dimen­
sion au prix enregistré dans une boîte \boxA qui sera mise à l’échelle avec \resizebox.
Ensuite, on enregistre «la séance!» dans la boîte \boxB et on va enregistrer ses di­
mensions dans deux nouvelles longueurs \HB et \LB. Les deux lignes horizontales sont
alors tracées à la longueur \LB, celle du haut étant décalée d’une hauteur \HA — Ipt
(Ipt étant son épaisseur). Il ne reste plus alors qu’à positionner la boîte \boxB avec
un décalage d’une hauteur \HA 4- 2 - \HB 4- 2 avec \raisebox.

\usepackage{calc}
\usepackage{texteomp}
\newlength{\HA} \newlength{\LA}
\setlength{\HA}{7mm} \setlength{\LA}{lcœ}

\newsavebox{\boxA} \savebox{\boxA}{4\texteuro}

M \newsavebox{\boxB} \savebox{\boxB}{la séance !}


oJ \newlength{\HB} \newlength{\LB} la séance !
| en I \setlength{\HB}{\totalheightof {\usebox\boxB}}
\setlength{\LB}{\widthof{\usebox\boxB}}

\resizebox{\LA}{\HA}{\usebox\boxA}

\ ru 1 e {\LB } ■{ 1 pt} %
\hspace{-\LB}\rule [\HA-Ipt] {\LB}{lpt}%
\hspace{-\LB}\raisebox{\HA/2-\HB/2}{\usebox\boxB}

Remarquez les signes % à la fin des deux avant-dernières lignes. Ils servent à
masquer la fin de ligne qui est interprétée comme une espace par MfeX. Ces es­
O paces créeraient des décalages alors que le but des commandes \hspace{~\LB}
est justement de revenir à l’exact point de départ.
206 Chapitre 20. Programmation et calculs avec LXI^X

20.4 Structures conditionnelles avec ifthen


Le package ifthen permet d’effectuer des tests et des branchements conditionnels.
Le principe de la commande \ifthenelse est le suivant : si la condition est réalisée,
alors si Vrai sera exécuté, sinon, ce sera siFaux.

\ifthenelse{conditionXsiVrai}{siFaux}

5
“ \usepackage{ifthen}
Le numéro de page est Le numéro de page est pair.
S \if thenelse{\isodd{\thepage}}{ impair }{pair} .

Les comparaisons de nombres entiers sont simples, il suffit de placer l’opérateur


de comparaison : <, > ou =.

\usepackage{ifthen}

S Il y a
\ifthenelse{\thepage >100}{plus}{moins}
de 100 pages avant celle-ci.
Il y a plus de 100 pages avant
celle-ci.

Pour comparer des nombres réels dans une macro-commande, on peut passer par
la construction puis la comparaison de longueurs avec la commande \lengthtest
comme dans l’exemple ci-dessous :

\usepackage{ifthen}
\newlength{\lenpoint}

\neucommand{\point} [1] {
\setlength{\lenpoint}{#lpt}
\ifthenelse 1 point, 2 points , 1.5 points , 0.5 point
{\lengthtest{\lenpoint > Ipt}}
{#1 points}{#l point}
>
\point{l}, \point{2}, \point{1.5}, \point{0.5}

La commande suivante utilise la commande \point précédente pour aller plus loin
en comparant deux chaînes de caractères avec la commande \equal.

s
\usepackage{ifthen}
\newcommand{\bareme}[1]{
\ifthenelse
{\equal{#l}{bonus}} 1 point , 2.5 points , BONUS
{\bfseries BONUS}{\point{#1}}
}
\bareme{l}, \bareme{2.5}, \bareme{bonus}
20.5 Nombres pseudo-aléatoires avec leg 207

20.5 Nombres pseudo-aléatoires avec leg


Le package leg permet de générer des nombres entiers dans l’intervalle des possi­
bilités de LŒbX : [-231 + 1,231 - 1](= [-2147483647,2147483647]).
Par défaut, la commande \rand définit et donne une valeur aléatoire au compteur
rand dont on peut alors demander un affichage décimal avec la commande \therand
ou \arabic{rand}.

\usepackage{leg}
! Premier lancer de dé : 5.
î
\reinitrand(f irst = 1,last-6]
Premier lancer de dé : \rand\therand.\\ ; Second lancer de dé : 2.
Second lancer de dé : \rand\therand.

Avec une boucle et une structure conditionnelle, on génère ici une liste de 12
nombres aléatoires tous compris entre 10 et 100.

\usepackage{leg,ifthen}
O \reinitrand [first-10,last-100]
M \multido{\n-l+l}{12}{ ;91, 23, 35, 18, 99, 32, 43,
œ \rand\therand 115, 36, 58, 34, 26.
i_____ __________________________________ —_
\ if thenelse{\n<12}{ , }{ . }
}

On peut générer des nombres entiers relatifs et les stocker dans des compteurs
personnalisés.

\usepackage{lcg,calc}

E
\reinitrandCcounter-A, first--20,last--l] \rand
\reinitrand[counter-B, first«1,last-20] \rand
! —17 x 11 = -187
\newcounter{C} \setcounter{C}{\value{A}*\value{B}}

$\theA \times \theB - \theC$

Pourquoi ne pas construire un diagramme avec des valeurs aléatoires ?

i
\usepackage{leg}
\usepackage{tikz,tkz-base}
6
\reinitrand[counter-H, first-1,last-6] 5
\begin{tikzpicture}[scale-0 .6] 4

B \tkzlnit[xmin-0, xmax-6,
ymin-0, ymax-6]
\tkzAxeXY[label-{}]
\foreach \x in {1,2,...,5} {
\rand
3
2
1
i

\draw (\x,0) rectangle (\x+0.5,\theH) ;


}
\end{tikzpicture}
0L
0 1 2 3 4
P6
208 Chapitre 20. Programmation et calculs avec I^TgX

20.6 Calcul avancé dans L>Tj>K avec Python


On l’a vu en 17.4.3, le package pythontex 1 permet d’exécuter du code Python
dans un document DTgX. Dans l’exemple suivant, on voit que la commande \py
effectue un calcul dont l’écriture est très simple.

i \usepackage {pythontex}
Savez-vous que
3> | $1.5'“{14} \aimeq \py{round(1.5**14)}$ ?
Savez-vous que 1.514 ~ 292?

Le code Python peut être décomposé en plusieurs blocs, par exemple pour charger
la bibliothèque math avant de l’utiliser.

\usepackage{pythontex}
\begin{pycode}
from math import ♦ la racine carrée de 2 est environ
\end{pycode} égale à 1.41421356237
La racine carrée de 2 est environ
égale & \py{sqrt(2)}

On peut aller plus loin en composant des commandes lAT^X avec Python. Ici, le
tableau est généré par le code. Afin que le caractère \ ne soit pas interprété comme
un caractère d’échappement par la commande print, on fait précéder la chaîne par le
carctère r. Il reviendrait au même d’écrire print ("\\end{tabular}”).

\usepackage{pythontex}
X (val. approchée)
\begin{pycode} TÔT 10.04987562112089
print(r"\begin{tabular}{r11}") 102 10.099504938362077
print(r"$x$ & $\sqrt{x}$ (val. approchée)"
print(r"\\ \hline") 103 10.14889156509222
for i in range(101,110): 104 10.198039027185569
print(i) 105 10.246950765959598
print("ft")
print(sqrt(i)) 106 10.295630140987
print(r"\\") 107 10.344080432788601
print(r"\end{tabular}")
\end{pycode}
108 10.392304845413264
109 10.44030650891055

Rappelons qu’avec pythontex, on exécute la compilation en trois étapes :


[Link], [Link] et [Link]. En cas d’erreur de création d’une commande
DTpjX à l’étape 2., l’étape 3. pourrait ne pas fonctionner pas mais pire, on
O pourrait ne pas pouvoir relancer l’étape 1. si les fichiers temporaires produits
par pythontex contiennent des résultats non valides. En cas de problème à
la compilation de [Link], on aura donc intérêt à supprimer le dossier
[Link] avant de relancer.

1. Cf. [CTAN] et [13].


20.6 Calcul avancé dans LMfcX avec Python 209

Pour le calcul symbolique, la librairie SymPy (cf. [12]) est un véritable couteau
suisse. Elle apporte même la fonction spéciale latex O qui permet de mettre en forme
les résultats. L’amélioration est bien visible dans l’exemple suivant :

\usepackage{pythontex}
\begin{pycode}
rZT) from sympy import ♦
PnrCx.f) (x — y) ♦ *2 = x ♦ *2 - 2 ♦ x ♦ y + y ♦ *2
w e ■ ((x - y)»*2) (x - y)2 = x2 - 2xy + y2|
LU print("$ 7.S-7.S $" 7.(e, expand(e)))
print("$ 7.s-7.s $" 7.(latex(e), latex(expand(e))))
\end{pycode}

Plus simple, l’environnement dédié sympycode charge par défaut la librairie SymPy
et va automatiquement convertir les résultats au format DT^X.

\usepackage{pythontex}
\begin{sympycode}
from sympy import ♦
kH var("x")
« f ■ (sin(x)-x)/x**3 Le DL de X
à l’ordre 4 est v l*v
+ O(x
'
4')
I h | dl - [Link](x, 0, 4)
\end{sympycode}

Le DL de $\sympy{f}$ à l'ordre 4 est $\sympy{dl}$

Python peut même être utilisé pour générer des commandes. Dans l’exemple sui­
vant, on trace avec TikZ la suite de Syracuse pour n=27 dont le temps de vol est de
111 et l’atitude maximale de 9232. Le code python construit la liste des points de la
suite à placer sur la figure.

\usepackage{pythontex}
\usepackage{tikz}
\begin{t ikzpicture} [x=0.5mm , y-0.005mm]
\draw (0,0)--(120,0);
\draw (0,0)--(0,9300) ;

\begin{pycode}

B
i,n - 0,27
while n!»l:
i-i + 1
if n7.2—0:
n-n//2
else :
n«3*n+l
print(r"\draw (7.8 ,7. s) node{$\bullet$} ; "%(i ,n))
\end{pycode}

\end{tikzpicture}

On aurait aussi pu utiliser matplotlib comme dans l’exemple de la page 185.


210 Chapitre 20. Programmation et calculs avec

Terminons avec un exemple classique : le crible d’Ératosthène. Chaque nombre de


1 à 100 est généré par deux boucles imbriquées et si le nombre n’est pas premier, on
utilise la commande \cancel pour l’afficher biffé.
\usepackage{pythontex, cancel}
\begin{pycode}
def estpremier(n):
for i in range(2,n):
if n7.i«0: return False
return True

I priât(rn\begin{tabular}{|c|c|c|c|clc|c|c|c|c|> \hline")
for i in range(10):
for j in range (1,11):
n - i*10+j
print(n if estpremier (n) else r "\cancel{*/,d} "7. (n) )
printCk" if j!-10 else r"\\ \hline")
print(rn\end{tabular}")
\end{pycode}

1 2 3 5 g 7 % 0 X
11 13 P5" X 17 19
23 X X X J29 X
31 X X X 37 M X Æ
41 & 43 X 47 0 x
X 53 X X & 59 &
61
71 n
Æ
73
14 X
75^ %
6796 & X
X % 79 95
M 83 M X X 89
X & X M X 97 95 w
Bibliographie

[CTAN] Le Réseau des Archives complètes de TeX. L’outil de recherche permet de


trouver la documentation d’un package en saisissant son nom.
http : //www. ctan. org/search
[1] Catalogue de polices utilisable sous LM£X
http : //www. tug. dk/FontCatalogue
[2] Scott Pakin The Comprehensive DTpfX. Symbol List : la liste de tous les
symboles utilisable avec LM£X
https : //www. ctan. org/tex-archive/inf o/symbols/comprehensive.
[3] Alexis Bienvenue. Documentation d’AMC.
[Link]
[4] Olivier Viennet. Utilisation du package ”auto-pst-pdf”.
http : //o. viennet. f [Link]/logiciels_libres/auto_pst_pdf.html
[5] Timothy Van Zandt. PSTricks user guide.
http : //mirror. ctan. org/graphics/pstricks/base/doc/
[Link]
[6] Timothy Van Zandt et Trad. inconnu Bienvenue à PSTricks.
https : //www. apmep. f r/IMG/pdf/Traductionf inalePSTricks. pdf
[7] Dominique Rodriguez, Michael Sharpe, Herbert VoB. PSTricks-add additio-
nals macros for pstricks.
http : //mirrors. ibiblio. org/CTAN/graphics/pstricks/contrib/
pstricks-add/doc/[Link]
[8] Gérard Tisseau et Jacques Duma. TikZ pour l’impatient.
http : //math. et. inf o. f ree. f r/TikZ/bdd/TikZ-Impatient .pdf
[9] Till Tantau. The TikZ and PGF packages.
http : //ftp. oleane. net/pub/CTAN/graphics/pgf/base/doc/generic/
pgf/[Link]
[10] Leslie Lamport. Makelndez : An Index Processor For BT^X. 1987
http : //tex. loria. f r/bibdex/make index. pdf
212 Bibliographie

[11] Frank Mittelbach et Michel Goosens. ^T^XCompanion. Pearson, Deuxième


édition, 2005.
[12] SymPy tutorial.
[Link]
[13] Geoffrey M. Poore PythonTeX : Fast Access to Python from within LaTeX.
[Link]
geoffrey_poore.pdf
Index

+ valeur (dotstyle), 103 \Alph, 47, 59


\», 32 \alph, 59
— option (node), 157 \alpha, 87
-> option (node), 159 \alt, 189
-> valeur (arrows), 103 \ampere, 94
:U valeur (nrot), 107 amsfonts (package), 88
blue valeur (fillcolor), 106 amsmath (package), 86, 93
couleur valeur (linecolor), 103 amsthm (package), 96
$ ... $, 86 \ang, 95
\[ ... \], 86 Angle (notation), 90, 95
\nbput, voir \naput angle A option (pstree), 132
\ncput, voir \naput angleB option (pstree), 132
", 32
Annion, 164
pi, 152 Antécédent et image, 121, 125, 151
{[-]} valeur (arrows), 103 \appendix, 64
lOpt option (documentclass), 27 applemac option (inputenc), 8
a4paper option (documentclass), 27 \approx, 88
Accents, 8 \approxeq, 88
Accolades, 90, 91 \arabic, 59, 207
\addcontentsline, 63, 68 Arbre généalogique, 132, 160
\addtolength, 202 Arbre pondéré, 131, 160
Aire sour une courbe, 121, 151 Arc d’ellipse, 104, 136
\alert, 189 Arc de cercle, 104, 136
algebraic option (psplot), 119, 125 \arccos, 89
algorithm2e (package), 186 \arcsin, 89
algorithm2e \arctan, 89
french, 186 \arg, 89
linesnumbered, 186 Arial, 43
ruled, 186 array (env.), 93
vlined, 186 array (package), 71
align (env.), 92 \arraystretch, 70
align* (env.), 91 Arrowlnside option (ncline), 128
Aligner du texte à dr., à g., 27 arrows=
214 Index

, >103 \boxed, 200


->, 103 Boîtes, 33
{[-]}. 103 Bra-ket (notation), 91
article option (documentclass), 60 \bullet, 88
Atome, 164
\author, 188 C colonne (tabular), 72
auto-pst-pdf (package), 10 c colonne (tabular), 34, 73
automultiplechoice (package), 51 cale (package), 72, 203, 204
automultiplechoice cancel (package), 99
bloc, 51 \candela, 94
completemulti, 51 \cap, 88
avant (package), 42 \caption, 68
Axe logarithmique, semi-log, 118, 148 Cartésiennes (coordonnées), 103, 135
Axe trigonométrique, 117, 119, 147, 149 cases (env.), 93
Axe(s) gradué(s), 116, 146 Cation, 164
axesstyle=polar option (psaxes), 123 \cdot, 88
\cdots, 88
b colonne (tabular), 71, 73 \ce, 164
babel (package), 27 \cellcolor, 74
\backmatter, 64 \celtxt, 179
Ballon, 166 center (env.), 27
Bas de page (note de), 57 \centi, 94
\baselineskip, 32 Centrer du texte, 27
Bec Bunsen, 166 Cercle, 104, 136
Becher, 166 Cercle (arc de), 104, 136
bend angle option (tikzpicture), 157 \champnom, 51
Bernoulli (schéma de), 131, 160 chancery (package), 42
\beta, 87 Chapeau, 90
\bfseries, 26 Chapitre, 28
\bibitem, 65 \chapter, 28, 61, 63
Biffer, 99 \chaptername, 62
\bigcap, 89 Chaîne de Markov, 129, 158
\bigcup, 89 chemfig (package), 164
\bigoplus, 89 \chi, 87
\bigotimes, 89 Chiffres arabes, 59
\bigskip, 32 Chiffres romains, 59
\binom, 92 \circ, 88
Binomial (coefficient), 92 circuitikz (package), 172
\blank, 46 \cite, 66
bloc option (automultiplechoice), 51 \clearpage, 33
\block, 188 \clip, 150
bmatrix (env.), 93 \cnode, 128
body option (geometry), 31 Coefficient binomial, 92
book option (documentclass), 60 Colonnes multiples, 13, 30, 37, 38
bottom option (geometry), 31 colortbl (package), 74
Boucles, 112, 142 colsep option (psmatrix), 129
Index 215

\columnbreak, 39 \decroit, 78
Commentaire(s), 12 \def, 194
Compilation, 9 \def inecolor, 41
\complement, 88 \degrees, 103
completemulti option (automultiplechoice)\Delta, 87
51 \delta, 87
Complexes C, 88 deltacl option (tkzTablnit), 81
\compo, 37 \depthof, 203
Compteur, 59 \det, 89
concmath (package), 42 Detexify, 99
Condition, 206 \dfrac, 86
Congruence, 89 \diagbox, 72
\constante, 79 diagbox (package), 72
Convergence, 92 Diagramme circulaire, bâtons, 124, 154
\coordinate, 137 \dim, 89
Coordonnées calculées, 113, 144 \displaystyle, 89
Coordonnées cartésiennes, 103, 135 Disque, 104
Coordonnées polaires, 103, 135 \div, 88
Corollaire, 96 document (env.), 6
\cos, 89 \documentclass, 26, 28, 63, 86
\cosh, 89 lOpt, 27
\cot, 89 a4paper, 27
\coth, 89 fleqn, 86
Couleurs, 40, 99 documentclass
\coulomb, 94 article, 60
Courier, 43 book, 60
CQFD, 96 \dot, 90
\cr, 35 \dotfill, 32
Crochets, 91 dotsize option (psdots), 103
\croit, 78 dotstyle option (psdots), 103
crosshatch valeur (fillstyle), 106 dotstyle=
\cup, 88 +, 103
\curvearrowright, 75, 90 o, 103
square, 103
dashed valeur (linestyle), 103 x, 103
\dataplot, 124 dotted valeur (linestyle), 103, 104
plotstyle, 124 \doublebox, 33
\date, 188 \draw, 135, 136, 138, 149, 153
\ddot, 90 line width, 154
\ddots, 88 mark, 154
\deca, 94 to, 157
\deci, 94 dvipsnames option (xcolor), 41
décimais option (psPrintValue), 125 Dx option (psaxes), 117
decimalSeparator option (psaxes), 117 dx option (psaxes), 117, 119
\DeclareExerciseType, 48 Définition, 96
\DeclareMathOperator, 90 Démonstration, 96
216 Index

Déterminant, 93 Fermeture (notation), 90


\fg, 196
Échantillonnage, 120 figure (env.), 68
\ell, 88 Figure flottante, 67
Ellipse, 104, 136 Figures (liste des), 68
Ellipse (arc d’), 104, 136 \fill, 151, 152
\emph, 26 fillcolor option (pspolygon), 104
Encadrer, 33 fillcolor=
endnotes (package), 57 blue, 106
Ensembles N, R, C..., 88 fillstyle option (pspolygon), 104
\ensuremath, 194 fillstyle=
Entiers N, Z, 88 crosshatch, 106
enumerate (env.), 29 hlines, 104
Environnement DT^X, 2 solid, 104
\epsilon, 87 Fiole, 166
\equal, 206 Flacon, 166
Équation chimique, 164 \FlechesPSl, 78
\equiv, 88 \FlechesPS2, 78
Erlenmeyer, 166 \FlechesPS3, 78
Erreurs de compilation, 18 \FlechesPS4, 78
Espace horizontal, 32 fleqn option (documentclass), 86
Espace vertical, 32 Flottants, 67
espcl option (tkzTablnit), 81 Flottants (liste des), 68
esvect (package), 90 flushleft (env.), 27
\eta, 87 flushright (env.), 27
Euclidienne (géométrie), 110, 141 fncychap (package), 58
\euro, 21 Fonction (graphe d’une), 119, 149
Euro (symbole), 21 Fonction définie par morceaux, 93
\exemplaire, 51 Fonte, voir Police
exercise (env.), 46, 48 fontenc (package), 8
\exists, 88 fontenc
exo (env.), 48 Tl, 8
\exp, 89 fontspec (package), 27
Exposant, 87 FontSquirrel, 43
\extsizes, 26 \footnote, 57
\footnotemark, 57
Famille (police), 26 \footnotesize, 26
fancybox (package), 33 \forall, 88
\fancyfoot, 39 \foreach, 142, 148, 154, 156
fancyhdr (package), 39, 60 Format d’image, 35
\fancyhead, 39 frac option (tkzAxeX), 147
\fancypagestyle, 61 \frac, 86
\fbox, 33, 51 Fraction, 86
\fboxrule, 200 frame (env.), 188
\fboxsep, 200 \framebox, 33
\fcolorbox, 41 frcursive (package), 43
Index 217

french option (algorithm2e), 186 height option (geometry), 31


\frontmatter, 64 \heightof, 203
helvet (package), 42
\Gamma, 87 Helvetica, 42
\gamma, 87 \henry, 94
\ge, 88 \herz, 94
GeoGebra, 109, 140 \hfill, 32, 36
geometry (package), 31 Histogramme, 124, 154
geometry \hline, 35
body, 31 hlines valeur (fillstyle), 104
bottom, 31 \hookrightarrow, 88
height, 31 \hphantom, 200
landscape, 40 \href, 56
left, 31 \hrulefill, 32
margin, 40 \hspace, 32
right, 31 \hspace*, 79
showframe, 31 \Huge, 26
top, 31 \huge, 26
width, 31 hyperref (package), 56
\geqslant, 88 \hypersetup, 56
\gg, 88
Gif, voir Format d’image ifthen (package), 206
\giga, 94 \ifthenelse, 206
Glossaire, voir Index \iint, 89
\gradingtable, 48 Image et antécédent, 121, 125, 151
template=default*, 48 \in, 88
Graduation logarithmique, semi-log, 118, \include, 56
148 \includegraphics, 35
Graduation trigonométrique, 117,119,147, \includeonly, 56
149 Index, 66
Graisse (police), 26 \index, 66, 67
Graphe d’une fonction, 119, 149 Indice, 87
Graphe pondéré, 129, 158 \inf, 89
graphicx (package), 35 infimum valeur (StepType). 122
\grid \infty, 88
step, 148 \input, 56
Grille, 118, 148 inputenc (package), 8
grow option (node), 159 inputenc
grow' option (node), 159 applemac, 8
\gt, 88 latin 1, 8
Guillemets à la française, 196 utf8, 8
Géométrie euclidienne, 110, 141 \inputminted. 183
\int, 89
\hat, 90 -interaction, voir nonstopmode
\headrulewidth, 39 Interligne, 32, 33
\hecto, 94 Intersection de courbes, 125
218 Index

Intersection de droites, 110, 141 Meft, 91


Intégrale, 86 \Leftarrow, 88
Intégrale (signe J), 89 Meftarrow, 88
Intérieur (notation), 90 Meftmark, 61
\invisible, 189 \Leftrightarrow, 88
Ion, 164 Lemme, 96
\iota, 87 Mengthtest, 206
itemize (env.), 29 Mens, 173
Meqslant, 88
J colonne (tabular), 72 level distance option (node), 159
Jpeg, Jpg, voir Format d’image levelsep option (pstree), 131
Jupyter, 184 Mewis, 165
Justifier du texte, 27 Lewis (structure de), 165
Igt option (tkzTablnit), 81
\kappa, 87 Liaison chimique, 164
\kelvin, 94 Lien cliquable, 56
\ker, 89 Mim, 89
Ket, 91 Miminf, 89
\kilo, 94 Limite, 89, 92
\kilogram, 94 Mimsup, 89
Kônigsberg (sept ponts), 128, 157 line width option (draw), 154
linearc option (pspolygon), 104
L colonne (tabular), 72 linecolor option (psdots), 103
1 colonne (tabular), 34, 73 linecolor option (psline), 103
label option (tkzAxeX), 146 linecolor option (pspolygon), 104
Mabel, 57, 92 linecolor=
label options option (tkzAxeX), 147 couleur, 103
labelFontSize option (psaxes), 123 linesnumbered option (algorithm2e), 186
labels option (psaxes), 116 linestyle option (psline), 103
Laboratoire (verrie), 166 linestyle option (pspolygon), 104
\Lambda, 87 linestyle=
Mambda, 87 dashed, 103
landscape (env.), 40 dotted, 103, 104
landscape option (geometry), 40 linewidth option (psline), 103
language option (Istset), 181 linewidth option (pspolygon), 104
\LARGE, 26 Minewidth, 34, 46
\Large, 26 Lissage d’une courbe, 120, 149
Marge, 26 Liste des figures, 68
Mastpage, 39 Liste des flottants, 68
lastpage (package), 39 Liste des tableaux, 68
\LaTeX, 9 Liste à puces, numérotée, 29
latinl option (inputenc), 8 listings (package), 181, 182
leg (package), 207 Mistof figures, 68
\ldots, 88 Mistoftables, 68
Me, 88 Ml, 88
left option (geometry), 31 Mn, 89
Index 219

locale=FR option (sisetup), 94 \micro, 94


\log, 89 \mïd, 88
Logarithmique (graduation), 118, 148 MiKTeX, 3
long option (psplotTangent), 120 \milli, 94
lower valeur (StepType), 122 \min, 89
Iscape (package), 40 minipage (env.), 36, 200
\lstinline,182 minted (env.), 183
\lstinline$range$, 182 minted (package), 22, 182, 183
Istlisting (env.), 181 \mintinline, 183
\lstset,181 mnode option (psmatrix), 129
language, 181 \mod, 89
\lt, 88 Mode non-stop, voir nonstopmode
Modes mathématiques, 86
m colonne (tabular), 71, 73 Modulo, 89
MacTeX, 4 \mole, 94
\mainmatter, 64 Molécule, 164
\makebox, 32, 33, 200 Morceaux (fonction définie par), 93
\makeidx, 66 \mu, 87
makeidx (package), 66 multicol (package), 38
Manuscrite (écriture), 43 \multicolumn, 71
\mapsto, 88 \multido, 112, 130
Marge (note en), 57 \multirow, 71, 75
Marges (taille des), 31 multirow (package), 71
margin option (geometry), 40 \multiSelec, 179
\marginpar, 57
mark option (draw), 154 \nabla, 88
mathabx (package), 90 \nano, 94
\mathbb, 88 \naput, 75
\mathbf, 88 npos, 129
\mathcal, 88 nrot, 107
\mathfrak, 88 \ncangle, 75
Mathpix, 99 \ncarc, 128
mathptmx (package), 42, 43 \ncline, 128
\mathring, 90 Arrowlnside, 128
\mathrm, 88 \neq, 88
mathrsfs (package), 88 \newcolumntype, 73
\mathscr, 88 \newcommand, 154, 194-196
Mathématiques dans un tableau, 73 \newcounter, 204
Matrice, 93 \newenvi rouillent, 196
matrix (env.), 93 \newlength, 201, 204
\matrix, 157 \newpage, 33
\max, 89 \newsavebox, 202
\medskip, 32 \newtheorem, 96, 97
\mega, 94 \newton, 94
\metre, 94 \nexists, 88
mhchem (package), 164 \ni, 88
220 Index

\node Opérateur mathématique, 90


-, 157 orig option (tkzAxeX), 146
->, 159 \ovalbox, 33
grow’, 159 \overbrace, 90
grow, 159 overlay option (tikzpicture), 76
level distance, 159 [Link], 2
sibling distance, 159 \overline, 90
sloped, 138 \overrightarrow, 90
nodesep option (pstree), 131 \overset, 92
Nombre (mise en forme), 28, 94 \owns, 88
nonstopmode, 18, 22
\normalsize, 26 p colonne (tabulât), 71, 73
Norme, 91 Package
Norme d’une matrice, 93 algorithm2e, 186
\not, 88 amsfonts, 88
Notation polonaise inversée, voir RPN amsmath, 86, 93
Notebook, voir Jupyter amsthm, 96
Notes de bas de page, 57 array, 71
\notin, 88 auto-pst-pdf, 10
np option (numprint), 28 automultiplechoice, 51
\np, 21, 28 avant, 42
npos option (naput), 129 babel, 27
nrot option (naput), 107 cale, 72, 203, 204
nrot= cancel, 99
:U, 107 chancery, 42
\nu, 87 chemfig, 164
\num, 94 circuitikz, 172
num blocks option (scratch), 180 colortbl, 74
\numprint, 28 concmath, 42
numprint (package), 28, 94 diagbox, 72
numprint endnotes, 57
np, 28 esvect, 90
Numérotation, 59 fancybox, 33
fancyhdr, 39, 60
o valeur (dotstyle), 103 fncychap, 58
offset option (peline), 107 fontenc, 8
\og, 196 fontspec, 27
\ohm, 94 freursive, 43
\0mega, 87 geometry, 31
\omega, 87 graphiex, 35
\only, 189 helvet, 42
\opadd, 98 hyperref, 56
\opdiv, 98 ifthen, 206
\operatorname, 90 inputenc, 8
\opmul, 98 lastpage, 39
\opsub, 98 leg, 207
Index 221

listings, 181, 182 \pageref, 57


Iscape, 40 \pageref{LastPage}, 39
makeidx, 66 \pagestyle, 60, 61
mathabx, 90 Papier millimétré, 118, 148
mathptmx, 42, 43 \paragraph, 28, 63
mathrsfs, 88 Paragraphe, 28
mhchem, 164 paralist (package), 29
minted, 22, 182, 183 \parallel, 88
multicol, 38 \parametricplot, 123
multirow, 71 \part, 28, 63
numprint, 28, 94 \partial, 88
paralist, 29 Partie, 28
pas-tableur, 179 pas-tableur (package), 179
pst-circ, 170 \pascal, 94
pst-eucl, 110, 125 \pause, 189
pst-labo, 166 Paysage (orientation), 40
pst-optic, 173 pblm (env.), 48
pstricks-add, 116 \pcline, 107
pstricks, 116 offset, 107
pythontex, 184, 199, 208 PdfBTÉX, 9
scratch3, 180 \per, 94
scratch, 180 \perp, 88
shadows, 159 \peta, 94
shapes, 159 \phantom, 200
siunitx, 94 \Phi, 87
tabularx, 72 \phi, 87
tabulary, 72 \Pi, 87
tabvar, 78, 80 \pi, 87
tasks, 30 \pico, 94
tcolorbox, 34, 97 \plot
textcomp, 21 smooth, 149
ticollege, 178 ycomb, 154
tipfr, 178 plotpoints option (psplot), 120
titlesec, 58 plotstyle option (dataplot), 124
tkz-base, 146 \pm, 88
tkz-euclide, 141 pmatrix (env.), 93
tkz-graph, 158 \pmod, 89
tkz-tab, 80 Png, voir Format d’image
wrapfig, 38 \pnode, 105, 106, 108
xargs, 196 \pod, 89
xcolor, 40, 74, 99 Polaire (repère), 123, 153
xlop, 98 Polaires (coordonnées), 103, 135
xsim, 46 polarplot option (psplot), 123
ymath, 90 Police, 26
Packages, 11 Polonais inversé, voir RPN
\pagebreak, 33 Polygone, 104, 136
222 Index

Préambule, 27 linewidth, 103


Preuve, 96 psmatrix (env.), 129
print = true option (xsimsetup), 49 \psmatrix
\printallsolutions, 49 colsep, 129
\printindex, 66 mnode, 129
\printsolutionstype, 49 rowsep, 129
Problèmes à la compilation, 18 \psPi, 120
Proceessus stochastique, 129, 158 pspicture (env.), 102
\prod, 89 pspicture* (env.), 102, 109
Produit (signe f])> 89 \psplot, 119, 123
proof (env.), 96 algebraic, 119, 125
Proportionnalité (Tableau de), 75 plotpoints, 120
Préambule, 6, 11 polarplot, 123
\psarc, 104 XpsplotTangent, 120
\psaxes, 116, 118, 123 long, 120
Dx, 117 \pspolygon, 104
axesstyle=polar, 123 fillcolor, 104
decimalSeparator, 117 fillstyle, 104
dx, 117, 119 linearc, 104
labelFontSize, 123 linecolor, 104
labels, 116 linestyle, 104
subticklinestyle, 123 linewidth, 104
subticksize, 116, 117 XpsPrintValue, 125
subticks, 116 décimais, 125
ticksize, 116, 117 \psStep
ticks, 116 StepType, 122
trigLabelBase, 117 pst-circ (package), 170
trigLabels, 117, 119 pst-eucl (package), 110, 125
xAxis, 116 pst-labo (package), 166
yAxis, 116 pst-optic (package), 173
\pscircle, 104 XpstBissectBAC, 110
\pscurve, 121 \pstGeonode, 110
\pscustom, 121, 122 XpstHomO, 110
\psdots, 103 XpstlnterFF, 125
dotsize, 103 XpstlnterLL, 110
dotstyle, 103 XpstLineAB, 110
linecolor, 103 XpstMediatorAB, 110
\psellipse, 104 XpstMiddleAB, 110
\psellipticarc, 104 Pstplus, 80, 130, 132
\psframebox, 102 \pstProjection, 110
\psgrid, 118 \pstree, 131
\Psi, 87 angle A, 132
\psi, 87 angleB, 132
\psline, 103 levelsep, 131
linecolor, 103 nodesep, 131
linestyle, 103 treemode, 131
Index 223

treesep, 131 \right, 91


pstricks (package), 116 \Rightarrow, 88
pstricks-add (package), 116 \rightarrow, 88
\pstRightAngle, 110 \rightharpoonup, 88
XpstSegmentMark, 110 \rightmark, 61
XpstTubeEssais, 166 \rnode, 75
\pswedge, 104 \Roman, 59
Puissance, 87 \roman, 59
Puissance de 10, 87, 94 \rotatebox, 41
pycode (env.), 185 Rotation, 106, 143
pyconsole (env.), 184 \rowcolor, 74
pythontex (package), 184, 199, 208 \rowcolors, 74
rowsep option (psmatrix), 129
QCM, 29 RPN, 113
\qquad, 32 \rput, 106
\quad, 32 \rput*, 106
Quadrillage, 118, 148 \rule, 32, 70
question (env.), 51 ruled option (algorithm2e), 186
questionmult (env.), 51 Réaction chimique, 164
Références croisées, 56, 57, 68, 96
R colonne (tabular), 72
r colonne (tabular), 34, 73 Saut de page, 33
\radians, 103 \savebox, 202
\raisebox, 41, 205 \savedata, 124
\rand, 207 \scalebox, 42
Rationnels Q, 88 scope (env.), 143
Rayer, 99 \scratch
\rdbrack, 91 num blocks, 180
\readdata, 124 scratch (package), 180
Réels R, 88 scratch3 (package), 180
\ref, 57, 92 \scriptsize, 26
Remarque en marge, 57 \scshape, 26
remember picture option (tikzstyle), 76 \second, 94
\renewcommand, 194 Secteur angulaire, 104, 136
Représentation de Lewis, 165 Section, 28
Repère du plan, 116 \section, 28, 63
repère du plan, 146 Segment, 103, 135
Repère logarithmique, 118, 148 \selecCell, 179
Repère polaire, 123, 153 Semi-logarithmique (graduation), 118,148
Repère semi-logarithmique, 118, 148 \setcounter, 63, 204
Repère trigonométrique, 117,119,147,149 \setdefaultenum, 30
\resizebox, 42, 205 \setdefaultleftmargin, 30
Reverse Polish Notation, voir RPN \setlength, 31, 32, 201, 204
\rho, 87 \setminus, 88
Riemann valeur (StepType), 122 \settodepth, 202
right option (geometry), 31 \settoheight, 202
224 Index

\settowidth, 201 \subsection, 28, 63


\sffamily, 26 \subset, 88
\shadowbox, 33 \substack, 92
shadows (package), 159 \subsubsection, 28, 63
shapes (package), 159 subticklinestyle option (psaxes), 123
-shell-escape, 10, 22, 183 subticks option (psaxes), 116
showframe option (geometry), 31 subticksize option (psaxes), 116, 117
\SI, 94 \sum, 89
\si, 94 \sup, 89
sibling distance option (node), 159 supremum valeur (StepType), 122
\Sigma, 87 \supset, 88
\sigma, 87 Surlignement, 90
Signes (tableau de), 78, 80 swap option (tkzAxeX), 146
\sim, 88 sympycode (env.), 209
\simeq, 88 -synctex, 22
\sin, 89 Système d’équations, 93
\sinh, 89 Système Inernational, 94
\sisetup, 94, 95 Séparateur de colonnes, 70
locale=FR, 94
siunitx (package), 94
Tl option (fontenc), 8
sloped option (node), 138
\tabcolsep, 70
\slshape, 26
table (env.), 68
\small, 26
\smallskip, 32 Table des matières, voir sommaire
smooth option (plot), 149 Tableau, 34, 70
solexo (env.), 48 Tableau de proportionnalité, 75
solid valeur (fillstyle), 104 Tableau de signes, 78, 80
solpblm (env.), 48 Tableau de variations, 78, 82
solution (env.), 48 Tableau flottant, 67
Sommaire, 63 Tableaux (liste des), 68
Somme (signe £), 89 \tableofcontents, 63
Soulignement, 90 \tableur, 179
Sous-section, 28 \tableur*, 179
\sqrt, 87 tabular (env.), 34, 78
square valeur (dotstyle), 103 tabularx (env.), 72
\star, 88 tabularx (package), 72
step option (grid), 148 tabulary (env.), 72
StepType option (psStep), 122 tabulary (package), 72
StepType= tabvar (package), 78, 80
Riemann, 122 Taille (police), 26
infimum, 122 \tan, 89
lower, 122 Tangente à une courbe, 120
supremum, 122 \tanh, 89
upper, 122 tasks (package), 30
Structure de Lewis, 165 \tau, 87
\subparagraph, 28, 63 tcolorbox (package), 34, 97
Index 225

template=default* option (gradingtable), tkz-euclide (package), 141


48 tkz-graph (package), 158
\tera, 94 tkz-tab (package), 80
TexLive, 3 \tkzAxeX, 146
Texmaker, 2 frac, 147
TeXnicCenter, 2, 3 label options, 147
TeXShop, 2, 4 label, 146
TeXstudio, 3 orig, 146
\text, 87 swap, 146
\textbackslash, 9 trig, 147
\textbf, 26 \tkzAxeXY, 146
textcomp (package), 21 \tkzAxeY, 146
\textsc, 26 \tkzDefPoint, 146
\textsf, 26 \tkzlnit, 146
\textsl, 26 \tkzTabInit, 80, 81
\texttt, 26 deltacl, 81
\the, 204 espcl, 81
thebibliography (env.), 66 Igt, 81
\thechapter, 59,62 \tkzTabLine, 81
\thepage, 39 \tkzTabVar, 82
\therand, 207 to option (draw), 157
\thesection, 59, 62 \to, 88
\Theta, 87 \tocdepth, 63
\theta, 87 \today, 28
\thispagestyle, 61 top option (geometry), 31
Théorème, 96 \totalheightof, 203
\TiC, 178 \tothe, 94
ticks option (psaxes), 116 \TR,131
ticksize option (psaxes), 116, 117 Translation, 106, 143
ticollege (package), 178 treemode option (pstree), 131
tikzpicture (env.), 134 treesep option (pstree), 131
\triangleleft, 88
bend angle, 157 \triangleright, 88
overlay, 76 trig option (tkzAxeX), 147
\tikzstyle, 156 trigLabelBase option (psaxes), 117
remember picture, 76 trigLabels option (psaxes), 117, 119
\tilde, 90 Trigonométrique (graduation), 117, 119,
\times, 88 147, 149
Times New Roman, 42, 43 \ttfamily, 26
\tiny, 26 \TVarraycolsep, 78
tipfr (package), 178 \TVarrowscolstretch, 78
\title, 188 \TVcenter, 78
\titlefonnat, 58 \TVstretch, 78
\titlepage, 188
titlesec (package), 58 \uncover, 189
tkz-base (package), 146 \underbrace, 90
226 Index

\underset, 92 x valeur (dotstyle), 103


Unité, 94 xargs (package), 196
upper valeur (StepType), 122 xAxis option (psaxes), 116
\upsilon, 87 xcolor (package), 40, 74, 99
\uput, 105, 106 xcolor
\url, 56 dvipsnames, 41
Url cliquable, 56 XeLMfeX, 9
\usebox, 202 \Xi, 87
\usemintedstyle, 183 \xi, 87
\usetheme, 188 xlop (package), 98
utf8 option (inputenc), 8 \xrightarrow, 92
xsim (package), 46
Valeur absolue, 91 \xsimsetup, 47, 49
\varepsilon, 87 print = true, 49
Variations (tableau de), 78, 82
\varnothing, 88 y Axis option (psaxes), 116
\varphi, 87 ycomb option (plot), 154
\varpi, 87 ymath (package), 90
\varrho, 87
\varsigma, 87 \zeta, 87
\varsubsetneq, 88
\vdots, 88
\vec, 90
Vecteur (notation), 90
\verb, 182, 186
Verbatim (env.), 186
Verrerie de laboratoire, 166
\vfill, 32
Virgule décimale, 87, 94
Xvisible, 189
vlined option (algorithm2e), 186
Vmatrix (env.), 93
vmatrix (env.), 93
\vphantom, 75, 200
\vspace, 32
\vv, 90
\vvvert, 91

\wedge, 88
\widehat, 90
\wideparen, 90
\widetilde, 90
width option (geometry), 31
wrapfig (package), 38

X colonne (tabulai-), 72
LaTeX pour les enseignants

Ce livre a été conçu pour répondre aux questions fréquentes des


débutants ainsi que pour servir d'aide aux utilisateurs plus expérimentés.
L'accent est mis sur des exemples pratiques qui sont pour la plupart issus
de situations concrètes dans l'enseignement. Le code de chacun d'eux
(plus de 400) est téléchargeable, et les exemples les plus complets sont
modifiables et compilables en ligne avec LaTeX, PdfLaTeX ou XeLaTeX.

Les deux premiers chapitres décrivent en détail comment bénéficier


d'un environnement de travail et comment compiler ses premiers
documents. Toutes les personnalisations sont possibles et les outils
pour les mettre en œuvre sont décrits, objectif par objectif. dans un
chapitre consacré à la mise en page. L'organisation particulière d'un
document de grande taille comme un livre ou une thèse fait l'objet d'un
traitement à part entière, tout comme la question des présentations
à projeter avec Beamer.
La part consacrée aux mathématiques est évidemment importante.
L'écriture de formules ou la création de tableaux de variations sont
présentées en détail, ainsi qu'avec PSTricks et TikZ, le tracé de figures
géométriques, de courbes ou de graphes.

Les sciences physiques, la chimie et l'informatique sont aussi abordées


via létude de packages officiels qui étendent les possibilités de LaTeX
et simplifient l'écriture pour les besoins particuliers dans ces domaines.

Nicolas Poulain est agrégé de mathématiques et intervient en formation


continue des enseignants depuis 75 ans dans les domaines du numérique
et des mathématiques. Dans c e c adre, il anime notamment chaque année
des formations LaTeX pour les enseignants débutants ou utilisateurs réguliers.

Vous aimerez peut-être aussi