Untitled
Untitled
LaTeX
pour les enseignants
Nicolas Poulain
lliDse
Collection Références sciences
[Link]
Avant-propos
« \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
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
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
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
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
Bibliographie 211
Index 213
hapitre 1
Installer un environnement... ou non
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}
\%Ç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»
* LOG FILE :
This <s XeTeX. Version 3.14159265-2.6-O.99998 (TeX Lrve 2017/Debianl
VViTurW— M /> Vl
Texmaker en action
2 Chapitre 1. Installer un environnement... ou non
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
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.
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.
r
1
2
3
4
\documentclass{article}
\begin{document}
Bonjour tout le inonde.
\end{document}
Bonjour tout le monde.
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.
\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}
\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 !
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}
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.
À© x
Replacer Ail
20 of 56
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}
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
Editeur
(les commandes sont séparées par T>
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.
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
1995
Liste de fournitures
Pour le bureau Pour l’ordinateur
— Pot à crayons — Boîte à disquettes
— Agrafeuse et agrafes — Boule de souris de rechange
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
Exercice 1 6 points
On note, pour tout réel x
1
A(æ) = 1 + e-®
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
$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
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$
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]
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.
— 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.
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
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
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\,}}
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)
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
Compil rapide
Bib(la)tex zzzjçpjlh évincé %.dvi ][d|I
[Link]
Makeindex 1 makeindex %.idx j!B Ij
I : (-Q fitplot|
Ajouter au PATH ; j
I XÇancel || |
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
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
\documentclass[a4paper,12pt]{article}
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.
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}.
111
eu \begin{center}
diam. Maecenas ligula
\end{center}
[...] non, mi .
diam. Maecenas ligula massa, varius,
semper congue, non, mi.
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.
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.
Préambule
8
\section♦{Préambule}
\section{Électricité} 2 Électricité
\subsection{Tension}
\subseetion{Intensité}
2.1 Tension
2.2 Intensité
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}
\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}
\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
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
I
D. Knuth Créateur de T^X.
\blgskip
Leslie Lamport Auteur de lATgX.
Leslie-Lamport \quad Auteur de \LaTeX.
m \vspace{lcm}
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
\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.
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).
\framebox[largeur][pos texte]{texte}
r^"| \usepackage{fancybox}
g \ovalbox{\makebox[4cm]{texte 1}}
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.
\usepackage{tcolorbox}
1
w \begin{tcolorbox} Une boîte tcolorbox avec
Une boîte tcolorbox
avec du texte dedans du texte dedans
\end{tcolorbox}
\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.
\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.
\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}
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
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
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}
A
U
\compo { Colonne de gauche :
Colonne de gauche: 50\%;
Colonne de droite : 50\#
50% ; Colonne de
>7 } {\imageTux} droite : 50%
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
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.
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-
\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
\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}
\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
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.}
B \usepackage{xcolor}
\colorbox{black}{\white Blanc sur fond noir} LBlanc* sur fond noir
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 :
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}
\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 :
g
\usepackage{graphicx}
Un \resizebox{lcm}{5mm}{mot}
un \scalebox{5}[2]{mot} Un IllOt un lioiim.
\scalebox{-l}[1]{miroir}.
\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}
\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.
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
\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
\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]
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).
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
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}
\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
\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}
\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
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
35
Préparation Saisie Notation Rapports
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
□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
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
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 •
■O
3 ’w
Q
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+
□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]
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
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
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
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)
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.
\usepackage{titlesec}
\renewcommand{\thechaptor}{\Alph{chapter }}
\t itlef ormat{\chapter}[frame]
{\bfseries}
{\ MakeUppercase{\chaptertitlename}\thechapter}
{lem}
{\Huge\centering}[\newpage]
-------------------- CHAPITRE A--------------------
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}
S
\chapter{Chimie}
Chimie
\section{Ions}
1.1 Ions
bla bla \nevpage
bla bla
bla bla \nevpage
bla bla
\end{document} 1
\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}
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
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
\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
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}
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}.
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.
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
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
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é.
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
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.
g Page
Page
Page
28
42
45
\index{Physique ! nucléaire}
\index{Physique}
\index{PhysiqueI relativiste}
nucléaire, 28
quantique, 20
relativiste, 45
g Page 120
Page 132
\index{AstrophysiqueI(}
\index{Astrophysique|)}
Astrophysique, 120-132
\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.
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).
B \begin{center}
\includegraphics{[Link]}
\caption{Tux le manchot} \label{tux}
\end{center}
\end{figure} Figure 5.1 — Tux le manchot
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}
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
\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}
\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
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.
^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
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
\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
\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}
\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}
\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-
\newcolumntype{lettre}[[Link].]{déf inition}
\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}
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}
\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
\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}
\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
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$}
\usepackage{pstricks-add}
\renewcommand{\arraystretch}{2}
\begin{tabular}{|1IcIcIr}
\cline{l-3}
\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}
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}
\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}
Tableaux de variations
\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
\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}\]
\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
n, ft, >«*• • ■
In 3
1 - 0 +
0
- I -
- 0 ♦
i
u________________ ___ ]
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
s
\usepackage{tkz-tab}
\begin{tikzpicture} x 3 4 5
\tkzTabInit{x / 1 , P / 1}
{3, 4, 5}
\tkzTabLine{ ,z,+ , } P 0 +
\end{tikzpicture}
\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}
Oî
\begin{tikzpicture}
co XtkzTabInit{x/l,f'(x)/2)
{ 0 , 1 3 }
Ô XtkzTabVar{+/5 , -D+/4/7 , -/6}
Lïl
\end{tikzpicture}
\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}
X — 00 -1 0 + 00
f'tf) 0
T
+ 00 + 00
f 0 -00 0
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
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.
\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.
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
Ru
o \forall x>0, \text{ on a } l/x>0 Vx >0, on a 1/x > 0
111 \]
The Comprehensive
Vs > 0, x 4- 2 e [0, +oo[
ï
\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
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)
l
3
x I \sun_{n-l}~{3} n ■ \int_-(l}''6 1 dt 2 n = T Idt
n=l
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
\renewcommand{\commande)-\operatorname{def }}
\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)))$
\usepackage{amsmath}
Important : A = A
Io* \underline{Important} :
$\overline{A} ■\overline{\overline{A}}$
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
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|
\]
\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
\]
\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}
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
B \usepackage{amsmath}
\[ \binom{n}{p} - \frac{n!}{p!(n-p)!} \]
0-
La commande \xrightarrow[auDessousFacultatif] {auDessus} permet d’affi
n!
pl(n — p)!
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
\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
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
\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}}
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}
\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
\newtheorem{thm}{Théorème}
Théorème 1. texte.
B
\newtheorem{coro}{Corollaire}
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}
\usepackage{amsthm}
B
*
2
\newtheorem{thm}{Théorème}
B
\begin{thm}\label{th-X}
texte. \end{thm} Théorème 2. texte.
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.
\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.
\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
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
123 3
en \usepackage{xlop}
g \opdiv{123}{3} 03 41
0
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
\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.
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
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
Pour visualiser les bords de la zone délimitée par pspicture, on peut dessiner
O ses contours : \psframebox{\begin{pspicture}...\end{pspicture}}.
B
£» \psframebox{ (4,1.5)
\begin{pspicture}(0,0)(4,1.5)
\pscircle(1,l){0.5}
\end{pspicture} }
(0,0)
\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}
\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.
\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}
\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
\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}
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
\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.
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
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}
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}
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
\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}
\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}
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
\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}
\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}
\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
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}
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
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
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
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].
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
\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
10.3 Courbes
Pour tracer le graphe d’une fonction, PSTricks propose la commande \psplot
dont la syntaxe générale est la suivante :
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 :
\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) }
\end{pspicture}
\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}
\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
\usepackage{pstricks-add}
\psset{unit-lcm}
\begin{pspicture}(-3,-1)(3,2)
7. un quadrillage sous les axes :
\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))}
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 :
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
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
Pour tracer des courbes paramétrées, PSTricks propose une commande adaptée.
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)
\end{pspicture*}
124 Chapitre 10. Courbes avec PSTricks
\usepackage{pstricks-add}
\begin{pspicture}(-3,-3)(3,3)
\psChart{44,28,19,5,4}{}{2}
\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
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}
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
\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}
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
\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
\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}
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
>
\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
\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
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
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. On pourrait ajouter Metapost et Asymptote mais ce sont plutôt des outils externes.
134 Chapitre 12. Constructions géométriques avec 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}.
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
\usepackage{tikz}
\begin{tikzpicture} 3
\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}
\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);
\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
\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);
\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
\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.
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}
B
— (4,0) — node[below]{L2} cycle;
L2
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
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
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}
\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
\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}
\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};
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
\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}
\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}
\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
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
\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.
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
\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
\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}
\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 :
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 :
\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
\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
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.
\usepackage{tikz,tkz-base}
\begin{tikzpicture}[scale-0 .5,>-latex]
\tkzlnit[xmin--2,xmax-2,ymin--2,ymax-2] y
\tkzDrawXY
\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
\usepackage{tikz , tkz-base}
\begin{tikzpicture}
\clip (-3.2,-1.2) rectangle (1.6,2.2);
\draw[step-.25cm,lightgray,very thin]
\usepackage{tikz}
\usetikzlibrary{patterns}
\begin{tikzpicture} [xscale«0.98,yscale»2.5]
B
— (1,0) — (-1,0) — cycle;
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}
\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
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
\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}
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};
\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
\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} ;\\ };
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);
\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]
I
\node[blanc] (F) at (3,-1)
[label-below right:$F$] 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}
\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
\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}; ------------------------------------
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}
\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
\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]
ï
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}
\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
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
Clic sur : pour obtenir le code engendré. Copiez-le et collez-le dans votre source L*TeX.
hapitre
Chimie
\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
I
£ \usepackage{mhchem}
\ce{CH4 + 202 -> C02 + 2H20} CH4 + 2 02
B
\usepackage{mhchem}
\ce{CH4 ->[+202] + 2 Oq
C02 + $\underset{\text{Eau}}{\ce{2H20}}$
ch4 CO2 + 2H2O
Eau
}
i \usepackage{mhchem}
\ce{Fe_{(s)} + Cu"2 -> Fe~2+{}_{(aq)} + Cu}
S \usepackage{mhchem}
\ce{C-C} ou \ce{C-C} ou \ce{C#C} C-C ou C=C ou C = C
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
\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
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
\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
\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] }]
\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
\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
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}
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
\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}
\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
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}
\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}
\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]
[Link]
[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^^
B \psset{unit-0.5}
\begin{pspicture*}(4,0)(15,6)
\lens[AB-2,focus-1.5,lensWidth-1]
\end{pspicture*}
\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*}
\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
O
2R 0 x
i
M
La bnbinr
parcourue par
UH r» Hlmni t
Code I
| Code j1
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 ;
[[Link]-i]
176 Chapitre 16. Physique
\pgfspectra[element=H]
\pgfspectra[element={H,He}]
-A/wv
pst-diffraction pour représenter des figures de diffraction par des trous de
différentes formes ;
RS
J4-.
J__
OfwtA On«i8 O'HmC
hapitre
\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}
ne*»*.
\usepackage{ticollege, tipfr}
\scalebox{0.3}{
r:
F. G O -æ,
» <= o & ;
* «■' O Œ» » :
! a • JOCL-Q « ;
\usepackage{ticollege}
\TiC[principal“cos]
\TiC [ style-number,principal“5,
colour key-uhite, colour text-black]
\TiC [style«=arrows]
\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).
a
\usepackage{pas-tableur}
\begin{tikzpicture} A B C !
I
\tabcolwidth{2.3cm} !
\tablineheight{6mm} 1
\tableur[2]{A-C}
\end{tikzpicture}
2
\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}
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..------ :
\usepackage{scratch3} 1
\begin{scratch}[num blocks]
3
! -
i
. ■ '.'.'i <:■. (1 ,)
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
\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
\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}
\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}
\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}
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
\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}
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.
| !
\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}
I import math
def aire(r):
return [Link]*r**2
aire(4)
»> def aire(r):
... return [Link]*r**2
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
\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]
\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. •
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 «$».
î
\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 ;
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
\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}
Boi
\begin{frame} % Transparent 2
I
\frametitle{Bonjour à tous}
Le cours commence maintenant.
Le cours commence maintenant.
\end{frame}
\end{document}
I me court 1 3 (evner 2019
18.2 Les couches d’un transparent 189
\documentclass [20pt]{beamer}
a
\beamertemplatetransparentcovered
\end{frame}
Ionisation :??
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.
\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
\usepackage{siunitx}
\begin{frame}
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}
\begin{tikzpicture} [scale-1]
7> Le repère
\draw[->, thick] (-3.5,0) — (1,0); \drav[->, thick] (0,-1) — (0,2);
\end{frame}
Commandes et environnements
personnalisés
\usepackage{amsfonts}
\usepackage{esvect}
\newcommand{\R}{\mathbb{R}}
\newcommand{\nom}{déf inition}
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.
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$
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
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...
\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}
}
\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...
\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]).
\newenvironment{nom}[narg][defaut]{début}{fin}
\newenvironment{extrait}{\og }{\fg{}}
\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
\[ \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}}}}
\]
8
\newlength\lrg
\settowidth\lrg{à trou} Texte à trou évolué
Texte à trou évolué \\ Texte évolué
Texte \makebox[\lrg]{\dotfill} évolué
\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é
\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........
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
\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
\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}
\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
\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.
\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.
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 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}
\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
\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} .
\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
\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}}
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
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
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}
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}
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
\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
\wedge, 88
\widehat, 90
\wideparen, 90
\widetilde, 90
width option (geometry), 31
wrapfig (package), 38
X colonne (tabulai-), 72
LaTeX pour les enseignants