LaTeX/Dessiner avec LaTeX/Dessiner avec PSTricks
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
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
modifierSegments et lignes brisées
modifierUn 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
modifierPour 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
modifierLes 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
modifierLes 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}
où 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
modifierParaboles
modifierOn peut tracer un arc de parabole de direction asymptotique verticale avec la commande \psparabola
:
\psparabola(x0,y0)(x1,y1)
le sommet 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
modifierLa 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
modifierLa 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
modifierOn 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
etBr
: respectivement le centre, l'extrême gauche et l'extrême droite de la ligne de base d'écriture (base) ;t
,tl
ettr
: respectivement le centre, l'extrême gauche et l'extrême droite du haut de la boîte (top) ;b
,bl
etbr
: 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
modifierLa 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
etDy=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
modifierToutes les figures
modifierOn 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 dexcolor
) ;linestyle=valeur
: style de ligne, valeur pouvant êtredashed
(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 avecdotscale=valeur
, et le type de points avecdotsyle=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
, ouxunit=valeur
etyunit=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
modifierOn 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
modifierPour 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
etvlines*
: hachures simples à −45 °, respectivement transparent et opaque,hlines
ethlines*
: 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
modifierLes 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êmes 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
modifierL'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 environnementpdfpic
; - 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
modifierDans 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
modifierRé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 :
- les coordonnées des points sont calculées par l'utilisateur et entrées dans le code ;
- 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.
Pour la première solution, il suffit de placer le point (0,0) au centre du pspicture
, les coordonnées du sommet n sont alors (cos(n⋅60°), sin(n⋅60°)) (n allant de 0 à 5).
Pour la seconde solution, l'idée est de partir d'un segment décalé par rapport au centre de l'image, et de faire tourner ce segment de 60° à chaque fois. Il faut donc que le point (0,0) soit au centre du pspicture
. On pourra par exemple prendre le segment du bas comme référence : ses points sont (-sin(30°), -cos(30°))–((sin(30°), -cos(30°)), c'est en fait la base d'un triangle équilatéral dont le sommet est en (0,0).
Exercice 2
modifierRé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
modifierRé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.
pour éviter d'avoir à ajuster la longueur des traits, on ne cherchera pas à s'arrêter exactement au bord des cadres, et on affichera les boîtes de texte en dernier en utilisant l'option fillstyle=solid
. On peut utiliser astucieusement les options de placement par rapport au point de référence.
Exercice 4
modifierRéaliser le document ci-contre.
Exercice 5
modifierRé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
modifierGestion des nœuds
modifierReprésentation d'arborescences
modifierNotes
modifierVoir aussi
modifier- Sur Wikipédia
- sur CTAN