LaTeX/Dessiner avec LaTeX/Dessiner avec PSTricks

Un livre de Wikilivres.
Aller à : navigation, rechercher

Table des matières - Dessiner avec LaTeX - Dessiner en LaTeX pur - Dessiner avec PSTricks - Dessiner avec PGF/TikZ - Dessiner des molécules - Réalisation de graphiques mathématiques - Index - Commandes - Liens externes

PSTricks est une distribution de plusieurs extensions. L'extension de base est pstricks, d'autres extensions peuvent être chargées selon les besoins. L'extension pstricks charge automatiquement l'extension xcolor[1], la couleur est donc automatiquement prise en compte.

L'utilisation de PSTricks nécessite de passer par du PostScript, on ne peut donc pas compiler avec pdftex/pdflatex. On peut toutefois obtenir un fichier PDF à partir du fichier PostScript en utilisant, par exemple, ps2pdf. Signalons que l'extension PDFtricks permet de placer directement des commandes PSTricks dans un document écrit pour pdflatex (voir ci-après).

Les unités par défaut sont le centimètre pour les longueurs et le degré pour les angles. On peut toutefois utiliser des longueurs avec unité.

Contrairement aux commandes de picture, les commandes de PSTricks peuvent être utilisées en dehors d'un environnement graphique, ce sont alors des objets de « largeur nulle » (le caractère suivant est écrit comme s'il n'y avait pas de dessin). Par exemple, si l'on veut rayer un mot, on peut créer la commande suivante :

\usepackage{pstricks}

\newlength{\longueurmot}
\newcommand{\rayer}[1]{%
\settowidth{\longueurmot}{#1}%
#1\psline(0,0.5ex)(-\longueurmot,0.5ex)%
}

(voir aussi ici une autre solution).

Environnement pspicture[modifier | modifier le wikicode]

Si l'on veut que LaTeX prenne en compte le graphique pour placer le texte, il faut placer les instructions dans un environnement pspicture. On passe en paramètre les coordonnées du point en haut à droite, le point (0,0) étant au point de référence (sur la ligne de base là où serait le prochain caractère) :

\begin{pspicture}(x1,y1)
   …
\end{pspicture}

on peut aussi indiquer les coordonnées du point en bas à gauche :

\begin{pspicture}(x0,y0)(x1,y1)
   …
\end{pspicture}

cela décale la position du point (0,0), mais ne change pas l'emplacement de la boîte. Les dimensions de la boîte sont (x1-x0)×(y1-y0).

On peut mettre l'environnement pspicture dans une figure flottante (environnement figure).

Objets de base[modifier | modifier le wikicode]

Segments et lignes brisées[modifier | modifier le wikicode]

Un segment de droite s'obtiennent avec

\psline(x0,y0)(x1,y1)

Pour tracer un vecteur[2] :

\psline{->}(x0,y0)(x1,y1)

Une ligne brisée s'obtient en mettant les points les uns à la suite des autres

\psline(x0,y0)(x1,y1)(x2,y3)…(xn,yn)

On peut tracer une ligne brisée aux angles arrondis avec l'option linearc=valeur, la valeur en question étant le rayon de courbure.

Exemple
\psline[linearc=0.2,->](0,0)(0.5,0.5)(1,1)

Rectangles[modifier | modifier le wikicode]

Pour tracer un rectangle, on utilise la commande \psframe, en indiquant les coordonnées des deux coins en bas à gauche et en haut à droite :

\psframe(x0,y0)(x1,y1)

La commande \psframe* a la même syntaxe donne un rectangle rempli.

On peut tracer des rectangles aux angles arrondis avec l'option framearc=valeur, la valeur en question étant le rayon de courbure.

Exemple
\psframe[framearc=0.2](0,0)(1,1)

Polygones[modifier | modifier le wikicode]

Les polygones sont toujours fermés. Ils sont décrits avec la commande \pspolygon et ont la même syntaxe que \psline :

\pspolygon(x0,y0)(x1,y1)(x2,y3)…(xn,yn)

La commande \pspolygon* donne un polygone rempli.

On peut tracer des polygones aux angles arrondis avec l'option linearc=valeur, la valeur en question étant le rayon de courbure.

Exemple
\pspolygon[linearc=0.2](0,0)(0.5,0.5)(1,1)

Cercles, arcs de cercle, portions de disque et ellipses[modifier | modifier le wikicode]

Les cercles se tracent avec la commande \pscircle :

\pscircle(x,y){r}

où (x,y) sont les coordonnées du cercle et r est son rayon. La commande \pscircle* donne un disque plein.

On peut tracer un arc de cercle avec la commande \psarc :

\psarc(x,y){r}{angle1}{angle2}

angle1 et angle2 sont les angles limitant de l'arc, selon la convention trigonométrique. La commande \psarc* donne une portion de disque pleine délimitée par l'arc et la corde.

On peut tracer une portion de disque façon « part de camembert » avec la commande \pswedge, qui a une syntaxe similaire à \psarc. La commande \pswedge* trace une portion pleine.

Les ellipses se tracent avec la commande \psellipse :

\psellipse(x,y)(axe_horizontal,axe_vertical)

où (axe_horizontal,axe_vertical) sont les longueurs des axes. La commande \psellipse* donne une ellipse pleine.


Exemple
\psarc[->](0,0){1}{270}{315}

Courbes[modifier | modifier le wikicode]

Paraboles[modifier | modifier le wikicode]

On peut tracer un arc de parabole de direction asymptotique verticale avec la commande \psparabola :

\psparabola(x0,y0)(x1,y1)

le somme de la parabole est en (x1,y1), elle passe par (x0,y0) et s'arrête à ce point, et les deux branches sont symétriques.

La commande \psparabola* donne un portion de plan pleine délimitée par l'arc et la corde.

Courbes de Bézier[modifier | modifier le wikicode]

La commande \psbezier permet de tracer une courbe de Bézier avec un nombre arbitraire de points de contrôle, mais composée d'arcs ayant au plus quatre points de contrôle. L'option showpoints=true permet d'afficher les points de contrôle ainsi que les tangentes. La commande \psbezier* donne une surface pleine délimitée par la courbe et la droite joignant les points extrêmes.

Courbe d'interpolation[modifier | modifier le wikicode]

La commande \pscurve crée une courbe passant par tous les points indiqués. La commande \psecurve ne trace pas les premier et dernier arcs, mais prend en compte les points extrêmes pour le calcul de la courbure ; cela permet de s'affranchir d'effets de bord en « forçant » la courbure ou la tangente aux extrémités tracées.

Les commandes étoilées \pscurve* et \psecurve* tracent des surfaces pleines délimitées par la courbe et la droite joignant les points extrêmes.

Texte[modifier | modifier le wikicode]

On peut écrire du texte à un point donné avec la commande rput :

\rput(x,y){texte}

On peut faire tourner le texte d'un angle donné :

\rput{angle}(x,y){texte}

On peut passer en option le point de la boîte de texte qui sera au point (x,y) désigné :

  • B, Bl et Br : respectivement le centre, l'extrême gauche et l'extrême droite de la ligne de base d'écriture (base) ;
  • t, tl et tr : respectivement le centre, l'extrême gauche et l'extrême droite du haut de la boîte (top) ;
  • b, bl et br : respectivement le centre, l'extrême gauche et l'extrême droite du bas de la boîte (bottom)
\rput[référence](x,y){texte}
Exemple
\rput[t]{45}(5,5){texte}

On peut aussi utiliser la commande \uput, qui elle place le texte en décalé par rapport au point indiqué :

\uput{distance}[direction](x,y){texte}

va placer le texte à une distance donnée dans une direction donnée (définie par un angle) par rapport à (x,y). On peut aussi faire tourner le texte d'un angle donné :

\uput{distance}[direction]{rotation}(x,y){texte}

PSTricks propose plusieurs encadrements pour le texte :

  • \psframebox{texte} : cadre rectangulaire ;
  • \psdblframebox{texte} : cadre rectangulaire à filet double ;
  • \psshadowbox{texte} : cadre rectangulaire ombré ;
  • \pstcirclebox{texte} : cadre circulaire ;
  • \psovalbox{texte} : cadre oval ;
  • \psdiabox{texte} : cadre losange ;
  • \pstribox{texte} : cadre triangulaire (triangle isocèle pointe en haut).

Les versions étoilées donnent un cadre plein.

Exemple
\rput(5,5){\psdiabox*[fillcolor=green]{texte}}

L'extension pst-text permet de faire en sorte que le texte épouse une ligne, par exemple obtenue avec \psline, \pspolygon, \pscurve, … On utilise pour cela la commande \pstextpath :

\pstextpath{ligne}{texte}

Mais il faut auparavant annuler le tracé des lignes avec \psset{linestyle=none} si l'on veut avoir le texte seul.

Exemple
\usepackage{pst-text}\begin{pspicture}(5,5)
\psset{linestyle=none}
\pstextpath{\psline(0,0)(1,1)(2,0)}{texte en triangle}
\end{pspicture}

Quadrillage et axes[modifier | modifier le wikicode]

La commande \psgrid crée un quadrillage sur toute l'image (dans un environnement pspicture), avec un pas de 0,2 (2 mm par défaut). On peut lui adjoindre des paramètres :

  • \psgrid(xmax,ymax) : fait un quadrillage de (0,0) à (xmax,ymax) ;
  • \psgrid(xmin,ymin)(xmax,ymax) : fait un quadrillage de (xmin,ymin) à (xmax,ymax) ;
  • \psgrid(x0,y0)(xmin,ymin)(xmax,ymax) : comme précédemment, et le un des nœuds du quadrillage est en (x0,y0).

On peut utiliser les options suivantes :

  • griddots=valeur : le trait plein des graduations principales est remplacé par un trait pointillé, on indique le nombre de points par graduation ;
  • subgriddots=valeur : idem avec les sous-gradations ;
  • gridcolor=couleur, subgridcolor=couleur : couleur des traits de graduation et sous-graduation ;
  • gridwidth=valeur, subgridwidth=valeur : épasseur des traits de graduation et sous-graduation ;
  • subgriddiv=valeur : nombre de sous-graduation entre deux graduations principales ;
  • gridlabels=valeur : taille des nombres étiquetant les graduations ;
  • ticksize=valeur : taille des graduations ;
    • ticksize=valeur valeur si l'on indique deux valeurs, on a des graduations dissymétriques : la première valeur est la longueur du côté des coordonnées négatives, la deuxième est celle du côté des coordonnées positives ;
  • ticklinestyle=valeur : style des graduations (solid, dashed, dotted) ; utile lorsque les graduations sont très grandes (ticksize élevé), ce qui permet de faire un quadrillage (les case de \psgrid dépendent uniquement de l'unité).
Exemple
\psgrid[griddots=5, subgriddiv=0, gridlabels=0pt](-1,-1)(5,5)

Si l'on veut placer des axes, il faut utiliser l'extension pstricks-add qui fournit la commande \psaxes :

\psaxes(xmin,ymin)(xmax,ymax)
\psaxes(x0,y0)(xmin,ymin)(xmax,ymax)

où (xmin,ymin) et (xmax,ymax) sont les extrêmes des axes, et (x0,y0) est le point où se coupent les axes.

On peut ajouter des options :

  • Dx=valeur et Dy=valeur permettent de définir l'espacement entre les graduations ;
  • comma permet d'utiliser la virgule comme séparateur décimal.

Par ailleurs, comme pour les segments, {->} permet de mettre des flèches aux axes.

Exemple
\usepackage{pstricks-add}\begin{pspicture}(-1,-1)(5,5)
\psaxes[comma,Dx=0.5,Dy=0.5]{->}(0,0)(3,3)
\end{pspicture}

Paramètres généraux[modifier | modifier le wikicode]

Toutes les figures[modifier | modifier le wikicode]

On peut ajouter des paramètres optionnels de traits, entre crochet :

  • linewidth=valeur : épaisseur du trait, valeur étant un nombre seul (unité par défaut) ou un nombre avec unité ;
  • linecolor=couleur : couleur du trait (la couleur est définie avec les commandes de xcolor) ;
  • linestyle=valeur : style de ligne, valeur pouvant être dashed (tirets), dotted (pointillés) ;
  • doubleline=true : trait double ;
  • showpoints=true : les extrémités des segments sont surlignés ; on peut définir la taille des points avec dotscale=valeur, et le type de points avec dotsyle=valeur, les valeurs pouvant être
    • * : disque ;
    • o : cercle ;
    • +, x : croix ;
    • square, square* : carré vide ou plein ;
    • diamond, diamond* : losange vide ou plein ;
    • triangle, triangle* : triangle vide ou plein ;

Par exemple

\pscircle[linewidth=0.2,linestyle=dashed,linecolor=blue](0,0){1}

Si des paramètres s'appliquent à plusieurs figures, on peut les définir avec la commande \psset, par exemple

\psset{linewidth=0.2,linestyle=dashed,linecolor=blue}
\pscircle(0,0){1}

Cette commande permet également de changer l'unité par défaut avec les paramètres :

  • unit=valeur, ou
  • xunit=valeur et yunit=valeur si l'on veut avoir des unités différentes selon l'axe,

valeur étant un nombre avec ou sans unité. Cela permet de changer l'échelle d'un dessin, de bénéficier de la graduation automatique des axes, et ne modifie pas l'épaisseur des traits.

Figures ouvertes[modifier | modifier le wikicode]

On peut définir l'extrémité d'une figure ouverte (segment, ligne brisée, arc, …) avec un paramètre optionnel, sous la forme :

\psline{''extrémité0''-''extrémité1''}(''x''0,''y''0)(''x''1,''y''1)

Les différentes extrémités sont :

  • < ou > : flèche ;
  • << ou >> : flèche double ;
  • | : barre collée à l'extrémité ;
  • |* : barre centrée sur l'extrémité ;
  • o : cercle centré sur l'extrémité ;
  • oo : cercle collé à l'extrémité ;
  • * : disque centré sur l'extrémité ;
  • ** : disque collé à l'extrémité ;
  • |< et >| : flèche centrée sur l'extrémité et barre ;
  • c : extrémité arrondie, le disque étant centré sur l'extrémité ;
  • cc : extrémité arrondie, le bord du disque étant à l'extrémité.

Par exemple : <->, >-<, |->, |<->|.

Figures fermées[modifier | modifier le wikicode]

Pour les figures fermées, on peut définir le type de remplissage :

  • fillstyle=valeur : motif de remplissage, les valeurs pouvant être :
    • crosshatch : hachures croisées à 45 °, quadrillage transparent,
    • crosshatch* : idem, quadrillage opaque,
    • vlines et vlines* : hachures simples à -45 °, respectivement transparent et opaque,
    • hlines et hlines* : hachures simples à 45 °, respectivement transparent et opaque,
    • solid : plein ;
  • fillcolor=couleur : couleur de fond ;
  • hatchcolor=couleur : couleur des hachures ;
  • hatchwidth=valeur : épaisseur du trait ;
  • hatchsep=valeur : espacement des traits ;
  • hatchangle=valeur : angle des traits.

Par exemple

\pscircle[hatchcolor=blue,fillstyle=vlines](0,0){1}

Placement des objets[modifier | modifier le wikicode]

Les commandes \rput et \uput peuvent en fait servir à translater n'importe quel objet.

Exemple
\begin{pspicture}(5,5)
\psline{->}(0,0)(1,1)
\rput(1,1){\psline{->}(0,0)(1,1)}
\end{pspicture}
est équivalent à
\begin{pspicture}(5,5)
\psline{->}(0,0)(1,1)
\psline{->}(1,1)(2,2)
\end{pspicture}

On peut répéter le placement avec la commande \multirput :

\multirput(''x''0,''y''0)(''décalage_x'',''décalage_y''){''nombre_de_fois''}{''objet''}

où (décalage_x,décalage_y) est le vecteur séparant deux objets placés consécutivement. On peut ajouter les même options qu'avec \rput (point de référence et angle de rotation) :

\multirput[''référence'']{''angle''}(''x''0,''y''0)(''décalage_x'',''décalage_y''){''nombre_de_fois''}{''objet''}

S'il n'y a pas de texte mais uniquement des objets graphiques, on peut utiliser la commande \multips :

\multips(''x''0,''y''0)(''décalage_x'',''décalage_y''){''nombre_de_fois''}{''objet''}
\multips{''angle''}(''x''0,''y''0)(''décalage_x'',''décalage_y''){''nombre_de_fois''}{''objet''}

Extension PDFTricks[modifier | modifier le wikicode]

L'extension PDFTricks permet d'utiliser PSTricks avec pdflatex. Pour cela, il faut

  • déclarer l'extension PDFTricks dans l'entête ;
  • placer les extensions PSTricks dans une environnement psinputs, et intégrer toutes les commandes PSTricks dans un environnement pdfpic ;
  • sous les environnements Unix, autoriser le lancement d'une commande en ligne depuis le compilateur pdflatex.

Le fichier .tex ressemblera à

\documentclass{article}

\usepackage{pdftricks}
\begin{psinputs}
   \usepackage{pstricks}
   \usepackage{multido}
\end{psinputs}

[...]

\begin{document}

[...]

\begin{pdfpic}
   \psset{unit=\linewidth}
   \begin{pspicture}(0,0)(10,10)
      [...]
   \end{pspicture}
\end{pdfpic}
 
[...]

\end{document}

Pour autoriser le lancement d'une commande en ligne, on lance la compilation avec l'option -shell-escape :

pdflatex -shell-escape {nom_du_fichier}

Exercices[modifier | modifier le wikicode]

Dans les exercices suivants, le but est de :

  • créer des fichiers compilables, notamment contenant un \begin{document} et un \end{document} ; la classe importe peu ;
  • en séparant le fichier image du fichier principal si le document mèle texte et images..

Exercice 1[modifier | modifier le wikicode]

Exercice 1 — cliquer sur l'image pour avoir le code

Réaliser la molécule de benzène ci-contre (format 2×2). On utilisera la géométrie pour avoir un placement exact des segments. On donnera deux solutions :

  1. les coordonnées des points sont calculées par l'utilisateur et entrées dans le code ;
  2. on ne calcule les coordonnées que pour deux sommets consécutifs, puis on utilise une rotation pour placer les autres ; cette solution donne des effets étranges lorsque l'épasseur du trait devient importante et n'est donc pas recommandée, mais est présentée ici à titre d'exercice.

Le rayon du cercle central est arbitraire et ajusté par essai-erreur « pour faire joli ».

Habituellement, on représente plutôt la groupement « debout » (tourné d'un sixième de tour par rapport au dessin présent). Pour le dessin des molécules, mieux vaut utiliser PPChTeX.

Exercice 2[modifier | modifier le wikicode]

Exercice 2 — cliquer sur l'image pour avoir le code

Réaliser l'écrou ci-contre (représentation de type dessin technique, format 2×2). Pour l'hexagone, on utilisera la première solution évoquée ci-dessus.

Le trait fort a une épaisseur de 0,5 mm, soit 0.05 en unité par défaut ; le trait fin a une épaisseur de 0,2 mm, soit 0.02 en unité par défaut.

Notez que les dimensions ne correspondent pas à un écrou normalisé : le but n'étant pas de générer un dessin exact mais d'apprendre à maîtriser PSTricks, on utilise volonteairement des valeurs simples.

Exercice 3[modifier | modifier le wikicode]

Exercice 3 — cliquer sur l'image pour avoir le code

Réaliser l'organigramme ci-contre (format 5×5).

L'extension pst-node permet de simplifier la réalisation de ce type de diagrammes, comme on le verra plus loin.

Exercice 4[modifier | modifier le wikicode]

Exercice 4 — cliquer sur l'image pour avoir le code

Réaliser le document ci-contre.

Exercice 5[modifier | modifier le wikicode]

Exercice 5 — cliquer sur l'image pour avoir le code

Réaliser le document ci-contre, en créant des commandes personnelles pour les objets présents plusieurs fois.

L'image fait 5×5 (unité par défaut), on laisse une marge de 1 en haut, en bas et à droite de la parabole pour pouvoir placer les indications. La tangente aux extrémités faisant un angle supérieur à 45 ° par rapport à l'horizontale, le vecteur vx est plus petit que le vecteur vy , mais la valeur exacte importe peu pour cette représentation schématique.

On placera les éléments de texte relativement aux points particuliers du dessin (extrémités ou milieu des vecteurs, sommet de la parabole).

Extensions complémentaires[modifier | modifier le wikicode]

Gestion des nœuds[modifier | modifier le wikicode]

Représentation d'arborescences[modifier | modifier le wikicode]

Notes[modifier | modifier le wikicode]

  1. l'extension pstcol est obsolète
  2. contrairement à l'habitude, certains paramètres optionnels sont entre accolades dans PSTricks, c'est le cas ici de ->

Voir aussi[modifier | modifier le wikicode]

Sur Wikipédia
sur CTAN

Table des matières - Généralités - Premiers pas - Structure du document - Gestion de la bibliographie - Tableaux - Images - Éléments flottants et figures - Mise en forme du texte - Choix de la police - Mise en page - Mathématiques - Gestion des gros documents - Faire des présentations - Arts et loisirs - Dessiner avec LaTeX - Créer une extension ou une classe - Programmer avec LaTeX - Annexes - Vade mecum - Conversion - Glossaire de typographie - Index - Commandes - Liens externes