1.  Figures élémentaires avec PSTricks

PStricks est un vaste ensemble de macro-commandes utilisables depuis LaTeX. Le module pstricks-add est préférable car il charge pstricks mais aussi des fonctionnalités supplémentaires.

\usepackage{pstricks-add}
\pspicture(2,1)
\psline(0,1)(2,0)
\psdots(2,0.5)
\endpspicture

\usepackage{pstricks-add}
\pspicture(7,2)
\psline[linestyle=dashed](2,1)
\psline{->}(4,0)(3,2)(0,1)
\psline[linewidth=0.8mm](3,0)(6,2)
\endpspicture

\usepackage{pstricks-add}
\pspicture(7,2)
\pspolygon[linecolor=gray](0,0)(2,0)(1.5,2)
\pspolygon[showpoints=true](3,0)(2,1)(3,2)(4,1)
\pspolygon[fillstyle=solid, fillcolor=red]
 (4,0)(5,2)(6,1)
\endpspicture

\usepackage{pstricks-add}
\pspicture(7,2)
\pscircle[linestyle=dotted](1,1){0.75}
\pspolygon[linearc=0.25,fillstyle=vlines]
(3,0)(2,1)(3,2)(4,1)
\pscircle[fillstyle=solid,fillcolor=black]
(5,1){1}
\pswedge[fillstyle=solid,fillcolor=white]
(5,1){0.8}{45}{180}
\endpspicture

2.  Marquage des points et des dimensions

Avec la commande \uput{dist}[angle](x,y){texte}, on peut positionner texte à une distance dist de (x,y) selon un angle de angle degrés

\usepackage{pstricks-add}
\pspicture(7,2)
\pspolygon(1,0)(3,0)(3,1)(2,2)
\uput[180](1,0){$A$}
\uput[0](3,0){Sommet $B$}
\uput{20pt}[45](3,1){$C$}
\endpspicture

Afin de positionner des dimensions, on dispose de trois commandes :

  • \lput{:U}{texte} positionne texte sur la connexion entre deux points
  • \aput{:U}{texte} positionne texte en dessous (above) de la connexion
  • \bput{:U}{texte} positionne texte au dessus (below) de la connexion
\usepackage{pstricks-add}
\pspicture(7,2)
\pcline(0,0)(2,2) \lput{:U}{lput}
\pcline(1,0)(3,2) \lput*{:U}{lput*}
\pcline(3,0)(5,2) \bput{:U}{bput}
\pcline(5,0)(7,2) \aput{:U}{aput}
\endpspicture

Ces commandes existent aussi sans l’argument de l’angle : \mput, \mput*, \Aput et \Bput :

\usepackage{pstricks-add}
\pspicture(7,2)
\pcline(0,0)(2,2)     \mput{mput}
\pcline(1.5,0)(3.5,2) \mput*{mput*}
\pcline(2.5,0)(4.5,2) \Bput{Bput}
\pcline(5,0)(7,2)     \Aput{Aput}
\endpspicture

Il est maintenant possible de placer différents renseignements sur des figures géométriques :

\usepackage{pstricks-add}
\pspicture(7,2)
\pspolygon(1,0)(2,2)(4,2)(5,0)

\pcline[linestyle=none](2,2)(4,2) \Bput{L1}
\pcline[linestyle=none](1,0)(5,0) \Aput{L2}
\pcline[offset=12pt]{<->}(1,0)(2,2)\mput*{H1}
\pcline[linestyle=none](4,2)(5,0)\lput*{:U}{H2}
\endpspicture

3.  Positionnement, rotation et redimensionnement

La commande \rput(x,y){objet} positionne objet en (x,y):

\usepackage{pstricks-add}
\pspicture(7,2)
\psset{fillstyle=solid}
\psframe[fillcolor=red](2,1)
\rput(1,0.5){\psframe[fillcolor=blue](2,1)}
\endpspicture

On peut ajouter à ce déplacement une rotation :
La commande \rput{angle}(x,y){objet} translate objet d’un vecteur (x,y) après lui avoir appliqué une rotation de angle degrés:

\usepackage{pstricks-add}
\pspicture(7,1.5)
\psset{fillstyle=solid}
\psframe[fillcolor=red](2,1)
\rput{20}(2,0){\psframe[fillcolor=blue](2,1)}
\endpspicture

On spécifie un facteur d’échelle avec \psset{unit=facteur} :

\usepackage{pstricks-add}
\pspicture(7,1.5)
\psset{fillstyle=solid}
\psframe[fillcolor=red](2,1)
\psset{unit=.75}
\psframe[fillcolor=blue](2,1)
\endpspicture

On peut spécifier un facteur d’échelle pour les abscisses ou pour les ordonnées avec \psset{xunit=facteur} et \psset{yunit=facteur}

On remarque dans l’exemple suivant que ces facteurs sont relatifs, pour spécifier un facteur absolu, on précise l’unité; p.ex: \psset{unit=3cm}

\usepackage{pstricks-add}
\newcommand{\mondessin}{
\psline(1,0)(0,4) \psline(2,0)(0,3)
\psline(3,0)(0,2) \psline(4,0)(0,1) }

\pspicture(7,4)
\mondessin

\psset{doubleline=true}
\rput{45}(5,2){
\psset{unit=0.5} \mondessin
\psset{xunit=-1} \mondessin
\psset{yunit=-1} \mondessin
\psset{xunit=-1} \mondessin 
}
\endpspicture

4.  Boucles et coordonnées spéciales

La commande \multido{\i=j+k}{nb}{operation} effectue nb fois operation en incrémentant la variable i de k depuis la valeur d’origine j; autrement dit il s’agit de la boucle for(i=j;i<nbxk;i=i+k).

Avec PsTricks, il est possible d’utilser non seulement les coordonnées cartésiennes séparées par une virgule : (x,y) mais aussi les coordonnées polaires séparées par un point-virgule : (r;a) ou même du code PostScript : (!ps) par exemple (!3 ln 30 cos) pour le point de coordonnées cartésiennes (ln(3),cos(30).

\usepackage{pstricks-add}
\pspicture(-3.5,-1)(3.5,1)
\pscircle(0,0){1} 
\multido{\i=0+30}{12}{ \psline(1;\i) }
\psdots[dotstyle=o](!60 cos 60 sin)
\endpspicture

5.  Exemples divers

\usepackage{pstricks-add}
\psset{unit=0.4}
\pspicture(-7,-2)(7,7)
\psellipse(0,0)(3,1)
\psline(-3,0)(0,6)(3,0)
\psline(0,0.4)(-0.4,0.25)(-0.4,-0.15)
\psline(0,6)(-2,-0.745)
\psline[linestyle=dashed](-2,-0.745)(0,0)
\psline[linestyle=dashed](0,6)(0,0)
\uput[0](0,0){$H$}
\uput[90](0,6){$S$}
\uput[225](-2,-0.745){$A$}
\endpspicture

\usepackage{pstricks-add}
\pspicture(-2.5,-0.75)(2.5,2.5)
\psset{unit=0.5}
\psarc(0,0){5}{0}{180}
\psline(-5,0)(-5,-1.5)(5,-1.5)(5,0)
\psarc(0,0){3}{0}{180}
\psline(0.5,0)(3,0)
\psarc(0,0){0.5}{0}{180}
\psline(-3,0)(-0.5,0)
\pscircle{.05}
\multido{\i=0+2}{90}{\psline(4.5;\i)(5;\i)}
\multido{\i=0+10}{19}{\psline(4;\i)(5;\i)}
\endpspicture

On pourra faire apparaître la graduation en remplaçant la dernière ligne :

\multido{\i=0+10}{19}{\psline(4;\i)(5;\i)}

par :

\multido{\i=0+10}{19}{\psline(4.5;\i)(5;\i) \uput[\i](3.3;\i){\tiny{\i}}}

Dans l’exemple suivant, la commande \pnode(x,y){L} mémorise les coordonnées (x,y) dans la variable L qui peut ensuite être réutilisée par exemple pour tracer un segment. L’option ArrowInside place élément (ici un |) sur le segment (cf page 25) :

\usepackage{pstricks-add}
\newcommand{\marque}[2]{%
 \psline[ArrowInside=-|,linestyle=none,
           ArrowInsidePos=0.51](#1)(#2)
 \psline[ArrowInside=-|,linestyle=none,
           ArrowInsidePos=0.49](#1)(#2)
}

\begin{pspicture}(5,3)

\pnode(1,1){A}\pnode(4,1){B}
\pnode(0,0){D}\pnode(3,0){C}

\psline(A)(C)
\psline[ArrowInside=-|](B)(C) 
\psline[ArrowInside=-|](A)(D) 
\psline(A)(B) \marque{A}{B}
\psline(D)(C) \marque{D}{C}

\uput[135](A){$A$}\uput[0](B){$B$}
\uput[180](D){$D$}\uput[-45](C){$C$}

\end{pspicture}

Pour des exemples étonnants et instructifs :
http://www.gutenberg.eu.org/pub/GUTenberg/publicationsPDF/16-girou.pdf