\chapter{Dessiner avec \texttt{PSTricks}} \label{chap_dessin_pst}\textbf{Il n'y a rien de pire que d'apprendre une notion, de l'appréhender, d'expérimenter \dots{} pour se rendre compte qu'une autre est meilleure et qu'il faille tout recommencer depuis le début.} \\ C'est ce qui m'est arrivé avec \verb?PSTricks?. J'ai appris à dessiner avec ce package, qui requiert de compiler sous \verb?LaTeX? ou \verb?XeLaTeX?. Puis, j'ai découvert \verb?TikZ?, qui fonctionne avec n'importe quel mode de compilation. Je ne vais pas supprimer mon travail initial. Tu peux le consulter. Mais je te recommande de passer directement au chapitre suivant sur \verb?TikZ?. \section{Fonctionnement général} Selon le dessin à réaliser, il faut charger un ou plusieurs packages : \begin{itemize}[label = \ding{213}] \item \verb?pstricks? : la base pour dessiner avec \verb?PSTricks?, \item \verb?pst-circ? : pour dessiner des circuits électriques, \item \verb?pst-node? : pour dessiner des diagrammes, \item \verb?pst-eucl? : pour dessiner des figures géométriques, \item \verb?pstricks-add? : pour ajouter de nouvelles commandes, comme la rotation d'objets par exemple. \\ \end{itemize} Ensuite, pour indiquer à \LaTeX{} que nous souhaitons dessiner une image sous \verb?PSTricks?, il faut utiliser l'environnement \verb?pspicture?, suivi de la taille maximale de l'image au format \og ($x_{max}$,$y_{max}$) \fg{}. Une option supplémentaire, \verb?[showgrid = true]?, est très utile pour visualiser le résultat avec un quadrillage en arrière-plan. Ce dernier permet de corriger des points mal placés ou de faciliter les décalages à faire. \\ Bon, allons faire quelques essais pour mieux saisir le principe de fonctionnement. \section{Dessiner des circuits électriques} Le principe de fonctionnement est très simple. Imagine que tu dessines ton circuit électrique sur une feuille de papier. Dans le coin inférieur gauche, tu places un repère et son origine puis tu considères qu'un composant, un fil, etc. revient à se déplacer d'une unité. Honnêtement, si tu es arrivé jusqu'à cette partie du guide, tu devrais pouvoir aller jeter un coup d'{\oe}il à l'aide sans problème, surtout pour avoir accès à toutes les options disponibles. Je n'ai ni l'envie ni le besoin de le faire ici : quelqu'un l'a parfaitement bien fait à ma place ! \\ Mais comme je ne suis pas un monstre, voici deux petits exemples pour te mettre en bouche : \begin{code}{Un cas minimaliste} \documentclass[a4paper, 12pt]{report} % LaTeX \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[french]{babel} \usepackage{lmodern} \usepackage{amsmath, amsfonts, amssymb, upgreek} \usepackage[dvipsnames]{xcolor} % Pour les couleurs si besoin \usepackage{pst-circ} % Pour les circuits électriques \begin{document} \everymath{\displaystyle} \begin{pspicture}[showgrid = true](5,2) % showgrid affiche le quadrillage % Permet de se repérer au début et en cas d'erreur % A mettre sur false lors de la génération du résultat final % Composants \resistor(1,1)(2,1){$R$} % Les coordonnées à renseigner sont celles des extrémités du composant \coil[dipolestyle = curved](3,1)(4,1){$L$} % Fils \wire[intensitylabel = $I$, intensitycolor = red, intensitylabelcolor = red](0,1)(1,1) % Ou mettre le texte en rouge avec \textcolor \wire(2,1)(3,1) \wire(4,1)(5,1) % Annotations \tension[labeloffset = -0.5](0.5,0.5)(2.5,0.5){$V$} % Si coordonnées non entières, utiliser un point \end{pspicture} \end{document} \end{code} \begin{code}{Un cas plus complet} \documentclass[a4paper, 12pt]{report} % LaTeX \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[french]{babel} \usepackage{lmodern} \usepackage{amsmath, amsfonts, amssymb, upgreek} \usepackage[dvipsnames]{xcolor} % Pour les couleurs si besoin \usepackage{pst-circ} % Pour les circuits électriques \begin{document} \everymath{\displaystyle} \begin{pspicture}[showgrid = true](8,3) % Composants \resistor(2,1)(2,2){$R$} \coil[dipolestyle = curved](4,1)(4,2){$L$} % Un affichage possible pour une bobine \coil[dipolestyle = elektor](6,3)(7,3){$l$} % Un autre format d'affichage \resistor(8,1)(8,2){$\cfrac{r}{g}$} % Fils \wire[intensitylabel = $I$, intensitylabeloffset = 0.5](0,3)(2,3) \wire(2,3)(4,3) \wire[intensitylabel = $I'$](4,3)(6,3) \wire(7,3)(8,3) \wire(0,0)(8,0) \wire(2,0)(2,1) \wire(2,2)(2,3) \wire(4,0)(4,1) \wire(4,2)(4,3) \wire(8,0)(8,1) \wire(8,2)(8,3) % Annotations \tension(0,0)(0,3){$V$} \end{pspicture} \end{document} \end{code} \begin{conseilbox}{Conseil personnel} La génération sous \verb?XeLaTeX? peut se révéler assez longue, surtout si tu cumules de nombreux circuits. \\ Après des essais, le temps d'attente est négligeable avec une compilation sous \verb?LaTeX? puis \verb?Dvi -> PS? puis \verb?PS -> PDF?. Tu peux donc éventuellement rédiger tout ton rapport avec ce mode de compilation. En revanche, ce dernier ne tolère pas les fichiers \verb?.png? ou \verb?.jpg? pour les images. Il faut donc les convertir en fichier \verb?.eps?, grâce au logiciel \verb?GIMP? par exemple. \end{conseilbox} \begin{attentionbox}{\textit{Nota Bene}} Tu pourras remarquer que le guide de \verb?pst-circ? utilise une commande \verb?pnode? pour définir les n{\oe}uds et leur donner une lettre. \\ Sache que ce n'est pas absolument pas nécessaire (la preuve avec mes exemples) et, personnellement, je ne te recommande pas de le faire. Je trouve que c'est plus beaucoup plus long s'il faut déplacer des points. \end{attentionbox} Bon, si tu viens de te rendre compte que \LaTeX{} est extrêmement puissant pour dessiner des circuits d'aussi bonne qualité, sache que ce n'est pas fini. Allons dessiner tout court. \section{Dessiner tout court} Pour dessiner avec \texttt{PSTricks}, le principe est extrêmement similaire : tu définis des traits ou des formes à partir de coordonnées et \LaTeX{} trace le tout. C'est parti avec un exemple : \begin{code}{Deux dessins} \documentclass[a4paper, 12pt]{report} % LaTeX \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[french]{babel} \usepackage{lmodern} \usepackage{amsmath, amsfonts, amssymb, upgreek} \usepackage{pstricks} % Pas besoin du package xcolor ici % pstricks l'importe automatiquement \begin{document} % Coefficient de transmission thermique d'une paroi \begin{pspicture}(7,4) \psline[linecolor = green](1.5,4)(1.5,0) % Pour tracer une ligne \psline(2.5,4)(2.5,0) \psline(3.5,4)(3.5,0) \psline(4.5,4)(4.5,0) \psline[linecolor = green](5.5,4)(5.5,0) \psline[linecolor = red]{->}(0,2)(7,2) \psframe[fillstyle = hlines](1.5,0)(2.5,4) % Pour tracer un rectangle \psframe[fillstyle = vlines](3.5,0)(4.5,4) \psframe[fillstyle = crosshatch](4.5,0)(5.5,4) \rput(2,-0.25){1} % Pour placer une information \rput(3,-0.25){2} \rput(4,-0.25){3} \rput(5,-0.25){4} \rput(1.5,4.25){\textcolor{green}{$T_{S_a}$}} \rput(5.5,4.25){\textcolor{green}{$T_{S_b}$}} \rput(7,1.75){\textcolor{red}{$\Phi$}} \rput(0,3){Ambiance a} \rput(7,3){Ambiance b} \rput(0,2.5){$T_a$} \rput(7,2.5){$T_b$} \end{pspicture} \vspace{2\baselineskip} % Création d'un domaine hachuré \begin{pspicture}(7,7) % Repère \psline{->}(0,1)(7,1) \psline{->}(1,0)(1,7) \uput[d](7,1){$t_A$} % Plus pratique pour placer une indication décalée % d = down ; u = up ; l = left ; r = right \uput[ul](1,7){$t_B$} % Combinaison de position possible DANS CETTE ORDRE (lu ne fonctionne pas) \pscircle[fillcolor = black, fillstyle = solid](6,1){0.1} % Pour tracer un cercle + le remplir \uput[d](6,1){30} % Carré et Delta_t (domaine hachuré) \psline(6,1)(6,6)(1,6) \pspolygon[linecolor = red, hatchcolor = red, fillstyle = hlines](3,1)(6,4)(6,6)(4,6)(1,3)(1,1)(3,1) \rput(6.4,6.4){\textcolor{red}{$\Delta_t$}} \pscircle[linecolor = red, fillcolor = red, fillstyle = solid](3,1){0.1} \rput(3,0.6){\textcolor{red}{$t$}} \pscircle[linecolor = red, fillcolor = red, fillstyle = solid](1,3){0.1} \rput(0.6,3){\textcolor{red}{$t$}} \end{pspicture} \end{document} \end{code} \begin{conseilbox}{Pour plus de commandes} Je ne vois aucun intérêt à faire une liste des commandes et des options possibles. Je t'ai fourni deux exemples pour que tu aies un aperçu du rendu et des possibilités mais à toi d'aller te documenter par la suite. \\ Je te recommande particulièrement d'aller sur : \url{http://fr.wikibooks.org/wiki/LaTeX/Dessiner_avec_LaTeX/Dessiner_avec_PSTricks}. C'est assez complet. \end{conseilbox} \section{\'Eclair} Il s'agit d'un dessin que j'ai trouvé sur Internet mais dans un format trop petit. Comme j'en avais besoin, j'ai décidé de le dessiner. Depuis, il est même devenu mon logo personnel ! Cependant, la nature ne m'a pas doté de talents artistiques incroyables, que ce soit sur papier ou une souris à la main. \\ Heureusement, Dieu (alias Donald \textsc{Knuth} et Leslie \textsc{Lamport}) a inventé \LaTeX{}, tandis que Spencer \textsc{Kimball} et Peter \textsc{Mattis} ont créé \texttt{GIMP}. J'ai donc pris un papier, reproduit le dessin rapidement et placé les points nécessaires. Avec l'outil mesure de \texttt{GIMP}, j'ai déterminé toutes les distances et donc toutes les coordonnées des points en question. Avec l'outil pipette, j'ai sélectionné la couleur et suis allé regarder les options pour obtenir le code RGB. \\ Trois minutes de code plus tard sous \LaTeX{}, le dessin est prêt. Il y a juste un petit problème d'affichage donc j'ai ajouté quelques packages pour avoir une page à la taille voulu (au revoir le A4). \begin{code}{Le code en question} % Compiler sous le mode LaTeX \documentclass[12pt]{report} \usepackage[french]{babel} \usepackage[paperwidth = 50cm, paperheight = 90cm, left = 2cm, top = 2cm]{geometry} \pagestyle{empty} \usepackage{pstricks} \definecolor{bleucyan}{RGB}{59,195,235} % Rappel : pstricks charge xcolor \begin{document} \begin{pspicture}(34,77) \pspolygon*[linecolor = bleucyan](13,0)(33,27)(19,27)(33,50)(16,50)(30,76)(0,34)(9,34)(6,25)(15,39)(9,39)(13,45)(22,45)(8,22)(24,22)(13,0) \end{pspicture} \end{document} \end{code} \section{Tête} De même, voici une autre ``création'', ou du moins copie personnelle. Dessinée de la même manière que décrite précédemment, le travail complémentaire a juste consisté à la mettre aux bonnes dimensions grâce à \texttt{GIMP} puis à l'insérer dans un document \LaTeX{} en tant qu'image pour impression. \\ Un peu de papier calque m'a ensuite permis de reproduire le motif là où j'en avais envie \dots{} Simple mais diablement efficace ! \begin{code}{Le code en question - Le retour} % Compiler sous le mode LaTeX \documentclass[12pt]{report} \usepackage[french]{babel} \usepackage[paperwidth = 70 cm, paperheight = 60 cm, left = 2 cm, right = 2 cm, top = 2 cm, bottom = 2 cm]{geometry} \pagestyle{empty} \usepackage{pstricks} \begin{document} \begin{pspicture}(64,50) \psset{linewidth = 0.15} % Réglage des paramètres % Partie supérieure - Début sommet corne gauche \pscurve(0,45)(1,43)(3,39.5)(6,38) \psline(6,38)(15,38) \pscurve(15,38)(17.5,43)(20,45)(24,46) \psline(24,46)(36,46) \pscurve(36,46)(40,45)(42.5,43)(45,37) \psline(45,37)(53,37) \pscurve(53,37)(55,37.5)(60,43) % Sommet corne droite \pscurve(60,43)(60,37)(56,31)(53,30) \psline(53,30)(47,30)(49,18)(44,24)(40,18)(36,24)(31,19)(27,24)(22,18)(18,24)(13,20)(13,29)(10,29) \pscurve(10,29)(7,30)(0,38)(0,45) % Partie inférieure - De la gauche vers la droite \psline(14,8)(14,10)(18,16)(23,11)(27,17)(32,10)(36,17)(40,10)(45,17)(48,12)(48,10) \pscurve(48,10)(43,5)(34,0) \psline(34,0)(29,0) \pscurve(29,0)(20,4)(14,8) % Oeil gauche \psline(21,36)(21,32) \pscurve(21,32)(22.5,30)(24,29) \psline(24,29)(27,29)(21,36) % Oeil droit \psline(40,37)(34,29)(36,29) \pscurve(36,29)(38,30)(39.5,31.5)(40,33) \psline(40,33)(40,37) \end{pspicture} \end{document} \end{code} \section{Utiliser des coordonnées} Dans une optique d'automatisation des dessins (un système d'amortisseur en mécanique ou un circuit RLC, utilisés de nombreuses fois, par exemple), il est possible de créer une commande. L'argument principal de cette commande serait alors un point de départ pour le schéma (en bas à gauche, en haut à droite ou ailleurs, au choix). Sous \verb?PSTricks?, il s'agirait d'un n{\oe}ud (\verb?node?) et tous les autres sont définis à partir de ce n{\oe}ud d'origine (décalage des abscisses et des ordonnées). L'origine sert donc de ``point d'ancrage'' pour positionner le dessin et le reste est construit automatiquement. \\ Pour ce faire, il faut procéder de la manière suivante : \begin{itemize}[label = \ding{118}] \item en plus de \verb?pstricks?, charger le package \verb?pst-node?, \item définir tous les n{\oe}uds grâce à la commande : \begin{center} \verb?\psnodes(x1,y1){noeud1}..(xN,yN){noeudN}?\end{center} En l'occurrence, le n{\oe}ud 1 est l'origine ; \verb?(x1,y1)? est donc remplacé par \verb?(#1)? (argument de la commande), \item définir les \verb?(xi,yi)? en commençant par un \verb?!? et selon la méthode NPI (cf. encadré ci-après), \item récupérer les coordonnées selon l'une des deux manières suivantes : \begin{itemize}[label = \ding{213}] \item utiliser la commande \verb?\psGetNodeCenter{noeudi} noeudi.Z?, où \verb?Z? correspond à \verb?x? ou \verb?y? (respectivement, récupération de l'abscisse ou de l'ordonnée), \item OU BIEN, introduire la commande \verb?saveNodeCoors? dans les options de l'environnement \verb?pspicture? et utiliser ensuite la commande \verb?N-noeudi.Z?. \\ \end{itemize} \end{itemize} Il est aussi possible de définir des longueurs pour continuer de généraliser la commande, comme nous le verrons dans l'exemple qui va suivre. \begin{boite}{La Notation Polonaise Inverse}{Orchid} Selon Wikipédia, \og la notation polonaise inverse (NPI) (en anglais RPN pour Reverse Polish Notation), également connue sous le nom de notation post-fixée, permet d'écrire de façon non ambiguë les formules arithmétiques sans utiliser de parenthèses. \fg{} Concrètement, pour utiliser un exemple, l'opération $((1 + 2) \times 4) + 3$ peut être notée en NPI \verb?1 2 + 4 x 3 +?. Il suffit de partir de la gauche, de prendre deux éléments et un opérateur, de faire le calcul et de le remplacer. Pour détailler, nous avons donc ici : \begin{itemize}[label = \ding{213}] \item \verb?1 2 + 4 x 3 +? : prendre \verb?1 2 +? qui devient $1 + 2$ soit 3, \item passage à \verb?3 4 x 3 +? : prendre \verb?3 4 x? qui devient $3 \times 4$ soit 12, \item passage à \verb?12 3 +? qui devient $12 + 3$ soit 15. \\ \end{itemize} Dans le cadre de \verb?PSTricks?, le fonctionnement est le même sauf que les opérateurs suivants sont utilisés : \verb?add?, \verb?sub?, \verb?mul? et \verb?div?, respectivement pour addition, soustraction, multiplication et division. \end{boite} Avec un exemple commenté, nous obtenons : \begin{code}{Exemple d'utilisation des coordonnées} % Compiler sous le mode LaTeX \documentclass[a4paper, 12pt]{report} \usepackage[french]{babel} \usepackage{amsmath, amsfonts, amssymb} \usepackage[dvipsnames]{xcolor} \usepackage{pstricks, pst-node, pstricks-add} % pst-node pour les noeuds et le calcul de nouvelles coordonnées % pstricks-add pour la commande \psrotate \newcommand{\textedbox}[4]{\pnodes(#1){origine}(#2){fin} \psframe[#3](origine)(fin) \rput(!N-fin.x N-origine.x add 2 div N-fin.y N-origine.y add 2 div){\parbox{\linewidth}{\centering #4}}} \newcommand{\amortisseur}[3]{\pnodes(#1,#2){A}(!#1 1 sub #2){B}(!#1 1 sub #2 1 add){C}(!#1 #2 1 add){D}(!#1 0.5 sub #2 1 add){F}(!#1 0.5 sub #2){E}(!#1 0.5 sub #2 0.5 add){G}(!#1 0.5 add #2 0.5 add){H}(!#1 1 sub #2 0.5 add){I}(!#1 2 sub #2 0.5 add){J}(!#1 0.5 sub #2){K}\psline(A)(B)(C)(D) \psline(F)(E) \psline(G)(H) \psline(I)(J) \uput[d](K){#3}} \begin{document} \begin{pspicture}[showgrid = true, saveNodeCoors](10,5) % saveNodeCoors ssi utilisation de N-node_name.x/y \def\longueur{4 } % Espace OBLIGATOIRE (sinon rien ne s'affiche) \def\decalage{0.5 } % Définition de longueurs % Possibilité de les mettre en argument d'une commande % Une option brute \pnodes(1,1){origine}(!\psGetNodeCenter{origine} origine.x \longueur add origine.y \longueur add){fin} \psframe(origine)(fin) \psline[linecolor = Orchid]{|<->|}(!N-origine.x N-origine.y \decalage sub)(!N-fin.x N-fin.y \longueur \decalage add sub) % Une commande créée avec l'option saveNodeCoors \rput(4,0){\psrotate(2.5,2.5){90}{\textedbox{0,2}{5,3}{linecolor = Red, framearc = 0.5, linestyle = dashed, fillstyle = hlines, hatchcolor = gray}{\textcolor{Cyan}{Texte}}}} % Une autre possibilité \rput(9,2.5){\psframebox[linecolor = Orange, framesep = 13pt]{\Large Test}} \end{pspicture} \vspace{2\baselineskip} Un cas plus concret avec un amortisseur, moins élégante mais qui fonctionne : \begin{pspicture}[showgrid = true](3,2) \amortisseur{2}{0.5}{$\mu$} \end{pspicture} \end{document} \end{code} Comme tu peux le constater, la définition des n{\oe}uds avec cette méthode est, certes, laborieuse mais peut se révéler très pratique avec la possibilité de créer des commandes : au lieu d'avoir une entrée pour l'abscisse de l'origine et une autre pour son ordonnée, tout passe avec un argument et \verb?PSTricks? fait le reste. Autrement, dans la définition des n{\oe}uds, avec cette notation, il ne faut \textbf{pas oublier} le \verb?!? et il est important de noter que la séparation des abscisses et des ordonnées se fait SANS virgule\footnote{Pourquoi ? Je n'en sais rien, ça marche comme ça et c'est très bien. Mais il doit bien y avoir une raison \dots{}}. \section{Des boîtes pour le texte} Peut-être l'as-tu remarqué dans mon précédent exemple mais il est possible de créer des boîtes avec le texte centré et tout et tout. Ma commande, définie dans l'exemple précédent, serait ``parfaite'' (de mon point de vue, après, tout est relatif) s'il était possible d'extraire la longueur de la boîte pour l'intégrer comme argument de la \verb?parbox? \dots{} Sans succès pour l'instant. Mais il semblerait qu'elle fonctionne grâce à un petit \verb?\linewidth?. Tant mieux. \\ Sinon, il existe d'autres possibilités sous \verb?PSTricks? comme la commande \verb?PSTextFrame?. Une piste à explorer \dots{} \section{Réaliser des intersections} Tu as envie de tracer un contour qui correspond à l'intersection de deux cercles mais tu ne sais pas comment faire \dots{} Pas de panique, il existe une solution. Je vais présenter celle disponible sous \verb?PSTricks?, même s'il en existe une aussi sous \verb?TikZ? (comme elles portent le même nom, la documentation est facile à trouver). Il s'agit d'utiliser le ``\verb?clip?''. Le fonctionnement est très simple : tu définis la zone d'intersection puis tu places un objet assez grand (comme un rectangle) et paf ! Tu obtiens des Chocapics \dots{} bon ok, quand même pas mais le résultat escompté est là et c'est déjà ça. \begin{code}{Réaliser des intersections} % Compiler sous le mode LaTeX \documentclass[a4paper, 12pt]{report} \usepackage[french]{babel} \usepackage[dvipsnames]{xcolor} \usepackage{pstricks} \begin{document} \begin{pspicture}[showgrid = true](5,5) \psclip{ \pscircle[linestyle = none](1,2){2} \pscircle[linestyle = none](4,2){2} } % Chemin de coupure % linestyle = none pour ne pas le dessiner \psframe*[linecolor = Cyan](0,0)(4,4) % Remplir l'intérieur du chemin \endpsclip % Affichage du contour du chemin de coupure \pscircle(1,2){2} \pscircle(4,2){2} \end{pspicture} \vspace{2\baselineskip} \begin{pspicture}[showgrid = true](5,5) \psclip{ \rput{-30}(0,2){\psframe[linestyle = none](0,0)(3,2)} % psrotate inopérant --> travailler avec rput (partir de (0,0), rotation puis décalage) \pscircle[linestyle = none](4,2){2} } % Chemin de coupure \endpsclip \psframe*[linecolor = Cyan](0,0)(4,4) \end{pspicture} \end{document} \end{code} \section{Extraction du contour d'une image} Il existe une image, une icône bien spécifique que tu as envie de réexploiter mais elle est trop petite (zoom $\Rightarrow$ pixels immondes) ou bien tu tiens à la créer sous \LaTeX{} pour obtenir une image vectorielle \dots{} Même si le résultat n'est pas encore parfait, c'est possible, plus particulièrement sur des images monochromes. Le plus dur et le seul point qui nous importe est l'obtention du contour de l'image. Dès que nous avons les coordonnées des points, \verb?psline? suffit, quitte à ajouter des options pour le remplissage. Il doit être possible de trouver une commande similaire sous \verb?TikZ?, qui permet aussi de lisser la courbe mais je n'ai rien trouvé de très pratique jusqu'à présent. \\ Par contre, pour réussir à obtenir les coordonnées du contour en question, il faut bidouiller de la manière suivante : \begin{itemize}[label = \ding{118}] \item vectorialiser l'image sous \texttt{Inkscape}, la lisser si nécessaire (enlever les bosses superflues, \dots{}), \item enregistrer le résultat au format \verb?.tex?, \item ouvrir le code obtenu, vérifier les dimensions utilisées puis épurer le code, c'est-à-dire ne garder que les coordonnées et enlever les commandes s'il y en a, \item simplifier les coordonnées (beaucoup de décimales pas forcément utiles, surtout à la vue des dimensions utilisées) $\rightarrow$ possibilité de laisser le traitement à un programme \texttt{Python}, \item insérer les coordonnées obtenues dans le code \LaTeX{} final de ton image, \item bien reporter les dimensions ou les ajuster si besoin : \begin{center} \verb?\psset{xunit = 0.5pt, yunit = 0.5pt}? par exemple \end{center} \item dans le cas où \verb?TikZ? est utilisé, grâce à l'outil \og Remplacer \fg{} de \texttt{Texmaker}, remplacer les \verb?)? des coordonnées en \verb?)--? (règle sous \verb?TikZ? pour faire les tracés). \\ \end{itemize} Normalement, le résultat n'est pas trop moche. Tu peux le lisser sous \verb?PSTricks? sans effort en utilisant la commande \verb?pscurve? au lieu de \verb?psline?. \`A toi de jouer\footnote{Yu-Gi-Oh oh oh \dots{}} désormais ! \begin{codePY}{Simplifier les coordonnées - Le code Python} def reduction(chaine, nombre) : """Réduire la valeur des décimales à "nombre" d'une liste de coordonnées (x,y) (variable chaine)""" resultat = "" i = 0 while i <= len(chaine) - 1 : # Coordonnée x while chaine[i] != "." : # On implémente et on cherche le point (séparateur des décimales) resultat = resultat + chaine[i] i = i + 1 for j in range(0, nombre + 1) : # On implémente la quantité de décimales voulues (nombre) resultat = resultat + chaine[i + j] i = i + nombre + 1 while chaine[i] != "," : # On a implémenté le nombre souhaité de décimales # --> aller à l'autre coordonnées i = i + 1 # Coordonnée y while chaine[i] != "." : # Idem resultat = resultat + chaine[i] i = i + 1 for j in range(0, nombre + 1) : # Idem resultat = resultat + chaine[i + j] i = i + nombre + 1 while chaine[i] != ")" : # Idem i = i + 1 resultat = resultat + chaine[i] i = i + 1 print(resultat) chaine = "(13.10458,13.112)(13.10458,13.112)(13.10458,13.112)" nombre = 2 reduction(chaine, nombre) \end{codePY}