diff --git a/latex-phytem.tex b/latex-phytem.tex index 350f6b33b695561d822ab219bd161903f99e3f78..024ceb06dd6bae4793fd7526ddd22062e76b25f5 100644 --- a/latex-phytem.tex +++ b/latex-phytem.tex @@ -8,7 +8,7 @@ \usepackage{lmodern} %paquets linguistiques -\usepackage[frenchb]{babel} +\usepackage[english,frenchb]{babel} %aspect général des pages \usepackage{geometry} @@ -1552,50 +1552,48 @@ Je sais pas encore à quel point ca peut être intéressant, c'est juste un truc \pagebreak -\part{Des graphiques vectoriels avec le duo PGF/TIKZ} +\part{Des graphiques vectoriels avec le duo PGF/Ti$k$Z} -Cette partie constitue une introduction aux extensions TikZ et PGF.\\ -Ces langages permettent de créer des graphes sophistiqués qui s'intègrent naturellement dans votre PDF avec une qualité vectorielle.\\ +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} +\caption{Un processus de QED : la diffusion électron-muon par échange de photon.} \end{figure} \section{Introduction} -\subsection{A quoi sert TikZ ?} -La première question que vous devez certainement vous poser est : \textit{quel intérêt ? Il y a déjà} \verb+\includegraphics+ \textit{pour faire ça}.\\ +\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= exportent leurs graphiques en code TikZ\footnote{Et notez que bien d'autres comme \verb=Pyplot= ne le font pas nativement mais ont une communauté active qui a développé des exporteurs 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 pixellise pas lors d'un zoom (la qualité est pour ainsi dire infinie)}, de même que le reste de votre PDF donc + \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 TikZ 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 !} +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 TikZ et PGF} +\subsection{Présentation de Ti$k$Z et PGF} -Les extensions \verb=TikZ= et \verb=PGF= ont étés crées par Till Tantau\footnote{Qui est aussi le créateur de Beamer}. La dernière version du duo a une documentation de plus de 1000 pages, ce qui en fait l'une des extensions~\TeX{} les plus élaborées à ce jour.\\ -Le nom \verb=PGF= signifie \textit{Portable Graphical Format}, par analogie avec le format PDF, le but étant d'intégrer des graphiques naturellement dans ce format. \verb=PGF= est le moteur graphique qui réalise la compilation, il travaille directement avec le compilateur \verb=pdfLaTeX=.\\ -Le nom \verb=TikZ= a été inventé en suivant la tradition de l'acronyme récursif\footnote{Un acronyme qui se contient lui-même} \verb=GNU= : "GNU is not UNIX", ici \verb=TikZ= signifie "TikZ ist kein Zeichenprogramm" (en français "TikZ n'est pas un programme de dessin").\\ -Le nom est en réalité un avertissement à l'utilisateur, car en effet si \verb=TikZ= intègre de très nombreuses fonctionnalités graphiques, le fait qu'il soit intégré dans~\TeX{} lui fait hériter de ses avantages (positionnement précis, excellente typographie, utilisation de macros,...) mais aussi de tous ses défauts (le code ne donne pas d'aperçu du résultat, de petits changements demandent une recompilation, il n'y a pas d'ajustement automatique des courbes,...). Le rôle de \verb=TikZ= est de définir toutes les macros et les environnements utilisables dans~\LaTeX{} pour piloter \verb=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 \verb=PGF= et \verb=TikZ= se chargent à l'aide de \verb+\usepackage{tikz}+. -Vous pourrez également avoir besoin de charger des bibliothèques spécifiques de \verb=TikZ=. \\Et pour une fois ceci ne se fait pas avec \verb=\usepackage{}= mais avec \verb+\usetikzlibrary{mabibliothèque}+. +Les extensions \texttt{PGF} et \texttt{TikZ} se chargent à l'aide de \verb+\usepackage{tikz}+ -- ce dernier appelant automatiquement \texttt{PGF}. -\startenteo Je ne suis pas sûr de bien comprendre... Le package \texttt{tikz.sty} charge lui-même \texttt{pgf.sty}, il n'y a donc pas besoin de le répéter. Quant à ce \textit{warning}, je ne l'ai jamais rencontré dans mon utilisation basique de Ti$k$Z.\closeenteo \\ -\startaurel C'est parce que j'ai écrit des conneries :), je voulais parler de \verb=pgfplotset=, comme moi je l'inclus toujours avec TikZ je me suis embrouillé, c'est une extension à \verb=pgf/tikz= (qui sont bel et bien fournis ensembles) qui permet de faire certains trucs plus facilement, comme par exemple des axes, ou des échelles logarithmiques. Et là il y a bien un warning qui sort. Mais du coup je reparlerais de \verb=pgfplotset= quand je parlerais des plots. \closeaurel +Les bibliothèques spécifiques à \texttt{TikZ} se chargent à l'aide de la commande \verb+\usetikzlibrary{}+ dans le préambule. \subsection{Environnement et commandes} -L'environnement dans lequel est construite un graphe \verb=TikZ= est \verb=tikzpicture=, cette environnement ouvre un interpréteur qui répondra à la syntaxe \verb=TikZ=.\\ -Voyons un exemple basique qui nous permettra d'étudier la syntaxe : +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] @@ -1606,33 +1604,36 @@ Voyons un exemple basique qui nous permettra d'étudier la syntaxe : \end{tikzpicture} \end{LTXexample} \tikzexternalenable +\medskip - -Les commandes sont aussi annoncées par un "\textbackslash", mais contrairement à la syntaxe~\LaTeX{} les commandes se finissent toutes par un ";" ! En cas d'oubli (et on les oublie très facilement) vous aurez une belle erreur "\textit{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. Donc mettez TOUJOURS un ";" à la fin de vos commandes !\\ -Ensuite on peut remarquer que l'interpréteur \verb=TikZ= fournit des environnements textuels dans lesquels la syntaxe~\LaTeX{} est parfaitement valable (voir l'exemple du texte dans le cercle). +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 commander \verb=TikZ= il est nécéssaire de comprendre les notations des coordonnées des points.\\ Celles-ci seront toujours notées entre parenthèses \verb=()=. +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$ & (x,y) \\ + \multirow{2}*{En 2 dimensions} & Cartésien avec axes $x$ et $y$ & \texttt{(x,y)} \\ \cline{2-3} - & Polaire avec rayon $r$ et angle orienté $\theta$ (en degrés)& ($\theta$:r)\\ + & 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$ & (x,y,z) \\ + 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 un système de coordonnées. + +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 \verb=TikZ= est \verb=\draw=, qui permet d'effectuer tous les tracés en les notant comme des chemins. La syntaxe est assez intuitive :\\ -\verb=\draw[options] (point) tracé (point) tracé (point) ... ;=\\ +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} @@ -1641,17 +1642,21 @@ Voici un petit exemple : \end{LTXexample} -\subsubsection{Les noeuds} +\subsubsection{Les nœuds} \label{subsubsec:noeud} -Les noeuds sont des cadres placés à certains points dans lesquels on peut écrire du texte (toutes les commandes \LaTeX{} sont autorisées).\\ -Il y a deux possibilités pour placer un 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é + \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} -\medbreak -L'exemple ci dessous résume ces méthodes + +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$}; @@ -1661,24 +1666,13 @@ L'exemple ci dessous résume ces méthodes \end{tikzpicture} \end{LTXexample} -Les positions relatives possibles sont :\\ -\verb=above, below, right, left, above left, above right, below left, below right= +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=. -Lorque le neud 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, very near start, near start, midway, near end, very near end, at end=\\ -Lorqu'on tracé est penché on peut imposer au noeud de se pencher de la même façon avec l'option \verb=sloped= - -Finalement on peut si besoin encore ajuster la position en déplaçant le noeud avec les options \verb%xshift=% ou \verb%yshift=%, où \verb== est une grandeur positive ou négative donnée dans les conventions \LaTeX{} (par exemple \verb=2pt= ou \verb=-1.2cm=). +Finalement, la position du nœud est encore ajustable avec les options \verb%xshift=% et \verb%yshift=%, où \verb== 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 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);=\\ -Rq : ces noms ne servent que dans l'écriture du fichier source, pour afficher le nom des points il faut utiliser un noeud. - -\startenteo Tu ne précises pas qu'on peut définir un noeud avec \verb|\draw ... node| et lui donner un nom en même temps ?\closeenteo\\ -\startaurel J'avais complètement zappé qu'on pouvait faire ça, c'est vrai que c'est pratique. Bonne idée. \closeaurel\\ -\startaurel Après réflexion je pense plutôt en parler dans une section consacrée à l'utilisation "avancée" des noeuds, parce que là tout de suite on voit pas trop l'utilité de nommer les noeuds, ça sert surtout quand on veut relier des noeuds entre eux pour faire des graphes \closeaurel +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] @@ -1696,6 +1690,7 @@ Voici un exemple : 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 \\ @@ -1714,15 +1709,13 @@ La seule vraie difficulté est la notation des arcs, qui est peu intuitive. Pren 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 controle $(i,j),(x,y)$ & \verb=and (x,y) .. (c,d)= \\ + & points de contrôle $(i,j),(x,y)$ & \verb=and (x,y) .. (c,d)= \\ \hline \end{tabular} +\end{center} \medbreak -Remarquez que le rectangle peut être défini à partir de n'importe quel couple de points diagonalements opposés.\\ -Les courbes de Bézier acceptent un nombre arbitraire de points de controle, ils doivent être séparés par \verb=and=. - -\startenteo Au premier abord, on a du mal à comprendre pourquoi il y a deux exemples pour le rectangle, ce n'est pas super clair je trouve...\closeenteo\\ -\startaurel Mouais effectivement, j'avais juste la flemme d'écrire une phrase, mais bon ce sera quand même plus clair \closeaurel +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} @@ -1732,7 +1725,9 @@ Les courbes de Bézier acceptent un nombre arbitraire de points de controle, ils \end{tikzpicture} \end{LTXexample} -Remarquez que 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é. +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); @@ -1744,7 +1739,8 @@ Remarquez que le rectangle a été défini en coordonnées relatives avec la not \subsection{Chemin fermé} -Bien qu'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 \verb=TikZ= s'attache alors à faire la jonction au pixel près et on peut 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 : +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; @@ -1754,11 +1750,11 @@ Bien qu'on puisse simplement fermer un chemin par quelque chose comme \verb=\dra \subsection{Grille} -On peut tracer une grille afin de rendre les coordonnées visibles.\\ +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=. +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 noeuds de texte clairement par dessus la grille on peut utiliser \verb%node[fill=white]% +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) @@ -1770,19 +1766,19 @@ Pour afficher les noeuds de texte clairement par dessus la grille on peut utilis \end{tikzpicture} \end{LTXexample} -ATTENTION ! \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 sur que les autres se tracent par dessus. +\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 \verb=TikZ= ne possède pas d'options permettant de tracer automatiquement les repères et leurs axes.\\ -Vous pouvez donc 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. +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 noeuds à la section \ref{subsubsec:noeud}, il suffit d'utiliser les options \\ \verb%xshift=% et \verb%yshift=% dans la commande \verb=\draw=, \verb=\node= ou une autre commande servant à tracer un objet. +Nous avons déjà vu comment translater des nœuds dans la section~\ref{subsubsec:noeud} : il suffit d'utiliser les options \verb%xshift=% et \verb%yshift=% 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=%, remarquez qu'il est possible d'effectuer une rotation sur l'ensemble de la figure en utilisant cette option lors de l'ouverture de l'environnement \verb=tikzpicture=. +Il est également possible d'effectuer des rotations avec l'option \verb%rotate=% (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=%, également utilisable sur toute la figure, afin de changer sa taille. +Enfin, on peut effectuer une homothétie avec l'option \verb%scale=%, é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] @@ -1795,13 +1791,10 @@ Finissons par un exemple de transformations appliquées à toute la figure : \end{tikzpicture} \end{LTXexample} +\subsection{Fenêtre d'affichage : \textit{clipping}} -\startaurel Je sais pas s'il faut mettre d'autres exemples, comme on peut utiliser ces options dans à peu près toutes les commandes tikz je manque d'inspiration, est-ce que ça suffit comme ça ? \closeaurel -\starttouille Tu présentes deux commandes et tu les appliques dans un exemple, je pense que cela suffit. Au pire, tu peux tracer une droite inclinée à 30\textdegree, comme ça on voit la rotation relative au rectangle en plus de la rotation totale. Par contre, peut-être dire en toutes lettres que la rotation se fait dans le sens canonique ? (même si l'exemple est clair là dessus) \closetouille -\subsection{Fenètre d'affichage : clipping} - -On peut réduire la fenêtre d'affichage a une certaine fraction de la figure construite avec l'instruction \verb=\clip=. Il 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 clip : +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) @@ -1820,14 +1813,13 @@ Les instructions placées juste après \verb=\clip= doivent conduire à la const \draw (0,0) rectangle (1,1); \end{tikzpicture} \end{LTXexample} -Notez que dans le premier exemple le noeud 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 clipping.\\ -L'ordre des commandes est important ! +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 une figure dans ses moindres détails. +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 \verb=TikZ= fait plus de 1000 pages et qu'un tri drastique a donc été éffectué. Donc si vous ne trouvez pas votre bonheur ici, je ne peux que vous conseiller d'aller lire la documentation. +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} @@ -1844,7 +1836,7 @@ Les options suivantes sont applicables à toute commande qui trace des lignes (j \multicolumn{2}{|c|}{} & \tikz \draw (0,0) -- (2,0); \\ \hline \hline - \multirow{6}*{Epaisseur} & \verb=[[ultra thin]= & \tikz \draw[ultra thin] (0,0) -- (2,0);\\ + \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} @@ -1857,7 +1849,7 @@ Les options suivantes sont applicables à toute commande qui trace des lignes (j & \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);\\ + \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 @@ -1885,20 +1877,18 @@ Les options suivantes sont applicables à toute commande qui trace des lignes (j \hline \end{tabular} \end{center} -Le changement de style des pointes de flèches est bien sur valable pour tous types de flèches.\\ -Si ces options ne vous suffisent pas il existe une bibliothèque \verb=TikZ= appellée \verb=arrow= qui possède plus de pointes de flèches (mais souvenez-vous les bibliothèques tikz se chargent avec \verb=\usetikzlibrary{arrow}= et non \\ \verb=\usepackage=) +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 y a deux solutions : soit on met directement la couleur en option : \verb=[]=, soit on veut régler la nuance de la couleur et on utilise \verb%[color=!]%. +Pour colorier un tracé, il existe deux solutions : soit on met directement la couleur en option (\verb=[]=), soit on règle la nuance de la couleur (\verb%[color=!]%). -Les couleurs possibles sont toutes les couleurs de base définies par \LaTeX{} :\\ -\verb=red, green, blue, cyan, yellow, magenta, black, white, gray=\\ -On peut également utiliser si besoin les couleurs ajoutées par l'extension \verb=xcolor=. +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 +%\startaurel Ajouter ici une référence à une section où on parle des couleurs \closeaurel Voici quelques exemples : \begin{LTXexample}[preset=\centering] @@ -1911,7 +1901,7 @@ Voici quelques exemples : \end{tikzpicture} \end{LTXexample} -Enfin dans le cas des chemins fermés on peut colorier la figure avec \verb%[fill=]%. Cette option est également applicable aux noeuds, et colorie alors leur arrière plan (voir la section \ref{subsec:nodeadv}) : +Dans le cas des chemins fermés, on peut colorier la figure avec \verb%[fill=]%. 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) @@ -1919,29 +1909,23 @@ Enfin dans le cas des chemins fermés on peut colorier la figure avec \verb%[fil \node[red,fill=green] at (2,0.5) {A}; \end{tikzpicture} \end{LTXexample} -ATTENTION il est nécessaire de définir la couleur des tracés AVANT la couleur de remplissage. +\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 également possible de modifier l'opacité des tracés avec l'option \\ -\verb%[opacity=},%\\ \verb% monsecondstyle/.style={},%\\ \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 : +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, @@ -1984,24 +1970,37 @@ fermion/.style={postaction={decorate}, \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, en effet 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. Je vous invite donc à la charger avec : +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 charge les dernières fonctionnalités. Son absence peut provoquer un \textit{warning} de la part du compilateur. +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, progressivement et en voyant toutes les options utiles. +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 par exemple :\\ -\verb%[title=, xlabel=, ylabel=, xmin=,xmax=%\\ -\verb%,ymin=,ymax=]% +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=| \\ +\begin{tabular}{c|c} + + + + \verb|xlabel=| & \verb|ylabel=| \\ + + \verb|xmin=| & \verb|ymin=|\\ + + \verb|xmax=| & \verb|ymax=|\\ + + \end{tabular} +\end{center} Voici un exemple de mise en place d'axes : \begin{LTXexample}[preset=\centering,width=0.60\textwidth] @@ -2020,8 +2019,8 @@ Voici un exemple de mise en place d'axes : \subsubsection{Changer la taille et définir un repère orthonormé} -Il y a également des options permettant de définir la taille du graphique : -\verb%[height=,width=]%\\ +Il existe également des options permettant de définir la taille du graphique : +\verb%[height=,width=]%.\\ Une autre option utile est \verb%[scale only axis=]%, qui permet de changer d'échelle uniquement les unités de tracé et de laisser les textes (descriptions d'axes, légendes, noeuds) inchangés. On peut de plus définir des axes orthonormés avec l'option \verb%[axis equal=]% : @@ -2045,17 +2044,16 @@ On peut de plus définir des axes orthonormés avec l'option \verb%[axis equal=< \subsubsection{Personnaliser le repère et ajouter une grille} \label{subsubsec:repgrid} -Si les graduations des axes par défaut ne conviennent pas, on peut les choisir avec les options :\\ -\verb%[xtick=,ytick=]%.\\ -Si les valeurs ont une progression arithmétique, on peut définir le set avec les deux premières valeurs et la dernière, ainsi \verb%[xtick={0,1,...,5}]% a la même signification que \verb%[xtick={0,1,2,3,4,5}]%.\\ -On peut ajouter aussi une graduation secondaire avec \verb%minor x tick num={}% où la chiffre en question indique le nombre de graduations. +Si les graduations par défaut des axes ne conviennent pas, on peut les choisir avec les options : +\begin{center}\verb%[xtick=,ytick=]%.\end{center} +Si les valeurs ont une progression arithmétique, on peut définir le jeu avec les deux premières valeurs et la dernière, ainsi \verb%[xtick={0,1,...,5}]% a la même signification que \verb%[xtick={0,1,2,3,4,5}]%.\\ +On peut ajouter aussi une graduation secondaire avec \verb%minor x tick num={}% où le nombre en question indique le nombre de graduations. -Si vous utilisez le paquet \texttt{siunitx} (section~\ref{sec:siunitx} page~\pageref{sec:siunitx}), il est possible d'exporter ses paramètres sur l'affichage des nombres à PGF avec la commande \verb|\SendSettingsToPgf| (inclus notamment le choix de point ou virgule en séparateur des décimales, l'espacement des milliers, \ldots). À chaque fois que \verb|\pgfmathprintnumber| est appelé (ce qui est le cas pour les axes), la personnalisation globale de \texttt{siunitx} s'appliquera. +Si vous utilisez le paquet \texttt{siunitx} (section~\ref{sec:siunitx} page~\pageref{sec:siunitx}), il est possible d'exporter ses paramètres sur l'affichage des nombres à PGF avec la commande \verb|\SendSettingsToPgf| (inclus notamment le choix du point ou de la virgule en séparateur des décimales, l'espacement des milliers, \dots). À chaque fois que \verb|\pgfmathprintnumber| est appelé (ce qui est le cas pour les axes), la personnalisation globale de \texttt{siunitx} s'appliquera. -On peut en outre changer l'aspect du repère pour retrouver une forme plus habituelle avec deux flèches à l'aide des options :\\ -\verb%[axis x line=, axis y line=]%, où \verb== vaut au choix\\ \verb%left,right,bottom,top% ou \verb%center%. +On peut en outre changer l'aspect du repère pour retrouver une forme avec deux flèches, plus habituelle, à l'aide des options : \verb%[axis x line=, axis y line=]%, où \verb== vaut au choix \verb|left|, \verb|right|, \verb|bottom|, \verb|top| ou \verb|center|. -Enfin il est possible d'ajouter une grille coïncidant avec les graduations choisies (qui est donc préférable au \verb=grid= de \verb=TikZ=). Il y a deux type de grilles : la grille \verb%major% et la grille \verb%minor%, qui coïncident chacune avec le type de graduation correspondant.\\ +Enfin, il est possible d'ajouter une grille coïncidant avec les graduations choisies (qui est donc préférable au \verb=grid= de \texttt{TikZ}). Il y a deux type de grilles : la grille \verb%major% et la grille \verb%minor%, qui coïncident chacune avec le type de graduation correspondant.\\ On peut au choix utiliser l'option \verb%grid=% pour modifier toutes les grilles, ou travailler axe par axe avec les options du type \verb%xmajorgrids=% et \verb%xminorgrids=%. @@ -2082,20 +2080,20 @@ On peut au choix utiliser l'option \verb%grid=% pour modi \end{tikzpicture} \end{LTXexample} -\subsubsection{Personnaliser les labels} +\subsubsection{Personnaliser les étiquettes} \label{subsubsec:persolabels} -Les labels (les titres des axes définis par \verb%xlabel% et \verb%ylabel%) sont en réalité des noeuds. Ce qui signifie que vous pouvez leur appliquer toutes les options et transformations valables pour un noeud, ainsi que le placement "\verb=at=". +Les étiquettes (les titres des axes définis par \verb%xlabel% et \verb%ylabel%) sont en réalité des nœuds. Cela signifie que vous pouvez leur appliquer toutes les options et transformations valables pour un nœud, ainsi que le placement (\verb=at=). -Pour ajouter des options de noeud à un label il faut utiliser cette syntaxe :\\ -\verb%[xlabel style={},ylabel style={}]% +Pour ajouter des options de nœud à une étiquette, il faut utiliser la syntaxe suivante : +\begin{center}\verb%[xlabel style={},ylabel style={}]%\end{center} -Pour placer le label avec "\verb%at%", il en général plus pratique d'utiliser les \textit{coordonnées cs} : c'est un système de coordonnées dans lequel l'extrémité inférieure gauche de la figure est le point $(0,0)$ et l'extrémité supérieure droite le point $(1,1)$.\\ -On peut même être plus précis et préciser que l'on veut un décalage par rapport à l'axe (après tout on veut placer un label) avec \verb%xticklabel% ou \verb%yticklabel%. +Pour placer l'étiquette avec \verb%at%, il en général plus pratique d'utiliser les \og coordonnées cs \fg{} : c'est un système de coordonnées dans lequel l'extrémité inférieure gauche de la figure est le point $(0,0)$ et l'extrémité supérieure droite le point $(1,1)$.\\ +On peut même être plus précis et indiquer que l'on veut un décalage par rapport à l'axe (après tout on veut placer un label) avec \verb%xticklabel% ou \verb%yticklabel%. -Enfin on peut aussi préciser des points d'ancrage avec \verb%[anchor=]% (les ancrages sont expliqués à la section \ref{subsec:nodeadv}), en particulier il y a une ancre valable uniquement pour les labels : \verb%near ticklabel% +Finalement, on peut aussi préciser des points d'ancrage avec \verb%[anchor=]% (les ancrages sont expliqués à la section \ref{subsec:nodeadv}) ; en particulier, l'ancre \verb|near ticklabel| n'est valable que pour les étiquettes. -Complétons encore notre exemple en améliorant le placement des labels : +Complétons encore notre exemple en améliorant le placement des étiquettes : \begin{LTXexample}[preset=\centering,width=0.60\textwidth] \begin{tikzpicture} \begin{axis}[ @@ -2119,79 +2117,68 @@ Complétons encore notre exemple en améliorant le placement des labels : \end{axis} \end{tikzpicture} \end{LTXexample} -Notez bien la syntaxe particulière de \verb%at%, on lui passe un point en tant qu'argument, il faut donc des parenthèses (pour le point), entourées d'accolades (pour l'option). - -\startaurel Bon j'ai essayé de faire la construction au fur et à mesure en parlant de tout, du coup c'est forcément illisible à la fin :)\\ -J'ai besoin d'un regard extérieur : la pilule passe ou pas ? \closeaurel +Notez bien la syntaxe particulière de \verb%at% : on lui passe un point en tant qu'argument, il faut donc des parenthèses (pour le point) entourées d'accolades (pour l'option). -\startenteo En prenant le temps de lire, ça passe très bien. Néanmoins, il pourrait être judicieux d'annoncer au début de la sous-section qu'on va construire un exemple complet -étape par étape. \closeenteo +\subsubsection{Personnaliser le titre, gérer les références et la numérotation} +Le titre est également un nœud et se personnalise donc de la façon indiquée% au \ref{subsubsec:persolabels}. +juste au-dessus. -\subsubsection{Personnaliser le titre, gérer les référence et la numérotation} -Le titre est également un noeud et se personnalise donc de la façon indiquée au \ref{subsubsec:persolabels}. - -Mais notez qu'on obtient en général un bien meilleur résultat sans utiliser le titre proposé par \verb=pgfplots= mais en prenant plutôt celui de l'environnement \verb=figure= (voir au \ref{subsec:flottants}), dans lequel on peut encapsuler la \verb=tikzpicture=. On gère de cette façon les références et la numérotation des figures. +Il faut remarquer que l'on obtient en général un bien meilleur résultat sans utiliser le titre proposé par \verb=pgfplots=, mais en prenant plutôt celui de l'environnement \verb=figure= (voir la sous-section~\ref{subsec:flottants}), dans lequel on peut encapsuler l'environnement \verb=tikzpicture=. On gère de cette façon les références et la numérotation des figures. \subsubsection{Des échelles semi-log et log-log} Pour utiliser des échelles semi-logarithmiques ou logarithmique rien de plus simple : il suffit de changer d'environnement d'axes !\\ -En réalité \verb=pgfplots= prévoit quatre environnements d'axes : +Il s'avère que \verb=pgfplots= prévoit quatre environnements d'axes : \begin{itemize} - \item \verb=axis= pour une échelle linéaire en $x$ et $y$ - \item \verb=semilogxaxis= pour une échelle linéaire en $y$ et logarithmique en $x$ - \item \verb=semilogyaxis= pour une échelle linéaire en $x$ et logarithmique en $y$ - \item \verb=loglogaxis= pour une échelle logarithmique en $x$ et $y$ + \item \verb=axis= pour une échelle linéaire en $x$ et $y$ ; + \item \verb=semilogxaxis= pour une échelle linéaire en $y$ et logarithmique en $x$ ; + \item \verb=semilogyaxis= pour une échelle linéaire en $x$ et logarithmique en $y$ ; + \item \verb=loglogaxis= pour une échelle logarithmique en $x$ et $y$. \end{itemize} Le logarithme utilisé est le logarithme naturel de base $e$, et les nombres sous les axes seront de la forme d'une puissance de $10$.\\ -Pour travailler à une telle échelle vous pourrez bien sur utiliser la notation $10^{-6} \equiv $"1e-6" - - - +La notation \verb|1e-n| pour représenter $10^n$ est correctement interprétée. +%Pour travailler à une telle échelle, vous pourrez bien sur utiliser la notation $10^{-6} \equiv $"1e-6" \subsubsection{Des réglages généraux avec pgfplotsset} -Si vous tracez plusieurs graphiques avec les mêmes options pour les axes, vous voudrez proablement éviter de tout recopier à chaque fois.\\ -C'est à ça que sert la commande \verb=\pgfplotsset{}=, déjà mentionnée pour son option \verb%compat=newest%. Les arguments passés à cette commande seront définis comme option pour chaque graphique \verb=pgfplots= que vous tracerez. +Si vous tracez plusieurs graphiques avec les mêmes options pour les axes, vous voudrez probablement éviter de tout recopier à chaque fois.\\ +C'est l'intérêt de la commande \verb=\pgfplotsset{}=, déjà mentionnée pour son option \verb%compat=newest%. Les arguments passés à cette commande seront définis comme option pour chaque graphique \verb=pgfplots= que vous tracerez. \subsection{Tracer des courbes : la commande addplot} Pour ceux qui ont survécu à la partie précédente, il est grand temps d'attaquer les choses vraiment intéressantes : le tracé de fonctions ! -\subsubsection{Prérequis sur les options et la cycle list} +\subsubsection{Prérequis sur les options et la \texttt{cycle list}} \label{subsubsec:cyclelist} -De même que les axes, les tracés avec \verb=\addplot= sont très largement personnalisables.\\ -Il peut donc être très pénible de devoir définir toutes les options de chaque tracé.\\ -C'est justement à ça que sert la \verb=cycle list= : c'est une liste de sets d'options prédéfinies qui s'appliqueront à chaque tracé, dans l'ordre : imaginons que votre graphe comprend deux tracés, alors le premier prendra le premier set de la \verb=cycle list= et sera bleu avec des marqueurs en forme de cercles, tandis que le second prendra le set suivant et sera rouge avec des marqueurs en forme de carrés. +De même que pour les axes, les tracés avec \verb=\addplot= sont très largement personnalisables. Il peut donc devenir très pénible de devoir définir toutes les options de chaque tracé.\\ +Pour résoudre ce problème, il existe la \verb=cycle list= : c'est une liste d'ensembles d'options prédéfinies qui s'appliqueront à chaque tracé, dans l'ordre. Imaginons que votre graphe comprend deux tracés : le premier prendra le premier ensemble de la \verb=cycle list= et sera bleu avec des marqueurs en forme de cercles, tandis que le second prendra l'ensemble suivant et sera rouge avec des marqueurs en forme de carrés. Ce procédé est bien sur très commun et est utilisé par de nombreux logiciels de tracés, mais il est important de bien le saisir afin de comprendre les différentes façons de choisir les options : \begin{itemize} - \item \verb=\addplot= sans options utilise la \verb=cycle list= par défaut - \item \verb=\addplot[]= écrase le set choisi par la \verb=cycle list= et utilise les options que vous avez choisi à la place - \item \verb=\addplot+[]= prend les options du set choisi par la \verb=cycle list= et ajoute celles que vous avez choisi en plus + \item \verb=\addplot= sans options utilise la \verb=cycle list= par défaut ; + \item \verb=\addplot[]= écrase les options choisies par la \verb=cycle list= et utilise celles que vous avez choisies à la place ; + \item \verb=\addplot+[]= prend les options choisies par la \verb=cycle list= et ajoute celles que vous avez choisies en plus. \end{itemize} \subsubsection{Tracer une expression mathématique} -\textbf{ATTENTION :} selon l'expression mathématique avec laquelle on travaille, le calcul des points peut être une tâche d'une complexité hautement non triviale nécessitant une mémoire et un temps de calcul pour lesquels le compilateur \TeX{} n'est absolument pas prévu.\\ -Donc à moins de considérer des expressions simples, il est largement préférable d'effectuer le calcul des points à l'aide d'un programme extérieur, et de charger les coordonnées avec les méthodes présentées au \ref{subsubsec:tikzload} +\emph{Nota Bene} : selon l'expression mathématique avec laquelle on travaille, le calcul des points peut être une tâche d'une complexité hautement non triviale nécessitant une quantité de mémoire et un temps de calcul pour lesquels le compilateur \TeX{} n'est absolument pas prévu. À moins de considérer des expressions simples, il est largement préférable d'effectuer le calcul des points à l'aide d'un programme extérieur, et de charger les coordonnées avec les méthodes présentées au \ref{subsubsec:tikzload}. La parenthèse étant fermée, tracer des fonctions est très simple : il suffit de passer l'expression en paramètre de \verb=addplot=. La variable par défaut est $x$.\\ -La syntaxe mathématique est usuelle : $+$ pour l'addition, $-$ pour la multiplication, $*$ pour la multiplication, $/$ pour la division et \textasciicircum~ pour la puissance.\\ -Sont également autorisées les constantes \verb=pi= et \verb=e=, ainsi que toutes les fonctions usuelles comme $\cos,\sin,$\\$\exp,\log,$etc...\\ -Les angles de fonctions trigonométriques doivent être donnés en degrés. Si vous voulez travailler en radians la fonction \verb=deg= peut vous à aider à les convertir en degrés. +La syntaxe mathématique est usuelle : \verb|+| pour l'addition, \verb|-| pour la multiplication, \verb|*| pour la multiplication, \verb|/| pour la division et \verb|^| pour la puissance. Sont également autorisées les constantes \verb=pi= et \verb=e= ainsi que toutes les fonctions usuelles (comme $\cos$, $\sin$, $\exp$, $\log$, \dots).\\ +Les angles de fonctions trigonométriques doivent être donnés en degrés. Si vous voulez travailler en radians, la fonction \verb=deg= peut vous à aider à les convertir en degrés. Deux options sont très importantes : \begin{itemize} - \item l'intervalle de tracé considéré : \verb%[domain=xmin:xmax]% - \item l'échantillonnage, donné ici par le nombre total de points : \verb%[samples=]% + \item l'intervalle de tracé considéré : \verb%[domain=xmin:xmax]% ; + \item l'échantillonnage, donné ici par le nombre total de points : \verb%[samples=]%. \end{itemize} -Remarquez que l'on peut également personnaliser l'échantillonnage en donnant la liste des points à considérer : \verb%[samples at ={}]%, où la liste peut être donnée de la même façon que \verb%xtick% (voir au -\ref{subsubsec:repgrid}). +On peut également personnaliser l'échantillonnage en donnant la liste des points à considérer : \verb%[samples at ={}]%, où la liste peut être donnée de la même façon que \verb%xtick% (voir au~\ref{subsubsec:repgrid}). Voici l'exemple du tracé de l'expression $y=\sin(x)$ : \begin{LTXexample}[preset=\centering,width=0.45\textwidth] @@ -2212,9 +2199,10 @@ Voici l'exemple du tracé de l'expression $y=\sin(x)$ : \end{axis} \end{tikzpicture} \end{LTXexample} -Remarquez l'utilisation de \verb=\addplot+= : si on avait utilisé \verb=\addplot=, toutes les options du set données par la\\ \verb=cycle list= (ici les options donnant un tracé bleu avec des cercles) auraient été annulées, et le tracé aurait été noir et sans marqueurs. +L'exemple fait intervenir \verb=\addplot+= : si \verb|addplot| avait été utilisé, toutes les options contenues dans la première entrée de la \verb=cycle list= (ici les options donnant un tracé bleu avec des cercles) auraient été annulées, et le tracé aurait été noir et sans marqueurs. + +Il est également possible de changer de variable avec l'option \verb%[variable=]%, et de tracer des courbes paramétrées en passant en paramètre de \verb=\addplot= un point dont les coordonnées sont les expressions correspondantes. -Il est également possible de changer de variable avec l'option \verb%[variable=]%, et de tracer des courbes paramétrées en passant en paramètre de \verb=\addplot= un point dont les coordonnées sont les expressions correspondantes.\\ Voici par exemple un tracé d'astroïde : $\begin{cases} x(t) = \cos^3(t) \\ y(t) = \sin^3(t) \end{cases}$ \begin{LTXexample}[preset=\centering,width=0.45\textwidth] \begin{tikzpicture} @@ -2241,13 +2229,12 @@ Voici par exemple un tracé d'astroïde : $\begin{cases} x(t) = \cos^3(t) \\ y(t Au lieu de calculer les coordonnées avec une expression mathématique, il est possible de donner directement les coordonnées des points à tracer à \verb=\addplot=. Vous pourrez par exemple faire des représentations graphiques de résultats de mesure, de la même manière que vous le feriez avec \verb=gnuplot= ou un autre logiciel de tracé. -Si vous voulez écrire directement les coordonnées dans le \texttt{.tex}, la syntaxe à utiliser est :\\ -\verb%\addplot(+)[] coordinates {(a,b) +- (da,db) ...};%\\ -Où $da$ et $db$ sont les erreurs de mesure, ceci permet d'afficher des barres d'erreurs.\\ -Vous pouvez également utiliser des erreurs asymétriques avec une syntaxe de la forme \verb% () += () -= ()% +Si vous voulez écrire directement les coordonnées dans le \texttt{.tex}, la syntaxe à utiliser est : +\begin{center}\verb%\addplot(+)[] coordinates {(a,b) +- (da,db) ...};%\end{center} +Où $da$ et $db$ sont les erreurs de mesure de $a$ et $b$ respectivement, ce qui permet d'afficher les barres d'erreurs ; vous pouvez également utiliser des erreurs asymétriques avec une syntaxe de la forme \verb%() += () -= ()% + +Les barres d'erreurs s'activent avec les options \verb%[error bars/x dir=]% (et de même pour $y$). L'option précise ainsi si vous voulez une barre d'erreur dans le sens des $x$ croissants, décroissants, ou dans les deux sens (le plus commun). Il faut également ajouter l'option \verb=[error bars/x explicit]= (idem pour $y$) si vous utilisez une erreur symétrique (syntaxe \verb=+-=). -Les barres d'erreurs s'activent avec les options \verb%[error bars/x dir=]% (et la même pour $y$). L'option précise ainsi si vous voulez une barre d'erreur dans le sens des $x$ croissants, décroissants, ou dans les deux sens (le plus commun).\\ -Il faut également ajouter l'option \verb=[error bars/x explicit]= (idem pour $y$) si vous utilisez une erreur symétrique (syntaxe \verb=+-=).\\ Si vous ne voulez pas écrire \verb=error bars/= devant chaque option, il est possible de le faire d'une façon générique en écrivant \verb=error bars/.cd= avant d'écrire toutes les options. Voici un exemple : @@ -2274,32 +2261,30 @@ Voici un exemple : Il est également possible de lire les coordonnées dans un fichier de données brutes dont le format est basé sur le modèle suivant : \medbreak \begin{tabular}{cccc} - Framboise & ABC & Ornithorynque & ...\\ - 1.2 & 5542e5 & -204.2 & ...\\ - 1.4 & 78432e8 & 54.242 & ... \\ + Framboise & ABC & Ornithorynque & \dots\\ + 1.2 & 5542e5 & -204.2 & \dots\\ + 1.4 & 78432e8 & 54.242 & \dots \\ $\vdots$ & $\vdots$ & $\vdots$ & $\ddots$ \\ \end{tabular}\\ -On doit donc avoir une première ligne qui sert d'étiquette (elle donne le "titre" des colonnes) et toutes les lignes suivantes qui contiennent les données, en colonnes. - -Si on veut tracer par exemple la troisième colonne (\textit{Ornithorynque}) en fonction de la première (\textit{Framboise}), la commande à utiliser est :\\ -\verb%\addplot(+)[] table[x=Framboise,y=Ornithorynque]{nomdufichier}%\\ -Si vous préférez accèder à une colonne par son numéro vous pouvez également utiliser :\\ -\verb%\addplot(+)[] table[x index = 1, y index = 3]{nomdufichier}% +On peut avoir comme ci-dessus une première ligne qui sert d'étiquette (elle donne le titre des colonnes) ; toutes les lignes suivantes qui contiennent les données, en colonnes. -Vous pouvez également spécifier les erreurs dans une colonne avec par exemple \verb%[x error=]%, ou bien sa version asymétrique : \verb%[x error plus=]% (et la même avec \verb=minus=). +Si l'on veut tracer, par exemple, la troisième colonne (\og Ornithorynque \fg{}) en fonction de la première (\og Framboise \fg{}), la commande à utiliser est : +\begin{center}\verb%\addplot(+)[] table[x=Framboise,y=Ornithorynque]{nomdufichier}%\end{center} +Si vous préférez accéder à une colonne par son numéro (s'il n'y a pas d'étiquettes notamment), vous pouvez utiliser \verb| index| (la numérotation commence à 0) : +\begin{center}\verb%\addplot(+)[] table[x index = 0, y index = 2]{nomdufichier}%\end{center} -\startaurel Ca suffit ou ça mérite un exemple ? \closeaurel +Concernant les erreurs, elles doivent être présentes dans une colonne et appelées avec \verb%[x error=]%, ou bien sa version asymétrique : \verb%[x error plus=]% (et de même avec \verb|y error| et \verb=minus=). -\startenteo Je suis juste curieux : quel genre de fichier contient des données brutes utilisables ? Ce sont des fichiers du genre CSV ?\closeenteo\\ -\startaurel Oui les CSV marchent très bien. Mais je n'ai jamais trop compris la différence (s'il y en a une) entre un CSV et juste un fichier de texte non formaté avec des données en colonnes séparées par des espaces ou des tabulations. A moins que ce ne soit une distinction de format qui ne vaut que sous Windows avec ses extensions de fichier ? \closeaurel +%\startenteo Je suis juste curieux : quel genre de fichier contient des données brutes utilisables ? Ce sont des fichiers du genre CSV ?\closeenteo\\ +%\startaurel Oui les CSV marchent très bien. Mais je n'ai jamais trop compris la différence (s'il y en a une) entre un CSV et juste un fichier de texte non formaté avec des données en colonnes séparées par des espaces ou des tabulations. A moins que ce ne soit une distinction de format qui ne vaut que sous Windows avec ses extensions de fichier ? \closeaurel \subsubsection{Personnaliser les courbes et les marqueurs} Il est important d'avoir lu la partie \ref{subsubsec:cyclelist} avant de poursuivre. -Les options disponibles pour personnaliser les courbes sont celles que \verb=TikZ= utilise pour la commande \verb=\draw=, vous pouvez donc vous référer au \ref{subsec:tikzstyle}. +Les options disponibles pour personnaliser les courbes sont celles que \texttt{TikZ} utilise pour la commande \verb=\draw=, vous pouvez donc vous référer au \ref{subsec:tikzstyle}. -Les marqueurs aussi sont pour la plupart définis par \verb=TikZ=, mais comme ils n'ont pas encore été présentés nous allons en parler maintenant. +Les marqueurs aussi sont pour la plupart définis par \texttt{TikZ}, mais comme ils n'ont pas encore été présentés nous allons en parler maintenant. La forme d'un marqueur peut être définie avec l'option \verb%[mark=]%, où forme peut valoir par exemple \verb=*,+,x=. Bien d'autres marqueurs sont définis, vous pouvez vous référer à la documentation s'ils vous intéressent. @@ -2311,10 +2296,9 @@ Enfin, il est possible de retirer les marqueurs avec \verb%[mark=none]% ou au co \subsection{Les coordonnées polaires} -Pour utiliser des coordonnées polaires il faut préciser l'option \verb%[data cs=]%. (\verb%polar% utilise les degrés et \verb%polarrad% utilise les radians).\\ -Les points sont alors donnés par la syntaxe \verb%(angle,rayon)% et non par la syntaxe usuelle de \verb=TikZ= qui est \verb%(angle:rayon)%. +Pour utiliser des coordonnées polaires il faut utiliser l'option \verb%[data cs=]% (\verb%polar% utilise les degrés et \verb%polarrad% utilise les radians). Les points sont alors donnés par la syntaxe \verb%(angle,rayon)% et non par la syntaxe usuelle de \texttt{TikZ} \verb%(angle:rayon)%. -Voici un exemple montrant le tracé de la cardioïde : $r(\theta)=1+\cos(\theta)$ +Voici un exemple montrant le tracé de la cardioïde : $r(\theta)=1+\cos(\theta)$. \begin{LTXexample}[preset=\centering,width=0.45\textwidth] \begin{tikzpicture} \begin{axis}[ @@ -2325,7 +2309,7 @@ Voici un exemple montrant le tracé de la cardioïde : $r(\theta)=1+\cos(\theta) scale only axis=true, axis equal=true, grid=major -] + ] \addplot+[mark=none, data cs=polarrad, domain=-pi:pi,variable=t,samples=80] ({t},{1+cos(deg(t))}); @@ -2334,7 +2318,7 @@ Voici un exemple montrant le tracé de la cardioïde : $r(\theta)=1+\cos(\theta) \end{LTXexample} Il existe également un moyen de définir des axes polaires, avec l'extension \verb=polar= de \verb=pgfplots=, qui se charge avec \verb=\usepgfplotslibrary{polar}=.\\ -On peut alors utiliser l'environnement \verb%polaraxis%, qui définit des axes polaires. Malheusement les angles sont affichés en degré. Le seul moyen de les afficher en radians est de tout faire à la main, l'exemple suivant présente une façon de le faire, mais ne sera pas plus développé. +On peut alors utiliser l'environnement \verb%polaraxis%, qui définit des axes polaires. Malheureusement les angles sont affichés en degré. Le seul moyen de les afficher en radians est de tout faire à la main, l'exemple suivant présente une façon de le faire, mais ne sera pas plus développé. \begin{LTXexample}[preset=\centering,width=0.55\textwidth] %preambule : \usepgfplotslibrary{polar} \begin{tikzpicture} @@ -2364,22 +2348,23 @@ domain=-10*pi:pi,variable=t,samples=300] \section{Un soupçon de 3d} -Dans cette partie nous allons voir que \verb=TikZ= permet également de réaliser des représentations graphiques en 3 dimensions. +Dans cette partie nous allons voir que \texttt{TikZ} permet également de réaliser des représentations graphiques en 3 dimensions. \subsection{Repésentation et repère} -Il est important de comprendre \verb=TikZ= n'est pas un logiciel de modélisation 3d, il ne permet que de calculer la projection en perspective de la figure selon un unique point de vue. En aucun cas il n'est capable de gérer les faces cachées, la profondeur ou les rotations 3d.\\ -Le point de vue utilisé est défini par la projection en perspective du repère 3d $(\vec i,\vec j,\vec k)$ sur le plan de tracé. Par défaut on a $\vec i = (1,0)$, $\vec j = (0,1)$ et $\vec k = -\frac{1}{2\sqrt{2}}\vec i - \frac{1}{2\sqrt{2}}\vec j$, et les coordonnées 3d sont données par des triplets du type $(x,y,z)$.\\ +Il est important de comprendre \texttt{TikZ} n'est pas un logiciel de modélisation 3D ; il ne permet que de calculer la projection en perspective de la figure selon un unique point de vue. En aucun cas est-il capable de gérer les faces cachées, la profondeur ou les rotations 3D.\\ +Le point de vue utilisé est défini par la projection en perspective du repère 3D $(\vec \imath,\vec \jmath,\vec k)$ sur le plan de tracé. Par défaut, $\vec \imath = (1,0)$, $\vec \jmath = (0,1)$ et $\vec k = -\frac{1}{2\sqrt{2}}\vec \imath - \frac{1}{2\sqrt{2}}\vec \jmath$, et les coordonnées 3D sont données par des triplets du type $(x,y,z)$. + Voici donc un tracé du repère : \begin{LTXexample}[preset=\centering,width=0.35\textwidth] \begin{tikzpicture}[>=latex] -\draw[->] (0,0,0) -- (1,0,0) node[right] {$\vec i$}; -\draw[->] (0,0,0) -- (0,1,0) node[above] {$\vec j$}; +\draw[->] (0,0,0) -- (1,0,0) node[right] {$\vec \imath$}; +\draw[->] (0,0,0) -- (0,1,0) node[above] {$\vec \jmath$}; \draw[->] (0,0,0) -- (0,0,1) node[below left] {$\vec k$}; \end{tikzpicture} \end{LTXexample} -Cette représentation n'est cependant pas celle utilisé par l'enseignement français, et il peut être beaucoup plus agéable de changer de représentation afin de revenir en terrain connu, en définissant un style dans lequel la projection du repère $(\vec i,\vec j,\vec k)$ est différente :\\ +Cette représentation n'est cependant pas celle utilisé par l'enseignement français, et il peut être beaucoup plus agéable de changer de représentation afin de revenir en terrain connu, en définissant un style dans lequel la projection du repère $(\vec \imath,\vec \jmath,\vec k)$ est différente :\\ \verb%\tikzset{ma3d/.style={x={(-0.353cm,-0.353cm)},y={(1cm,0cm)},z={(0cm,1cm)}}}%\\ C'est d'ailleurs cette convention qui sera utilisée dans le reste de ce document. @@ -2387,13 +2372,13 @@ C'est d'ailleurs cette convention qui sera utilisée dans le reste de ce documen On obtient alors les axes : \begin{LTXexample}[preset=\centering,width=0.35\textwidth] \begin{tikzpicture}[ma3d,>=latex] -\draw[->] (0,0,0) -- (1,0,0) node[below left] {$\vec i$}; -\draw[->] (0,0,0) -- (0,1,0) node[right] {$\vec j$}; +\draw[->] (0,0,0) -- (1,0,0) node[below left] {$\vec \imath$}; +\draw[->] (0,0,0) -- (0,1,0) node[right] {$\vec \jmath$}; \draw[->] (0,0,0) -- (0,0,1) node[above] {$\vec k$}; \end{tikzpicture} \end{LTXexample} -Vous pouvez bien sur utilisez la syntaxe qui vient d'être présentée afin de choisir n'importe quelle autre projection en perspective. +Vous pouvez bien sûr utiliser la syntaxe qui vient d'être présentée afin de choisir n'importe quelle autre projection en perspective. Voici l'exemple du tracé d'un cube : \begin{LTXexample}[preset=\centering,width=0.35\textwidth] @@ -2405,24 +2390,23 @@ Voici l'exemple du tracé d'un cube : \draw (1,0,1)--(0,0,1); \draw[dashed] (1,0,0)--(0,0,0); \end{tikzpicture} \end{LTXexample} -Comme \verb=TikZ= ne gère pas de tampon de profondeur\footnote{Une méthode informatique qui détermine les faces cachées lors d'une projection en perspective}, c'est à l'utilisateur de choisir quelles seront les arrêtes en pointillés et celles en traits pleins. - -Ceci peut poser tout particulièrement problème si vous tracez des surfaces coloriées les unes par dessus les autres... réfléchir à l'ordre de tracé devient dès lors indispensable ! - -\subsection{La 3d et pgfplots} -Attention le tracé de graphiques 3d nécéssite des ressources bien plus importantes qu'en 2d, et le compilateur \TeX{} peut très vite atteindre ses limites...\\ -Si vous désirez utiliser des graphes 3d nous vous conseillons de d'abord lire la section \ref{subsec:external}, qui présente un moyen de réduire le temps de compilation en externalisant les graphiques. +Comme \texttt{TikZ} ne gère pas de tampon de profondeur\footnote{Une méthode informatique qui détermine les faces cachées lors d'une projection en perspective}, c'est à l'utilisateur de choisir quelles seront les arrêtes en pointillés et celles en traits pleins. Ceci peut poser tout particulièrement problème si vous tracez des surfaces coloriées les unes par dessus les autres \dots réfléchir à l'ordre de tracé devient dès lors indispensable ! -Pour obtenir un tracé 3d il suffit de remplacer la commande \verb=\addplot(+)= par \verb=\addplot3(+)= (si vous n'êtes pas familier avec \verb=\pgfplots= il est préférable de lire \ref{sec:pgfplots} avant de poursuivre).\\ -Les axes fournis par l'environnement \verb=axis= sont par défaut de sorte que l'axe $z$ soit vertical. Il est possible de définir le point de vue (la projection en perspective) à l'aide de l'option \verb%[view={azimut}{élévation}]%. L'azimut représente l'angle entre la direction du regard et l'axe $\vec y$, mesuré dans le plan $xy$. L'élévation représente l'angle entre la direction du regard et le plan $xy$, de sorte qu'un angle négatif indique une vision depuis le bas. \startaurel Mouais... en me relisant j'ai pas l'impression d'être très clair, si quelqu'un voit un meilleur moyen d'expliquer ça qu'il ne se prive pas :) \closeaurel +\subsection{La 3D et \texttt{pgfplots}} +Attention, le tracé de graphiques 3D nécessite des ressources bien plus importantes qu'en 2D, et le compilateur \TeX{} peut très vite atteindre ses limites \dots\\ Si vous désirez utiliser des graphes 3D, nous vous conseillons de d'abord lire la section \ref{subsec:external}, qui présente un moyen de réduire le temps de compilation en externalisant les graphiques. -\startenteo Houla, je vais y réfléchir... \closeenteo +Pour obtenir un tracé 3D, il suffit de remplacer la commande \verb=\addplot(+)= par \verb=\addplot3(+)= (si vous n'êtes pas familier avec \verb=\pgfplots= il est préférable de lire la section~\ref{sec:pgfplots} avant de poursuivre).\\ +Les axes fournis par l'environnement \verb=axis= sont par défaut de sorte que l'axe $z$ soit vertical. Il est possible de définir le point de vue (la projection en perspective) à l'aide de l'option \verb%[view={azimut}{élévation}]%. L'azimut représente l'angle entre la direction du regard et l'axe $\vec y$, mesuré dans le plan $xy$. L'élévation représente l'angle entre la direction du regard et le plan $xy$, de sorte qu'un angle négatif indique une vision depuis le bas. -\starttouille Les angles que tu décris ne seraient-ils pas ceux d'un repère sphérique ? Un dessin t'aiderait beaucoup :) \closetouille\\ -\startaurel Pas tout a fait, en sphérique on a une colatitude (référence au pôle nord) et une longitude. Ici on a une latitude (référence à l'équateur) et une longitude. Et la latitude en question fonctionne en sens inverse :) Mais c'est vrai que c'est peut-être plus clair en faisant la comparaison et en donnant la différence. \closeaurel +%\startaurel Mouais... en me relisant j'ai pas l'impression d'être très clair, si quelqu'un voit un meilleur moyen d'expliquer ça qu'il ne se prive pas :) \closeaurel +% +%\startenteo Houla, je vais y réfléchir... \closeenteo +% +%\starttouille Les angles que tu décris ne seraient-ils pas ceux d'un repère sphérique ? Un dessin t'aiderait beaucoup :) \closetouille\\ +%\startaurel Pas tout a fait, en sphérique on a une colatitude (référence au pôle nord) et une longitude. Ici on a une latitude (référence à l'équateur) et une longitude. Et la latitude en question fonctionne en sens inverse :) Mais c'est vrai que c'est peut-être plus clair en faisant la comparaison et en donnant la différence. \closeaurel \subsubsection{Courbe paramétrique} -Ainsi une courbe paramétrique 3d peut s'obtenir assez facilement comme dans cet exemple : +Une courbe paramétrique 3D peut s'obtenir assez facilement, comme dans cet exemple : \begin{LTXexample}[preset=\centering,width=0.45\textwidth] \begin{tikzpicture} \begin{axis}[ @@ -2434,16 +2418,16 @@ Ainsi une courbe paramétrique 3d peut s'obtenir assez facilement comme dans cet height=5cm,width=5cm, scale only axis=true, axis equal=true -] + ] \addplot3+[domain=0:5*pi,samples=100,mark=none, variable=t,samples y=0] ({cos(deg(t))},{sin(deg(t))},{2*t/(5*pi)}); \end{axis} \end{tikzpicture} \end{LTXexample} -Le rôle de l'option \verb%[samples y = 0]% est d'empêcher la courbe de se refermer. En effet \verb%\addplot3 expression% trace par défaut un maillage (\textit{mesh}) et non une courbe. Mais ce point devrait s'éclaircir avec les exemples suivants. +Le rôle de l'option \verb%[samples y = 0]% est d'empêcher la courbe de se refermer. En effet, \verb%\addplot3 expression% trace par défaut un maillage (\textit{mesh}) et non une courbe. Mais ce point devrait s'éclaircir avec les exemples suivants. -\subsubsection{Surface paramétrique, shading et tampon de profondeur} +\subsubsection{Surface paramétrique, \emph{shading} et tampon de profondeur} Pour tracer une surface paramétrée, il suffit d'utiliser une seconde variable (par défaut $y$, mais on peut la changer avec \verb%[variable y = ]%). Il faut également ajouter l'option \verb%[surf]%, afin d'indiquer que l'on souhaite remplir le maillage. \begin{LTXexample}[preset=\centering,width=0.40\textwidth] \begin{tikzpicture} @@ -2457,7 +2441,7 @@ Pour tracer une surface paramétrée, il suffit d'utiliser une seconde variable scale only axis=true, axis equal=true ] -\addplot3+[mark=none,surf,z buffer=sort, +\addplot3+[mark=none,surf,%z buffer=sort, domain=0:3*pi,samples=100,variable=u, domain y=0:1, samples y=30,variable y = v] ({v*cos(deg(u))},{v*sin(deg(u))},{2*u/(3*pi)}); @@ -2466,12 +2450,13 @@ Pour tracer une surface paramétrée, il suffit d'utiliser une seconde variable \end{LTXexample} Deux choses importantes concernant la figure précédente : \begin{itemize} - \item tout d'abord remarquez l'option \verb/[z buffer = sort]/. Contrairement aux fonctions \verb=TikZ= de base qui ne gèrent pas la profondeur et les faces cachées, \verb-pgfplots- possède un tampon de profondeur. Ici l'hélicoïde ne s'affiche pas correctement à l'endroit ou les surfaces se superposent si cette option n'est pas présente (essayez si vous êtes curieux).\\ - En revanche le tampon de profondeur demande un temps de calcul et une mémoire bien plus élevée\footnote{En réalité l'algorithme n'a qu'une complexité $O(N\log N)$, mais le compilateur \TeX{} n'a pas vraiment que ça à faire}, et il ne faut donc activer cette option qu'en cas de conflit de profondeur. -\item ensuite, on peut constater que \verb/pgfplots/ a colorié la surface. En réalité a chaque point a été associé une couleur dépendant de sa coordonnée $z$, et les surfaces ont étés coloriées par un algorithme de \textit{shading}\footnote{Plus intimements appellés \textit{shaders}, c'est nn nom générique pour les algorithmes servant à construire des surfaces continues à partir d'un maillage. Les \textit{shaders} et le tampon de profondeur sont les principaux outils pour construire un rendu 3d à partir d'une liste de points}. Ici ça a surtout un rôle esthétique, mais lors du tracé de fonction a deux variables c'est très utile !\\ Le choix des couleurs est celui par défaut, mais il est possible de le changer avec les \verb/colormap/ (voir au \ref{subsubsec:colormap}) \\Il est de plus possible de choisir l'algorithme de \textit{shading} avec l'option \verb/[shader=]/. Je ne détaillerais pas ici les algorithmes de shading\footnote{Et d'ailleurs je fais le malin là comme ça, mais en réalité je ne connais absolument rien aux \textit{shaders} :) mais bon comme ici on veut créer un document \LaTeX{} et pas un jeu vidéo haute résolution ça ne devrait pas trop poser problème}, mais l'exemple ci-dessous peut vous montrer l'intérêt de cette option + \item l'option \verb/[z buffer = sort]/ : contrairement aux fonctions \texttt{TikZ} de base qui ne gèrent pas la profondeur et les faces cachées, \verb-pgfplots- possède un tampon de profondeur. Ici, l'hélicoïde ne s'affiche pas correctement à l'endroit où les surfaces se superposent si cette option n'est pas présente (essayez si vous êtes curieux).\\ + En revanche le tampon de profondeur demande un temps de calcul et une mémoire bien plus élevée\footnote{En réalité l'algorithme n'a qu'une complexité $O(N\log N)$, mais le compilateur \TeX{} n'a pas vraiment que ça à faire.}, et il ne faut donc activer cette option qu'en cas de conflit de profondeur. + % D'ailleurs ça fait planter la compilation chez moi, du coup je l'ai désactivée comme on vient de me l'enseigner. -- Tatouille +\item \verb/pgfplots/ a colorié la surface. À chaque point a été associé une couleur dépendant de sa coordonnée $z$, et les surfaces ont été coloriées par un algorithme de \emph{shading}\footnote{Plus intimements appellés \emph{shaders}, c'est le nom générique pour les algorithmes servant à construire des surfaces continues à partir d'un maillage. Les \textit{shaders} et le tampon de profondeur sont les principaux outils pour construire un rendu 3D à partir d'une liste de points.}. Ici, cela a surtout un rôle esthétique, mais lors du tracé de fonction a deux variables c'est très utile !\\ Le choix des couleurs est celui par défaut, mais il est possible de le changer avec les \verb/colormap/ (voir au~\ref{subsubsec:colormap}). \\Il est de plus possible de choisir l'algorithme de \textit{shading} avec l'option \verb/[shader=]/ ; ceux-ci ne seront pas détaillés ici\footnote{Et rien n'indique d'ailleurs que les auteurs s'y connaissent dans le domaine ; mais comme le but recherché ici est de créer un document \LaTeX{} et pas un jeu vidéo haute résolution, cela ne devrait pas trop poser problème.}, mais l'exemple ci-dessous peut vous montrer l'intérêt de cette option. \end{itemize} -Voici la même hélicoïde, mais avec un autre algorithme de shading : +%Voici la même hélicoïde, mais avec un autre algorithme de shading : \begin{LTXexample}[preset=\centering,width=0.40\textwidth] \begin{tikzpicture} \begin{axis}[ @@ -2484,7 +2469,7 @@ Voici la même hélicoïde, mais avec un autre algorithme de shading : scale only axis=true, axis equal=true ] -\addplot3+[mark=none,surf,z buffer=sort,shader=interp, +\addplot3+[mark=none,surf,shader=interp,%z buffer=sort, domain=0:3*pi,samples=100,variable=u, domain y=0:1, samples y=30,variable y = v] ({v*cos(deg(u))},{v*sin(deg(u))},{2*u/(3*pi)}); @@ -2492,12 +2477,10 @@ Voici la même hélicoïde, mais avec un autre algorithme de shading : \end{tikzpicture} \end{LTXexample} -\subsubsection{Fonction a deux variables, colormap et colorbar} +\subsubsection{Fonctions à deux variables, \texttt{colormap} et \texttt{colorbar}} \label{subsubsec:colormap} -Vous pouvez changer les couleurs utilisées pour colorier les surfaces avec les \verb/colormap/, qui sont listées ici :\\ -\verb/viridis, hot, hot2, jet, blackwhite, bluered, cool, greenyellow, redyellow, violet/\\ -Pour en utiliser une il suffit de l'ajouter en tant qu'option de \verb/axis/ avec le préfixe \verb|colormap/|, par exemple \verb|[colormap/hot2]|. +Vous pouvez changer les couleurs utilisées pour colorier les surfaces avec les \verb/colormap/ : \verb|viridis|, \verb|hot|, \verb|hot2|, \verb|jet|, \verb|blackwhite|, \verb|bluered|, \verb|cool|, \verb|greenyellow|, \verb|redyellow|, \verb|violet|. Pour en utiliser une, il suffit de l'ajouter en tant qu'option de \verb/axis/ avec le préfixe \verb|colormap/|, par exemple \verb|[colormap/hot2]|. On peut de plus ajouter une barre de teinte qui indique quelle valeur correspond à quelle couleur avec l'option \verb/colorbar/. @@ -2517,7 +2500,7 @@ Voici l'exemple du tracé de la fonction $f(x,y) = x^2 - y^2$ : colorbar, ] \addplot3+[mark=none,surf, - samples=60,samples y=60, + samples=40,samples y=40, domain=-1:1,domain y=-1:1] {x^2-y^2}; \end{axis} @@ -2526,40 +2509,38 @@ Voici l'exemple du tracé de la fonction $f(x,y) = x^2 - y^2$ : \section{Un peu de théorie des graphes} -Nous allons voir ici comment réaliser des graphes, au sens où l'entendent les mathématiciens (ie des noeuds reliés entre eux par des traits).\\ -Le lecteur avertit aura de plus certainement deviné que les noeuds portent ce nom en référence à la théorie des graphes. +Nous allons voir ici comment réaliser des graphes, au sens où l'entendent les mathématiciens (i.e. des nœuds reliés entre eux par des traits).\\ +Le lecteur averti aura certainement deviné que les nœuds portent ce nom en référence à la théorie des graphes. -\subsection{La vérité sur les noeuds} +\subsection{La vérité sur les nœuds} \label{subsec:nodeadv} -Les noeuds vous ont étés présentés comme un moyen pratique de mettre de texte dans vos figures. Mais ne vous y trompez pas leur fonctionnement est fait pour construire des graphes !\\ -En réalité les noeuds en \verb=TikZ= sont des boîtes de texte, qui ont un volume et une forme, et que l'on peut colorier ou relier entre elles par des primitives géométriques. +Les nœuds vous ont étés présentés comme un moyen pratique de mettre du texte dans vos figures. Mais ne vous y trompez pas, leur fonctionnement est fait destiné à la construction de graphes ! Les nœuds de \texttt{TikZ} sont des boîtes de texte, qui ont un volume et une forme, et que l'on peut colorier ou relier entre elles par des primitives géométriques. -Pour tracer le contour d'un noeud utilisez l'option \verb=[draw]= (oui l'option, pas la commande !). Il est de plus possible de changer la forme des noeuds avec \verb=[circle/ellipse/diamond]=. (les formes \verb=ellipse= et \verb=diamond= ne sont disponibles qu'en chargeant \verb=\usetikzlibrary{shapes}=) \\ -L'exemple suivant révèle les noeuds sous leur vraie nature : +Pour tracer le contour d'un nœud, utilisez l'option \verb=[draw]= (oui l'option, pas la commande). Il est possible d'en changer la forme avec \verb=[circle/ellipse/diamond]= (les formes \verb=ellipse= et \verb=diamond= ne sont disponibles qu'en chargeant \verb=\usetikzlibrary{shapes}=). \\ +L'exemple suivant révèle les nœuds sous leur vraie nature : \begin{LTXexample}[preset=\centering,width=0.35\textwidth] \begin{tikzpicture} \node[draw,red,fill=blue!30] at (-2,0) {Coucou}; \node[draw,diamond,dashed] at (0,0) {nous}; \node[draw,circle,fill=green] at (2,0) {sommes}; - \node[draw,ellipse] at (0,-1.2) {des noeuds}; + \node[draw,ellipse] at (0,-1.2) {des n\oe uds}; \end{tikzpicture} \end{LTXexample} -Comme les noeuds ont un volume on ne peut pas les positionner en indiquant uniquement un point. En réalité il faut un point désigné par \verb=at= et une ancre, choisie avec l'option \verb%[anchor=]%. Choisir une ancre c'est décider \og quel point de mon noeuds je veux placer aux coordonnées désignées \fg{}. \\Le centre est l'ancre \verb=base=, mais il est inutile de la préciser car c'est l'ancre par défaut. Les autres ancres possibles sont les points cardinaux :\\ -\verb=north,south,east,west=, ainsi que les composés comme \verb=north east=.\\ +Comme les nœuds ont un volume, on ne peut pas les positionner en indiquant uniquement un point ; il faut un point désigné par \verb=at= et une ancre, choisie avec l'option \verb%[anchor=]%. Choisir une ancre, c'est décider \og quel point du nœud placer aux coordonnées désignées \fg{}. Le centre est l'ancre \verb=base=, mais il est inutile de la préciser car c'est l'ancre par défaut. Les autres ancres possibles sont les points cardinaux : \verb|north|, \verb|south|, \verb|east| et \verb|west|, ainsi que les composés comme \verb=north east=.\\ Cette notion devrait s'éclaircir avec les exemples de la sous-section suivante. -\subsection{Relier les noeuds} +\subsection{Relier les nœuds} -Il y a deux façons de relier des noeuds : +Il y a deux façons de relier des nœuds : \begin{itemize} - \item soit on définit les noeuds en leur attribuant un nom, puis on les relie comme on relierait des points - \item soit on trace les noeuds à l'intérieurs d'un \verb=\draw= + \item soit en définissant les nœuds en leur attribuant un nom, puis en les reliant comme on relierait des points ; + \item soit en traçant les nœuds à l'intérieurs d'un \verb=\draw=. \end{itemize} -L'exemple suivant montre ces deux méthodes +L'exemple suivant démontre ces deux méthodes : \begin{LTXexample}[preset=\centering,width=0.25\textwidth] \begin{tikzpicture} \node[draw,diamond] (A) at (0,0) {$\alpha$}; @@ -2569,8 +2550,8 @@ L'exemple suivant montre ces deux méthodes {$\gamma$} -- (2,2) node[draw,circle,orange] {$\delta$}; \end{tikzpicture} \end{LTXexample} -Il y a ici une différence notable entre les deux méthodes : la première place les noeuds aux emplacements désirés, et adapte le tracé. La seconde donne priorité aux tracés, et ne gère pas les noeuds.\\ -On peut néanmoins obtenir un bon résultat en utilisant les \textit{ancres} (voir sous-section précédente) : +Il y a ici une différence notable entre les deux méthodes : la première place les nœuds aux emplacements désirés, et adapte le tracé. La seconde donne priorité aux tracés, et ne gère pas les nœuds.\\ +On peut néanmoins obtenir un bon résultat en utilisant les ancres (voir sous-section précédente) : \begin{LTXexample}[preset=\centering,width=0.25\textwidth] \begin{tikzpicture} \draw[->,>=stealth,blue] (0,0) node[draw,anchor=east,diamond,red] @@ -2578,8 +2559,9 @@ On peut néanmoins obtenir un bon résultat en utilisant les \textit{ancres} (vo {$\delta$}; \end{tikzpicture} \end{LTXexample} +\medskip -Voyons maintenant quels sont les différents types de tracés qui peuvent relier les noeuds : +Voyons maintenant quels sont les différents types de tracés qui peuvent relier les nœuds : Il est possible de remplacer \verb=--= par \verb=|-= (départ horizontal et arrivée verticale) ou \verb=-|= (départ vertical et arrivée horizontale) : \begin{LTXexample}[preset=\centering,width=0.25\textwidth] @@ -2592,8 +2574,8 @@ Il est possible de remplacer \verb=--= par \verb=|-= (départ horizontal et arri \end{LTXexample} Il est également possible d'obtenir un tracé courbe avec \verb%to[]%, où les options peuvent être précisées de deux façons : \begin{itemize} - \item \verb%to[out=,in=]%, la référence des angles étant l'axe $x$ - \item \verb%to[bend right=]% (ou \verb%bend left%), la référence des angles étant l'axe entre les deux noeuds + \item \verb%to[out=,in=]%, la référence des angles étant l'axe $x$ ; + \item \verb%to[bend right=]% (ou \verb%bend left%), la référence des angles étant l'axe entre les deux nœuds. \end{itemize} Prenez le temps de comprendre l'exemple suivant : \begin{LTXexample}[preset=\centering,width=0.25\textwidth] @@ -2610,24 +2592,23 @@ Prenez le temps de comprendre l'exemple suivant : \subsection{Le cas des arbres} -Un arbre est un cas particulier important de la théorie des graphes, c'est un graphe connexe (tout les noeuds sont reliés) et acyclique (il n'y a qu'un seul chemin allant d'un noeud à un autre).\\ -On les appelle \textit{arbres} car il est toujours possible de \textit{l'enraciner}, c'est à dire de choisir un noeud et de lui donner le statut de \textit{racine}, tous les noeuds étant alors reliés à la racine par un chemin unique faisant office de liens de \og parenté \fg{}. - -Les arbres valent la peine d'être mentionnés ici car \verb=TikZ= possède une extension pour les tracer avec une grande simplicité, sans se soucier des coordonnées des points et en indiquant juste les liens de parenté. +Un arbre est un cas particulier important de la théorie des graphes : c'est un graphe connexe (tout les noeuds sont reliés) et acyclique (il n'y a qu'un seul chemin allant d'un noeud à un autre).\\ +On les appelle \emph{arbres} car il est toujours possible de l'\emph{enraciner}, c'est à dire de choisir un nœud et de lui donner le statut de \emph{racine}, tous les nœuds étant alors reliés à la racine par un chemin unique faisant office de liens de \og parenté \fg{}. -Avant de lire la suite chargez donc \verb=\usetikzlibrary{trees}=. +Les arbres valent la peine d'être mentionnés ici car \texttt{TikZ} possède une extension pour les tracer avec une grande simplicité, sans se soucier des coordonnées des points et en indiquant juste les liens de parenté. Avant de lire la suite, chargez donc \verb=\usetikzlibrary{trees}=. -Pour tracer un arbre il suffit alors de placer la \textit{racine} en tant que noeud, et de lui associer des enfants avec \verb=child{}=.\\ -La syntaxe de l'arbre est donc de la forme \\\verb% \node {racine} child { node{fils1} ...} child { node{fils2} child{...}...};% +Pour tracer un arbre, il suffit de placer la \textit{racine} en tant que nœud, et de lui associer des enfants avec \verb=child{}=.\\ +La syntaxe de l'arbre est donc de la forme +\begin{center}\verb% \node {} child { node{} ...} child { node{} child{...}...};%\end{center} Plusieurs options sont utiles : \begin{itemize} - \item \verb%[sibling distance=]% définit la distance entre noeuds \og frères \fg{} - \item \verb%[level distance=]% définit la distance entre \og père \fg{} et \og fils \fg{} - \item \verb%[grow=]% donne le sens dans lequel l'arbre doit croître + \item \verb%[sibling distance=]% définit la distance entre noeuds \og frères \fg{} ; + \item \verb%[level distance=]% définit la distance entre \og père \fg{} et \og fils \fg{} ; + \item \verb%[grow=]% donne le sens dans lequel l'arbre doit croître. \end{itemize} -Enfin on peut placer du texte sur les liens avec \verb%edge from parent node {}%, ou modifier son style avec \verb%edge from parent[]% +Dernièrement, on peut placer du texte sur les liens avec \verb%edge from parent node {}%, ou modifier son style avec \verb%edge from parent[]% Voici un exemple complet pour assimiler toute ces informations : \begin{LTXexample}[preset=\centering,width=0.45\textwidth] @@ -2662,9 +2643,9 @@ child{ \end{LTXexample} Notez qu'un seul point-virgule \verb=;= (et donc une seule commande) a été nécessaire pour tracer ce graphe.\\ -Remarquez aussi que l'options \verb%violet% a été appliquée à tous les enfants de \og maman \fg{}, il s'agit de subtilités dans l'ordre de déclaration des options. Je ne rentrerais pas ici dans ces détails, mais sachez juste que le changement de style des chemins est un peu plus subtil que la méthode que je vous ai présenté ici. Si cela vous intéresse n'hésitez pas à consulter la documentation de \verb=TikZ=. +Remarquez aussi que l'options \verb%violet% a été appliquée à tous les enfants de \og maman \fg{} ; il s'agit de subtilités dans l'ordre de déclaration des options. Sans entrer dans les détails, le changement de style des chemins est un peu plus subtil que la méthode présentée ici. Si cela vous intéresse, n'hésitez pas à consulter la documentation de \texttt{TikZ}. -\startaurel Je peux l'expliquer si besoin, mais ça demande deux-trois commandes en plus et un exemple. Du coup comme je me dit que le but c'est surtout de montrer que les arbres existent ça vaut pas forcément le coup de ralonger encore non ? \closeaurel +%\startaurel Je peux l'expliquer si besoin, mais ça demande deux-trois commandes en plus et un exemple. Du coup comme je me dit que le but c'est surtout de montrer que les arbres existent ça vaut pas forcément le coup de ralonger encore non ? \closeaurel \section{Divers trucs et astuces} @@ -2672,40 +2653,40 @@ Remarquez aussi que l'options \verb%violet% a été appliquée à tous les enfan \subsection{Une solution au problème du temps de compilation} \label{subsec:external} -Le plus gros défaut des langages \TeX{}, c'est que le moindre changement demande une recompilation pour être visible. En temps normal ce n'est pas si gênant car les compilateurs sont assez rapides, mais ce petit défaut peut devenir extrêmement pénible et laborieux si votre document comporte de très nombreux graphes \verb=TikZ= qu'il faut recompiler à chaque passe. +Le plus gros défaut des langages \TeX{}, c'est que le moindre changement demande une recompilation pour être visible. En temps normal, ce n'est pas si gênant car les compilateurs sont assez rapides, mais ce petit défaut peut devenir extrêmement pénible et laborieux si votre document comporte de très nombreux graphes \texttt{TikZ} qu'il faut recompiler à chaque passe. -S'il est impossible de réduire le temps de compilation des graphes, il est néanmoins possible de s'organiser afin de ne pas recompiler un graphe que l'on ne modifiera plus : il suffit pour cela \textit{d'externaliser} les graphes en sauvegardant le résultat de leur compilation dans des fichiers intermédiaires. +S'il est impossible de réduire le temps de compilation des graphes, il est néanmoins possible de s'organiser afin de ne pas recompiler un graphe que l'on ne modifiera plus : il suffit pour cela d'\emph{externaliser} les graphes en sauvegardant le résultat de leur compilation dans des fichiers intermédiaires. -L'externalisation des graphes \verb=TikZ= se fait avec la bibliothèque \verb=\usetikzlibrary{external}=. +L'externalisation des graphes \texttt{TikZ} se fait avec la bibliothèque \verb=\usetikzlibrary{external}=. Elle s'active alors par la commande \verb%\tikzexternalize[prefix=tikz/]%. L'option \verb=prefix= prend en argument le nom du dossier dans lequel vous voulez ranger les graphes intermédiaires. Il faut que ce dossier existe déjà, le compilateur ne le créera pas pour vous ! -Il faut de plus que vous autorisiez le compilateur à utiliser un programme externe, en ajoutant l'option de compilation \verb=--shell-escape= ou \verb=--enable-write18=. Il est également possible d'ajouter cette option avec \verb%\tikzexternalize[prefix=tikz/,shell escape=-shell-escape]%, a condition que ce soit fait dans le préambule. +Il faut de plus que vous autorisiez le compilateur à utiliser un programme externe, en ajoutant l'option de compilation \verb=--shell-escape= ou \verb=--enable-write18=. Il est également possible d'ajouter cette option avec \verb%\tikzexternalize[prefix=tikz/,shell escape=-shell-escape]%, à condition que ce soit fait dans le préambule. -Enfin voici quelques autres commandes utiles d'\textit{external} : +Voici quelques autres commandes utiles d'\emph{external} : \begin{itemize} - \item \verb=\tikzsetnextfilename{}= permet de donner le nom du fichier dans lequel sera enregistré le prochain graphe. Celà permet d'organiser vos graphes par nom et pas par ordre d'apparition, évitant ainsi de bouleverser la compilation si vous changez l'ordre des graphes - \item \verb=\tikzexternaldisable= désactive l'externalisation pour tous les graphes situés après cette commande - \item \verb=\tikzexternalenable= réactive l'externalisation pour tous les graphes situés après cette commande + \item \verb=\tikzsetnextfilename{}= permet de donner le nom du fichier dans lequel sera enregistré le prochain graphe. Cela permet d'organiser vos graphes par nom et pas par ordre d'apparition, évitant ainsi de bouleverser la compilation si vous changez l'ordre des graphes ; + \item \verb=\tikzexternaldisable= désactive l'externalisation pour tous les graphes situés après cette commande ; + \item \verb=\tikzexternalenable= réactive l'externalisation pour tous les graphes situés après cette commande. \end{itemize} -\subsection{Exporter du code TikZ avec un logiciel externe} +\subsection{Exporter du code Ti$k$Z avec un logiciel externe} -Une des grandes forces de \verb=TikZ=, c'est que de nombreux logiciels de tracés ont développés des exporteurs qui convertissent vos graphes en code \verb=TikZ=, vous épargnant ainsi l'effort d'écriture et permettant néanmoins l'intégration naturelle de vos graphes dans \LaTeX{}. +Une des grandes forces de \texttt{TikZ}, c'est que de nombreux logiciels de tracés ont développé des exporteurs qui convertissent vos graphes en code \texttt{TikZ}, vous épargnant ainsi l'effort d'écriture et permettant néanmoins l'intégration naturelle de vos graphes dans \LaTeX{}. Voici une liste non exhaustive des logiciels offrant cette possibilité : -Commençons bien sur par les logiciels sous license libre : +Commençons d'abord par les logiciels sous licence libre : \begin{itemize} - \item Geogebra : logiciel de mathématiques dynamiques. Les dernières version de Geogebra ont une fonction d'export dans File$\rightarrow$Export$\rightarrow$Graphics view as PGF/TikZ - \item Python et son module matplotlib : langage de programmation complet avec son module de tracé de graphiques. Un exporteur efficace est disponible sur github : \url{https://github.com/nschloe/matplotlib2tikz} - \item Gnuplot : logiciel en ligne de commande de tracé de fonctions et graphes. En le compilant depuis les sources avec inclusion de \verb=Lua= il est possible d'avoir accès à un terminal \verb=TikZ= depuis la console Gnuplot : \url{http://www.gnuplotting.org/installing-the-tikz-terminal/} - \item svg2tikz, un script sous licence GNU GPL permettant de convertir un graphe vectoriel SVG (comme celui produit par le logiciel de dessin vectoriel Inkscape) en code tikz : \url{https://github.com/kjellmf/svg2tikz} + \item Geogebra : logiciel de mathématiques dynamiques. Les dernières versions de Geogebra ont une fonction d'export dans File $\rightarrow$ Export $\rightarrow$ Graphics view as PGF/Ti$k$Z ; + \item Python et son module matplotlib : langage de programmation complet avec son module de tracé de graphiques. Un exporteur efficace est disponible sur github : \url{https://github.com/nschloe/matplotlib2tikz} ; + \item Gnuplot : logiciel en ligne de commande de tracé de fonctions et graphes. En le compilant depuis les sources avec inclusion de \verb=Lua= il est possible d'avoir accès à un terminal \texttt{TikZ} depuis la console Gnuplot : \url{http://www.gnuplotting.org/installing-the-tikz-terminal/} ; + \item svg2tikz, un script sous licence GNU GPL permettant de convertir un graphe vectoriel SVG (comme celui produit par le logiciel de dessin vectoriel Inkscape) en code \texttt{TikZ} : \url{https://github.com/kjellmf/svg2tikz}. \end{itemize} -Et enfin quelques logiciels propriétaires, mais néanmoins très utilisés : +Quelques logiciels propriétaires, mais néanmoins très utilisés : \begin{itemize} - \item Matlab : logiciel de calcul numérique. Un script d'export est disponible ici : \url{http://www.mathworks.com/matlabcentral/fileexchange/12962-matfig2pgf} - \item Qtiplot : logiciel d'analyse et visualisation de données, une extension permet l'export en \TeX{} : \url{http://soft.proindependent.com/qtexengine/} + \item Matlab : logiciel de calcul numérique. Un script d'export est disponible ici : \url{http://www.mathworks.com/matlabcentral/fileexchange/12962-matfig2pgf} ; + \item Qtiplot : logiciel d'analyse et visualisation de données. Une extension permet l'export en \TeX{} : \url{http://soft.proindependent.com/qtexengine/}. \end{itemize}