Commit e66e576d authored by Alexandre Morlet's avatar Alexandre Morlet

V0.9 - Fichier .pdf ajouté pour aider la distribution

Merge branch 'pgf-tikz'

Conflicts:
	latex-phytem.tex
parents 3f23e6fc 99919a5e
build/*
tikz/*
tikz-src/*
tags
*.aux
*.fdb_latexmk
......
Ce document utilise la fonction d'externalisation de TikZ : il faut créer un dossier `tikz' dans le dossier de compilation. L'option --shell-escape (id. --enable-write18) de pdflatex est normalement passée par cette même fonction d'externalisation.
Ce document utilise la fonction d'externalisation de TikZ : il faut créer un dossier `tikz' dans le dossier de compilation. L'option --shell-escape (id. --enable-write18) de pdflatex est normalement passée par cette même fonction d'externalisation.
De par la multitude de figures (> 50) et leur complexité, il peut être nécessaire de compiler en plusieurs fois. Commenter à partir de la section sur la 3D, dans la partie Tikz, puis décommenter les figures les plus lourdes (i.e. jusqu'à la partie sur les graphes) une par une devrait résoudre le problème, en attendant une meilleure solution.
De par la multitude de figures (> 50) et leur complexité, il peut être nécessaire de compiler en plusieurs fois. Commenter à partir de la section sur la 3D, dans la partie Tikz, puis décommenter les figures les plus lourdes (i.e. jusqu'à la partie sur les graphes) une par une devrait résoudre le problème, en attendant une meilleure solution (la lourdeur semble surtout venir de pdflatex sous Windows ...).
......@@ -9,11 +9,11 @@
\usepackage{microtype}
% Bibliographie
\usepackage{natbib}
%\usepackage{natbib}
% En attendant de faire fonctionner correctement la bibliographie générale (en parallèle de l'exemple), je commente les lignes clés
%paquets linguistiques
\usepackage[frenchb]{babel}
\usepackage[english,frenchb]{babel}
%aspect général des pages
\usepackage{geometry}
......@@ -51,6 +51,16 @@
\usepackage[colorlinks=true,linkcolor=black,urlcolor=cyan,citecolor=blue]{hyperref}
\usepackage[titletoc,title,toc,page]{appendix} %personnalise les titres des annexes
%pgf et tikz
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{external}
\usetikzlibrary{trees}
\usetikzlibrary{shapes}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{decorations.markings}
\usepgfplotslibrary{polar}
%commentaires
\usepackage{comment}
......@@ -61,6 +71,7 @@
\usepackage{epigraph} % épigraphes
\usepackage{xspace} % espaces
\usepackage{eurosym} % €€€
\usepackage{textcomp}
%----------------------------------------------------------------
%-----MACRO INSTRUCTIONS ET COMMANDES----------------------------
......@@ -71,16 +82,21 @@
%options pour la table de matières
\setcounter{tocdepth}{2}
\renewcommand{\appendixtocname}{Annexes}
\renewcommand{\appendixpagename}{Annexes}
\renewcommand{\appendixpagename}{\centering Annexes}
%mathématiques
\everymath{\displaystyle} %conserve une taille normale même inclus dans du texte
%pgf et tikz
\pgfplotsset{compat=newest}
%\tikzexternalize[prefix=tikz/,shell escape=--enable-write18]
\tikzexternalize[prefix=tikz/,shell escape=-shell-escape]
%configuration de listings
\lstdefinestyle{myLatexStyle}{
language=[LaTeX]TeX,
basicstyle=\small\ttfamily,
backgroundcolor=\color{lightgray}, % J'ai changé, GreenYellow c'est pas très joli. J'aimerais un bleu-gris léger mais LightBlue ou LightSlateBlue fonctionnent pas, alors que GreenYellow ouais. C'est peut-être parce que j'essaie sous Windows.
backgroundcolor=\color{lightgray},
numbers=left, numberstyle=\tiny, stepnumber=1, numbersep=5pt,
commentstyle=\color{red},
showstringspaces=false,
......@@ -107,6 +123,12 @@
\renewcommand\SX@Info{}
\makeatother
%ajout des chemins d'input
\makeatletter
\providecommand*{\input@path}{}
\def\input@path{{./tikz-src/}}
\makeatother
% Je suis tellement mégalo que je me crée une commande perso pour mes commentaires ! L'avantage
% que mes commentaires peuvent être désactivés en remplaçant \enteotrue par \enteofalse. Je peux
% créer des commandes pour vous aussi si vous voulez !
......@@ -176,7 +198,7 @@
\maketitle
\coffee{1}
\coffee{1} % Broken ? :'(
\thispagestyle{fancy}
......@@ -222,7 +244,7 @@ Ce document a pour but de présenter de façon assez complète les bases du lang
\section*{Version}
La dernière version de ce document ainsi que ses fichiers sources sont disponibles sur le Gitlab du projet, à l'adresse \url{adresse.adresse}. Les (sous-) sections actuellement vides sont en cours de rédaction.
Cette plateforme vous permet également de suggérer des modifications et corrections.
Cette plate-forme vous permet également de suggérer des modifications et corrections.
\section*{Licence}
\includegraphics[scale=0.3]{images/by-nc-sa} % On remarquera que je fais ce que j'ai dit qu'il fallait pas faire dans la partie includegraphics :-) Quoique l'image de base fait 12ko, pas 12Mo.
......@@ -1400,6 +1422,8 @@ Vous savez désormais créer un tableau simple, sans fusion de cases. Pour des f
\subsection{Les environnements flottants : \texttt{figure} et \texttt{table}}
\label{subsec:flottants}
Nous allons maintenant voir comment encapsuler les images et les tableaux dans des environnements flottants.
\subsubsection{Mettre en place les environnements}
......@@ -2001,17 +2025,17 @@ Voici un exemple (le texte a été généré à l'aide de l'extension \verb|lips
\section{Mathématiques avancées}
\label{sec:advmath}
\starttouille Ceci sont des pistes de choses qui pourraient se trouver dans cette partie, mais je ne compte pas la rédiger, du moins pas dans un futur proche. Je pourrais m'y atteler après avoir fini Bibtex, je vous la laisse en attendant.\\
le "displaystyle" (amsmath), tfrac et dfrac (apparence également des sommes affectée, avec bornes qui passent sur le côté)\\
mathtools paquet potentiellement plus puissant que amsmath ?\\
amsmath a des flèches extensibles (xleftarrow \& xrightarrow)\\
Théorème et définitions : amsthm, ntheorem (second apparemment mieux).\\
Paquet dirac/macros\closetouille
%\starttouille Ceci sont des pistes de choses qui pourraient se trouver dans cette partie, mais je ne compte pas la rédiger, du moins pas dans un futur proche. Je pourrais m'y atteler après avoir fini Bibtex, je vous la laisse en attendant.\\
%le "displaystyle" (amsmath), tfrac et dfrac (apparence également des sommes affectée, avec bornes qui passent sur le côté)\\
%mathtools paquet potentiellement plus puissant que amsmath ?\\
%amsmath a des flèches extensibles (xleftarrow \& xrightarrow)\\
%Théorème et définitions : amsthm, ntheorem (second apparemment mieux).\\
%Paquet dirac/macros\closetouille
\subsection{Ecrire les équations sur plusieurs lignes}
Les environnements \verb|equation| et \verb|displaymath| (celui définit par \verb|\[ \]|, pour plus d'informations sur ces environnements voir au \ref{subsec:envmath}) sont limités à l'écriture sur une seule ligne.\\
Pour écrire des méthématiques sur plusieurs lignes vous pouvez utilisez l'un des environnements lités ci-dessous. Ils nécessitent l'extension \verb|amsmath| pour fonctionner.
Pour écrire des mathématiques sur plusieurs lignes vous pouvez utilisez l'un des environnements lités ci-dessous. Ils nécessitent l'extension \verb|amsmath| pour fonctionner.
\begin{itemize}
\item \verb|multline| est le plus basique, il permet d'écrire une grosse équation sur plusieurs lignes en utilisant des retours à la ligne
......@@ -2052,14 +2076,15 @@ Voici un exemple pour chacun d'eux :
\label{subsec:array}
\startaurel array, pmatrix, bmatrix, Bmatrix, vmatrix \closeaurel
%\startaurel array, pmatrix, bmatrix, Bmatrix, vmatrix \closeaurel
\subsection{Ecrire des théorèmes comme un vrai prof de maths}
\startaurel amsthm ou ntheorem, a voir lequel est mieux \closeaurel
%\startaurel amsthm ou ntheorem, a voir lequel est mieux \closeaurel
\section{\texttt{siunitx} : le paquet du physicien}
\label{sec:siunitx}
\begin{quote}
Physical quantities have both numbers and units, and each physical quantity should be expressed as the product of a number and a unit.%\\ \null\hfill --- Joseph Wright
\end{quote}
......@@ -2451,9 +2476,7 @@ Enfin et surtout, si vous aimez la personnalisation et que vous n'avez pas peur
\section{La programmation~\LaTeX{}, ou comment devenir un chaman}
\label{sec:macro}
\startenteo Alors là, je vais me faire un plaisir de contribuer.\closeenteo
Une des chose qui fait la grande puissance de \LaTeX{} et qui peut vous épargner un temps considérable, c'est la possibilité de créer vos propres commandes (ou macros, en \LaTeX{} ces deux notions sont équivalents \startaurel j'ai encore un léger doute sur le fait qu'il y ait une différence subtile que je n'ai pas encore comprise, mais pour l'instant faisons comme si \closeaurel). \\
Une des chose qui fait la grande puissance de \LaTeX{} et qui peut vous épargner un temps considérable, c'est la possibilité de créer vos propres commandes (ou macros, en \LaTeX{} ces deux notions sont équivalents).% \startaurel j'ai encore un léger doute sur le fait qu'il y ait une différence subtile que je n'ai pas encore comprise, mais pour l'instant faisons comme si \closeaurel). \\
Dans cette section nous allons donc voir comment créer des commandes et des environnements simples.
\subsection{Créer ses macros : la syntaxe}
......@@ -2483,7 +2506,7 @@ Maintenant considérons l'exemple d'une commande avec deux arguments. L'appel au
\label{subsubsec:macrosdirac}
Nous allons voir dans cette section quelques exemples de macros mathématiques utiles en physique : la notation de Dirac.\\
L'extension \verb|braket| fournit des commandes qui a peu près la même chose mais qui ont une taille fixe. Nous allons ici créer une notation s'adaptant au maximum de situations.
L'extension \verb|braket| fournit des commandes qui font a peu près la même chose mais qui ont une taille fixe. Nous allons ici créer une notation s'adaptant au maximum de situations.
Lorsque vous définissez une macro faisant intervenir un environnement mathématique, il est préférable de l'encapsuler dans \verb|ensuremath|, qui contraindra \LaTeX{} à s'assurer que vous utilisez la macro en mode mathématique.
......@@ -2518,37 +2541,1170 @@ Il reste à définir définir le \textit{produit scalaire hermitien} et les \tex
%\newcommand{\psh}[2]{\ensuremath{\langle #1|#2\rangle}\xspace} % \psh{a}{b}
%\newcommand{\mean}[1]{\ensuremath{\langle #1\rangle}\xspace} %\moy{A}
\starttouille
xspace s'assure que les caractères sont correctement espacés\\
définir `vect' en tant que overrightarrow\{\} est stylé aussi\\
globalement, ce sont des trucs qui vont bien avec les maths avancées \closetouille
%\starttouille
%xspace s'assure que les caractères sont correctement espacés\\
%définir `vect' en tant que overrightarrow\{\} est stylé aussi\\
%globalement, ce sont des trucs qui vont bien avec les maths avancées \closetouille
%
%\startaurel Je vois pas trop la différence avec ou sans xspace, tu es sur que c'est utile ? \closeaurel
%
%\starttouille \texttt{xspace} devient une espace, sauf si le caractère suivant est déjà une espace ou une accolade (e.g. groupe vide). Du coup j'ai essayé, et en effet ça fait aucune différence. Sans doute parce que le right rangle s'impose, avec juste un rangle y a pas autant d'espacement même avec xspace.\\
%Du coup, puisque c'était du copié collé d'internet, je plaide la flemmardise. \closetouille
\startaurel Je vois pas trop la différence avec ou sans xspace, tu es sur que c'est utile ? \closeaurel
%\subsection{Les structures conditionnelles}
%
%\startaurel On en parle ou pas ? A part le coup de nos commentaires dans ce document j'ai du mal à imaginer une utilité \closeaurel
%
%\startenteo Mieux vaut ne pas en parler, c'est trop avancé pour la portée de ce document. On pourra faire d'autres documents pour ça quand on aura créé \TeX nici[ENS] !\closeenteo
\starttouille \texttt{xspace} devient une espace, sauf si le caractère suivant est déjà une espace ou une accolade (e.g. groupe vide). Du coup j'ai essayé, et en effet ça fait aucune différence. Sans doute parce que le right rangle s'impose, avec juste un rangle y a pas autant d'espacement même avec xspace.\\
Du coup, puisque c'était du copié collé d'internet, je plaide la flemmardise. \closetouille
\subsection{Les structures conditionnelles}
\pagebreak
\startaurel On en parle ou pas ? A part le coup de nos commentaires dans ce document j'ai du mal à imaginer une utilité \closeaurel
\part{Des graphiques vectoriels avec le duo PGF/Ti$k$Z}
\startenteo Mieux vaut ne pas en parler, c'est trop avancé pour la portée de ce document. On pourra faire d'autres documents pour ça quand on aura créé \TeX nici[ENS] !\closeenteo
Cette partie constitue une introduction aux extensions Ti$k$Z et PGF.\\
Ces extensions permettent de créer des graphes sophistiqués et qui s'intègrent naturellement dans votre document PDF car vectoriels.\\
Voici un petit exemple pour vous mettre l'eau à la bouche :
\begin{figure}[h!]
\input{diff-elecmuon.tex}
\caption{Un processus de QED : la diffusion électron-muon par échange de photon.}
\end{figure}
\pagebreak
\section{Introduction}
\subsection{À quoi sert Ti$k$Z ?}
La première question que vous devez certainement vous poser est : \og quel intérêt ? Il y a déjà \verb+\includegraphics+ pour faire ça \fg{}.\\
Et bien l'intérêt est triple :
\begin{itemize}
\item vous pourrez créer vos graphiques \textit{à l'intérieur de \LaTeX{}} et éviter de passer par un logiciel de retouche d'image ;
\item certains logiciels comme \verb=gnuplot= ou \verb=Geogebra= permettent d'exporter leurs graphiques en code Ti$k$Z\footnote{Et notez que bien d'autres comme \verb=Pyplot= ont une communauté active qui a développé des interfaces efficaces.}. La transition entre l'exploitation des données et leur mise en forme est donc immédiate ;
\item les graphes obtenus sont vectoriels\footnote{Il y a deux façons de coder des images : avec une grille de pixels (format matriciel) ou avec des primitives géométriques (format vectoriel). L'avantage de cette seconde méthode est que l'image obtenue ne \textit{pixelise} pas lors d'un zoom (la qualité est pour ainsi dire infinie).}, comme le reste de votre PDF.
\end{itemize}
\medbreak
L'utilisation de Ti$k$Z est cependant plus difficile que celle de \verb=\includegraphics= et demande un certain temps d'apprentissage\footnote{Mais si vous êtes arrivés jusque là c'est que la motivation n'est pas un problème !}.
\subsection{Présentation de Ti$k$Z et PGF}
Les extensions \texttt{Tikz} et \texttt{PGF} ont étés crées par Till Tantau, également créateur de \texttt{Beamer}. La dernière version du duo a une documentation de plus de 1000 pages, ce qui en fait l'une des extensions \LaTeX{} les plus élaborées à ce jour.\\
Le nom \texttt{PGF} signifie \textit{Portable Graphical Format}, par analogie avec le format PDF, le but étant d'intégrer naturellement des graphiques dans ce format. \texttt{PGF} est le moteur graphique qui réalise la compilation ; il travaille directement avec le compilateur \verb=pdflatex=.\\
Le nom \texttt{TikZ} a été inventé en suivant la tradition de l'acronyme récursif\footnote{Un acronyme qui se contient lui-même.} \texttt{GNU} : \textit{GNU is not UNIX}. Ici, \texttt{TikZ} signifie : \textit{Ti$k$Z ist kein Zeichenprogramm} (en français : \og Ti$k$Z n'est pas un programme de dessin \fg{}).\\
Le nom est en réalité un avertissement à l'utilisateur, car même si \texttt{TikZ} possède de très nombreuses fonctionnalités graphiques, le fait qu'il soit intégré dans \LaTeX{} lui fait hériter de ses avantages (positionnement précis, excellente typographie, utilisation de macros, \dots) mais aussi de tous ses défauts (le code ne donne pas d'aperçu du résultat, de petits changements demandent une nouvelle compilation, il n'y a pas d'ajustement automatique des courbes, \dots). Le rôle de \texttt{TikZ} est de définir toutes les macros et les environnements utilisables dans \LaTeX{} pour piloter \texttt{PGF}.
\subsection{Charger les extensions et les bibliothèques}
Les extensions \texttt{PGF} et \texttt{TikZ} se chargent à l'aide de \verb+\usepackage{tikz}+ -- ce dernier appelant automatiquement \texttt{PGF}.
Les bibliothèques spécifiques à \texttt{TikZ} se chargent à l'aide de la commande \verb+\usetikzlibrary{<mabibliothèque>}+ dans le préambule.
\subsection{Environnement et commandes}
L'environnement dans lequel se construit un graphe \texttt{TikZ} est \verb=tikzpicture=. Cet environnement ouvre un interpréteur qui répondra à la syntaxe \texttt{TikZ}.\\
Voyons un exemple basique qui nous permettra d'étudier cette dernière :
\tikzexternaldisable
\begin{LTXexample}[width=0.3\textwidth]
\centering
\begin{tikzpicture}
\draw (0,0) circle (2);
\node at (0,0) {\textbf{Cercle} de rayon $R=2$};
\end{tikzpicture}
\end{LTXexample}
\tikzexternalenable
\medskip
Les commandes sont, comme à l'accoutumée, annoncées par une contre-oblique (\verb|\|) ; mais contrairement à la syntaxe \LaTeX{}, elles se finissent toutes par un point-virgule (\verb|;|) ! En cas d'oubli (et on les oublie très facilement), vous aurez une belle erreur : \textit{\foreignlanguage{english}{Did you forget a semicolon?}}, qui risque même de faire planter le compilateur\footnote{Parfois même au point d'être obligé d'arrêter le processus à la main.}, celui-ci ne comprenant pas comment interpréter la commande suivante alors qu'il est déjà en train d'en traiter une. La rigueur est donc de mise.\\
On peut également remarquer que l'interpréteur \texttt{TikZ} fournit des environnements textuels dans lesquels la syntaxe \LaTeX{} est parfaitement valable (voir l'exemple du texte dans le cercle).
\subsection{Les systèmes de coordonnées}
Pour arriver à manipuler les commandes \texttt{TikZ}, il est nécessaire de comprendre les notations des coordonnées des points.\\ Celles-ci seront toujours notées entre parenthèses.
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
\multirow{2}*{En 2 dimensions} & Cartésien avec axes $x$ et $y$ & \texttt{(x,y)} \\
\cline{2-3}
& Polaire avec rayon $r$ et angle $\theta$ (degrés, sens direct) & \texttt{($\theta$:r)}\\
\hline
En 3 dimensions & Cartésien avec axes $x$, $y$ et $z$ & \texttt{(x,y,z)} \\
\hline
\end{tabular}
\end{center}
\medbreak
Il n'y a pas de coordonnées cylindriques ou sphériques en 3d. Si elles vous sont indispensables référez-vous à la documentation : il est possible de définir son système de coordonnées.
\subsection{Quelques commandes de base}
\subsubsection{Les chemins}
La commande la plus importante de \texttt{TikZ} est \verb=\draw=, qui permet d'effectuer tous les tracés en les notant comme des chemins. La syntaxe est assez intuitive :
\begin{center}\verb=\draw[options] (point) tracé (point) tracé (point) ... ;=\end{center}
Voici un petit exemple :
\begin{LTXexample}[preset=\centering]
\begin{tikzpicture}
\draw[red] (0,0) -- (0,2) -- (2,1) ;
\end{tikzpicture}
\end{LTXexample}
\subsubsection{Les nœuds}
\label{subsubsec:noeud}
Les nœuds sont des cadres placés à certains points et dans lesquels on peut écrire du texte (toutes les commandes \LaTeX{} sont autorisées).\\
Il y a deux possibilités pour placer un nœud :
\begin{itemize}
\item soit arbitrairement avec la commande "\verb=\node[position relative] at (point) {texte};=" ;
\item soit sur un chemin, en écrivant "\verb=node[position relative] {texte}=" à l'endroit approprié.
\end{itemize}
Les positions relatives possibles sont : \verb|above|, \verb|below|, \verb|left|, \verb|right|, \verb|above left|, \verb|above right|, \verb|below left|, \verb|below right|.
Lorsque le nœud est placé sur un tracé, il est également possible de préciser à quel endroit du tracé le situer avec les options suivantes : \verb|at start|, \verb|very near start|, \verb|near start|, \verb|midway|, \verb|near end|, \verb|very near end|, \verb|at end|.
L'exemple suivant résume ces commandes :
\begin{LTXexample}[preset=\centering]
\begin{tikzpicture}
\node at(1,1) {$\bullet$};
\node[right] at(1,1) {coucou};
\draw (0,0) node[below] {A} -- node[near end] {>}
(2,0) node[below] {B};
\end{tikzpicture}
\end{LTXexample}
Si le tracé est incliné, on peut imposer au nœud de suivre le tracé de la même façon avec l'option \verb=sloped=.
Finalement, la position du nœud est encore ajustable avec les options \verb%xshift=<valeur>% et \verb%yshift=<valeur>%, où \verb=<valeur>= est une grandeur positive ou négative donnée dans les conventions \LaTeX{} (par exemple \verb=2pt= ou \verb=-1.2cm=).
\subsubsection{Nommer les points}
Pour plus de clarté dans l'écriture du code source ou pour éviter d'avoir à écrire plusieurs fois des coordonnées, il est possible de donner un nom aux points avec la commande \verb=\coordinate (nom) at (point);=\\. Ces noms ne servent qu'à l'écriture du fichier source ; pour afficher le nom des points, il faut utiliser un nœud.
Voici un exemple :
\begin{LTXexample}[preset=\centering,width=0.3\textwidth]
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (2,2);
\draw (A) -- node[above,sloped]{$\overrightarrow{AB}$} (B);
\end{tikzpicture}
\end{LTXexample}
\section{Des figures simples}
\subsection{Les tracés de base}
Le tableau suivant présente les tracés de base et leur syntaxe. Il est suivi par des exemples résumant ces commandes.\\
La seule vraie difficulté est la notation des arcs, qui est peu intuitive. Prenez le temps d'étudier l'exemple.
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
Tracé & Paramètres & Syntaxe \\
\hline
\multirow{2}*{Segment $[MN]$} &absolu : $M = (a,b)$ et $N=(c,d)$ & \verb=(a,b) -- (c,d)= \\
\cline{2-3}
& relatif : $M=(a,b)$ et $N=(a+x,b+y)$ & \verb=(a,b) -- ++(x,y)=\\
\hline
Cercle & centre $O=(a,b)$, rayon $r$ & \verb=(a,b) circle (r)= \\
\hline
Arc de cercle & point de départ $(a,b)$, angle de départ $u$, & \verb=(a,b) arc(u:v:r)=\\
& angle d'arrivée $v$, rayon $r$ & \\
\hline
Rectangle ABCD & $A=(x,y)$, $C=(z,w)$ & \verb=(x,y) rectangle (z,w)= \\
\hline
Ellipse & centre $O=(a,b)$, axe vertical $v$, axe horizontal $h$ & \verb=(a,b) ellipse (v and h)=\\
\hline
Courbe de Bézier & point de départ $(a,b)$, point d'arrivée $(c,d)$ & \verb=(a,b) .. controls (i,j)=\\
& points de contrôle $(i,j),(x,y)$ & \verb=and (x,y) .. (c,d)= \\
\hline
\end{tabular}
\end{center}
\medbreak
Le rectangle peut être défini à partir de n'importe quel couple de points diagonalement opposés.\\
Les courbes de Bézier acceptent un nombre arbitraire de points de contrôle ; ils doivent être séparés par \verb=and=.
\begin{LTXexample}[preset=\centering]
\begin{tikzpicture}
\draw[blue] (0,0) -- (2,0) arc(180:0:2);
\node[above left] at (6,0) {$A$};
\draw (6,0) -- ++(-1,-1) rectangle ++(-2,-2);
\end{tikzpicture}
\end{LTXexample}
Dans l'exemple précédent, le rectangle a été défini en coordonnées relatives avec la notation \verb=++()=.\\
Cette astuce est très efficace quand on ne sait plus quelles sont les coordonnées exactes. La référence est le dernier point tracé.
\begin{LTXexample}[preset=\centering]
\begin{tikzpicture}
\draw[red] (0,0) ellipse (1.5 and 0.5);
\draw[blue] (0,0) ..
controls (0,1) and (0,2) .. (1,1);
\end{tikzpicture}
\end{LTXexample}
\subsection{Chemin fermé}
Bien que l'on puisse simplement fermer un chemin par quelque chose comme \verb=\draw (A)--(B)--(C)--(A)=, il est préférable d'utiliser l'instruction \verb=cycle=.\\
En effet, \texttt{TikZ} s'attache alors à faire la jonction au pixel près, ce qui permet d'utiliser des méthodes spécifiques aux chemins fermés comme \verb=\fill=, qui fait la même chose que \verb=\draw= en définissant en plus une surface que l'on peut colorier :
\begin{LTXexample}[preset=\centering]
\begin{tikzpicture}
\draw (0,0) -- (2,2) -- (2,0) -- cycle;
\fill (4,0) -- (6,2) -- (6,0) -- cycle;
\end{tikzpicture}
\end{LTXexample}
\subsection{Grille}
Il est possible d'afficher la grille, ce qui rend les coordonnées visibles.\\
La syntaxe est la même que celle du rectangle, mais avec \verb=grid[options]=.\\
Les options utiles sont \verb%very thin, color=gray!20%, car on veut en général que la grille n'altère pas la lecture de la figure. On peut de plus choisir le pas de la grille avec \verb=step=.
Pour afficher les nœuds de texte clairement par-dessus la grille, on peut utiliser \verb%node[fill=white]%.
\begin{LTXexample}[preset=\centering]
\begin{tikzpicture}
\draw[very thin,color=gray!20] (-0.5,-0.5)
grid[step=0.5] (5.5,2.5);
\draw (0,0) -- (2,2) -- (2,0) -- cycle;
\fill (3,0) -- (5,2) -- (5,0) -- cycle;
\node[fill=white,left] at (0,0) {O};
\node[fill=white] at (3,2) {A};
\end{tikzpicture}
\end{LTXexample}
\emph{Nota Bene} : \verb=grid= présente parfois des problèmes vis-à-vis de l'ordre de tracé. Il est en général préférable que ce soit votre premier tracé, afin d'être sûr que les autres se tracent par-dessus.
\subsection{Axes et repère}
Malheureusement, \texttt{TikZ} ne possède pas d'options permettant de tracer automatiquement les repères et leurs axes.\\
Vous pouvez soit les tracer à la main avec \verb=\draw= et un peu d'imagination, soit vous référer à la section \ref{pgfplot} pour découvrir une extension qui fait ce travail.
\subsection{Translation, rotation, homothétie}
Nous avons déjà vu comment translater des nœuds dans la section~\ref{subsubsec:noeud} : il suffit d'utiliser les options \verb%xshift=<valeur>% et \verb%yshift=<valeur>% dans la commande \verb=\draw=, \verb=\node=, ou toute autre commande servant à tracer un objet.
Il est également possible d'effectuer des rotations avec l'option \verb%rotate=<angle>% (en degrés, sens direct). Utiliser cette option lors de l'ouverture de l'environnement \texttt{tikzpicture} effectue une rotation de l'ensemble de la figure.
Enfin, on peut effectuer une homothétie avec l'option \verb%scale=<valeur>%, également utilisable sur toute la figure, afin de changer sa taille.
Finissons par un exemple de transformations appliquées à toute la figure :
\begin{LTXexample}[preset=\centering]
\begin{tikzpicture}[rotate=45,scale=1.5]
\draw[very thin,color=gray!20] (-0.5,-0.5)
grid[step=0.1] (1.5,1.5);
\draw (0,0) rectangle (1,1);
\node[below] at (0,0) {0};
\node[above] at (1,1) {A};
\end{tikzpicture}
\end{LTXexample}
\subsection{Fenêtre d'affichage : \textit{clipping}}
On peut réduire la fenêtre d'affichage à une certaine fraction de la figure construite avec l'instruction \verb=\clip=. Elle s'appliquera à tous les objets situés après son appel. \\
Les instructions placées juste après \verb=\clip= doivent conduire à la construction d'un chemin fermé (avec la même syntaxe que \verb=\draw=). Ce chemin délimitera la fenêtre d'affichage. Voici un exemple avec et sans \emph{clip} :
\begin{LTXexample}[preset=\centering]
\begin{tikzpicture}
\draw[very thin,color=gray!20] (-0.5,-0.5)
grid[step=0.1] (1.5,1.5);
\node at (0.5,0.5) {A};
\draw (0,0) rectangle (1,1);
\draw[dashed] (0,0) circle (0.5); %le futur clip
\end{tikzpicture}
\end{LTXexample}
\begin{LTXexample}[preset=\centering]
\begin{tikzpicture}
\node at (0.5,0.5) {A};
\clip (0,0) circle (0.5);
\draw[very thin,color=gray!20] (-0.5,-0.5)
grid[step=0.1] (1.5,1.5);
\draw (0,0) rectangle (1,1);
\end{tikzpicture}
\end{LTXexample}
Notez que dans le premier exemple, le nœud est placé après \verb=grid= afin d'optimiser le tracé, et que dans le second exemple il est avant \verb=\clip= afin d'échapper au \emph{clipping}. L'ordre des commandes est important !
\section{Styles, couleurs et décorations}
Toutes les commandes de tracé possèdent de multiples options permettant de personnaliser les figures dans leurs moindres détails.
Nous présentons ici quelques une des options de tracé les plus utiles. Cependant, gardez à l'esprit que la documentation de \texttt{TikZ} fait plus de \num{1000} pages et qu'un tri drastique a donc été effectué. Par conséquent, si vous ne trouvez pas votre bonheur ici, nous ne pouvons que vous conseiller d'aller lire la documentation.
\subsection{Style des traits}
\label{subsec:tikzstyle}
Les options suivantes sont applicables à toute commande qui trace des lignes (jusqu'ici vous connaissez donc \verb=\draw= et \verb=\fill=). On peut bien sur combiner les options compatibles entre elles.
\medbreak
\begin{center}
\renewcommand{\arraystretch}{1.2}
\begin{tabular}{|c|c|c|}
\hline
Utilité & Option & Rendu \\
\hline
\multicolumn{2}{|c|}{<sans options>} & \tikz \draw (0,0) -- (2,0); \\
\hline
\hline
\multirow{6}*{Epaisseur} & \verb=[ultra thin]= & \tikz \draw[ultra thin] (0,0) -- (2,0);\\
\cline{2-3}
& \verb=[very thin]= & \tikz \draw[very thin] (0,0) -- (2,0);\\
\cline{2-3}
& \verb=[thin]= & \tikz \draw[thin] (0,0) -- (2,0);\\
\cline{2-3}
& \verb=[thick]= & \tikz \draw[thick] (0,0) -- (2,0);\\
\cline{2-3}
& \verb=[very thick]= & \tikz \draw[very thick] (0,0) -- (2,0);\\
\cline{2-3}
& \verb=[ultra thick]= & \tikz \draw[ultra thick] (0,0) -- (2,0);\\
\hline
\hline
\multirow{2}*{Aspect} & \verb=[dotted]= & \tikz \draw[dotted] (0,0) -- (2,0);\\
\cline{2-3}
& \verb=[dashed]= & \tikz \draw[dashed] (0,0) -- (2,0);\\
\hline
\hline
\multirow{6}*{Tracé de flèches} & \verb=[->]= & \tikz \draw[->] (0,0) -- node[below] {} node[above] {} (2,0); \\
\cline{2-3}
& \verb=[<-]= & \tikz \draw[<-] (0,0) -- node[below] {} node[above] {} (2,0);\\
\cline{2-3}
& \verb=[<->]= &\tikz \draw[<->] (0,0) -- node[below] {} node[above] {} (2,0); \\
\cline{2-3}
& \verb=[|->]= &\tikz \draw[|->] (0,0) -- node[below] {} node[above] {} (2,0); \\
\cline{2-3}
& \verb=[->>]= &\tikz \draw[->>] (0,0) -- node[below] {} node[above] {} (2,0); \\
\cline{2-3}
& \verb=[>->]= &\tikz \draw[>->] (0,0) -- node[below] {} node[above] {} (2,0); \\
\hline
\hline
\multirow{2}*{Style des pointes de flèches} & \verb%[>=stealth,->]% & \tikz \draw[>=stealth,->] (0,0) -- node[below] {} node[above] {} (2,0);\\
\cline{2-3}
& \verb%[>=latex,->]% & \tikz \draw[>=latex,->] (0,0) -- node[below] {} node[above] {} (2,0);\\
\hline
\multirow{2}*{Double trait} & \verb=[double]= & \tikz \draw[double] (0,0) -- (2,0);\\
\cline{2-3}
& \verb%[double distance=5pt]% & \tikz \draw[double distance=5pt] (0,0) -- (2,0);\\
\hline
\end{tabular}
\end{center}
Le changement de style des pointes de flèches est bien entendu valable pour tous les types de flèches.\\
Si ces options ne vous suffisent pas, il existe une bibliothèque \texttt{TikZ} appelée \verb=arrow= qui possède plus de pointes de flèches\footnote{Rappel : les bibliothèques \texttt{TikZ} se chargent avec \verb|\usetikzlibrary{}|.}.
\subsection{Couleurs}
\label{subsec:tikzcolor}
Pour colorier un tracé, il existe deux solutions : soit on met directement la couleur en option (\verb=[<couleur>]=), soit on règle la nuance de la couleur (\verb%[color=<couleur>!<valeur entre 0 et 100>]%).
Les couleurs possibles sont toutes les couleurs de base définies par \LaTeX{} : \verb|red|,\verb|green|,\verb|blue|,\verb|cyan|,\verb|yellow|,\verb|magenta|,\verb|black|,\verb|white|,\verb|gray|. Si nécessaire, on peut utiliser l'extension \verb=xcolor= pour plus de choix.
%\startaurel Ajouter ici une référence à une section où on parle des couleurs \closeaurel
Voici quelques exemples :
\begin{LTXexample}[preset=\centering]
\begin{tikzpicture}
\node[red,left] at (0,0) {A};
\draw[green] (0,0) -- (2,0);
\node[color=red!45,right] at (2,0) {B};
\draw[color=cyan!17] (3,0) circle (0.5);
\node[cyan,right] at (3.5,0) {C};
\end{tikzpicture}
\end{LTXexample}
Dans le cas des chemins fermés, on peut colorier la figure avec \verb%[fill=<couleur>]%. Cette option est également applicable aux nœuds, et colorie alors leur arrière plan (voir la section \ref{subsec:nodeadv}) :
\begin{LTXexample}[preset=\centering]
\begin{tikzpicture}
\draw[blue,fill=magenta!35] (0,0) -- (1,0)
-- (1,1) -- cycle;
\node[red,fill=green] at (2,0.5) {A};
\end{tikzpicture}
\end{LTXexample}
\emph{Nota Bene} : il est nécessaire de définir la couleur des tracés \emph{avant} la couleur de remplissage.
\subsection{Opacité}
Certains tracés (comme \verb=grid=) sont transparents par défaut, et d'autres (comme \verb=\fill=) sont opaques. Lorsqu'on utilise de tels tracés, il est important de mettre les commandes dans le bon ordre : un tracé opaque couvrira tous les tracés précédents, un tracé transparent non. Il est possible de modifier l'opacité des tracés avec l'option \verb%[opacity=<valeur entre 0 et 100]%.
\subsection{Les décorations}
L'outil \verb=decorate= est extrêmement complet, et possède un si grand nombre d'options qu'il est absolument impossible de toutes les présenter ici.\\
Ce qui suit n'est qu'un avant-goût de ce qu'il permet de faire avec deux ou trois exemples, sans plus d'explications. Il est recommandé de lire la documentation si l'utilisation des outils de décoration vous intéresse.
Pour utiliser les décorations, il faudra charger la bibliothèque \verb=decorations= et/ou une de ses sous bibliothèques.\\
Pour les exemples présentés ci-dessous, vous aurez besoin de :
\begin{center}\verb=\usetikzlibrary{decorations.pathmorphing}= \\ \verb=\usetikzlibrary{decorations.markings}=\end{center}
%Etant un physicien de formation je vais vous présenter comme exemple une manière de réaliser les lignes de diagramme de Feynman :
Utilisons comme exemple une manière de réaliser les lignes de diagrammes de Feynman :
\begin{LTXexample}[preset=\centering,width=0.35\textwidth]
\begin{tikzpicture}
\draw[decorate, decoration={snake}, draw=red]
(0,0) -- (3,0) node[right] {Photon};
\draw[postaction={decorate}, decoration={markings,
mark=at position .55 with {\arrow[draw=blue]{>}}}
,draw=blue] (0,-1) -- (3,-1) node[right] {Fermion};
\draw[decorate, decoration={coil, amplitude=4pt,
segment length=5pt}, draw=magenta]
(0,-2) -- (3,-2) node[right] {Gluon};
\end{tikzpicture}
\end{LTXexample}
\subsection{Créer des styles génériques}
Un style générique permet d'utiliser un set d'options compliquées plusieurs fois sans surcharger les options et sans tout réécrire.\\
On les définit avec la syntaxe suivante (en dehors d'un tracé) :
\begin{center}
\verb%\tizkset{%\\
\verb% monpremierstyle/.style={<options>},%\\
\verb% monsecondstyle/.style={<options>},%\\
\verb% ...%\\
\verb%}%
\end{center}
Par exemple, pour tracer les diagrammes de l'exemple précédent, nous pouvons commencer par définir des styles, puis les utiliser de la façon suivante :
\begin{LTXexample}[preset=\centering,width=0.35\textwidth]
\tikzset{
photon/.style={decorate,
decoration={snake}, draw=red},
fermion/.style={postaction={decorate},
decoration={markings,
mark=at position .55 with {\arrow[draw=blue]{>}}}
,draw=blue}
}
\begin{tikzpicture}
\draw[fermion] (0,0) --node[below]{Fermion} (5,0);
\draw[photon] (1,0) arc (180:0:1.5);
\node[below] at (2.5,1.5) {Photon};
\end{tikzpicture}
\end{LTXexample}
\section{Représenter des fonctions et des données avec pgfplots}
\label{sec:pgfplots}
Nous ne verrons pas ici les fonctionnalités natives de \verb=PGF/TikZ= concernant le tracé de données ; il existe une extension de \verb=pgf= spécialement conçue pour aider au tracé de données et c'est elle que nous allons étudier. Elle se charge avec les commandes :
\begin{center}
\verb=\usepackage{pgfplots}=\\
\verb%\pgfplotsset{compat=newest}%
\end{center}
La seconde ligne précise que l'on charge la dernière version de l'extension. Son absence peut provoquer un avertissement de la part du compilateur.
\subsection{Un repère et des axes}
\label{pgfplot}
Pas de représentation de fonctions sans axes à l'échelle ! C'est pourquoi nous allons commencer par voir comment tracer des axes.\\
Au cours de cette partie, nous allons construire un système d'axes étape par étape, afin d'introduire progressivement toutes les options utiles.
\subsubsection{La base}
Les axes sont un environnement de \verb=pgfplots= ; il suffira de placer la figure entre \verb=\begin{axis}= et \verb=\end{axis}=.\\
Les options de l'environnement sont toutes les caractéristiques des axes. Parmi les options les plus communes, on trouve :
\begin{center}
\verb|title=<titre>| \\
\begin{tabular}{c|c}