\documentclass[10pt,a4paper]{article}
%%% taille 10 points et format de papier A4
%%% classe article

%%% Codage en unicode
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} 

\usepackage{multicol,multirow}%%%         multicolonnes multilignes
\usepackage[normalem]{ulem}%%%   pour texte barré \sout{}
\usepackage[french]{babel}%%%    écriture en français
\DecimalMathComma%%%             évite l'espace après la virgule en mode math
%\usepackage{multido}%%%          pour faire des boucles
\usepackage{pst-all,pst-eucl,pst-func}%%% PsTricks etc.
\usepackage{graphicx}%%%         pour graphiques et couleurs	
\usepackage{amsmath,amsfonts,amssymb}%%% outils AMS
\usepackage{mathrsfs}%%%         police script \mathscr{}
\usepackage{tabularx}%%%         tableaux
\usepackage{fancybox}%%%         divers boîtes
\usepackage{lscape}%%%           mode paysage
\usepackage[np]{numprint}%%%     pour formater les nombres de plus de 3 chiffres
\usepackage{colortbl}%%%         pour griser des cases dans un tableau
\usepackage{makeidx}%%%          pour créer un index
\makeindex%%%                    indispensable après l'appel du package makeidx
\usepackage{lettrine}%%%         pour créer des lettrines
\usepackage{eurosym}%%%          sigle euro
\usepackage{xcolor}

%\usepackage{bez123}%%%     courbes de Bézier

\usepackage{vmargin}%%%          réglage des marges
\setmarginsrb{3cm}{2cm}{3cm}{2cm}{1cm}{1cm}{1cm}{1cm}
% 1 est la marge gauche
% 2 est la marge en haut
% 3 est la marge droite
% 4 est la marge en bas
% 5 fixe la hauteur de l'entête
% 6 fixe la distance entre l'entête et le texte
% 7 fixe la hauteur du pied de page
% 8 fixe la distance entre le texte et le pied de page

\setlength{\parindent}{0pt}%%% règle l'indentation en début de paragraphe 
\setlength{\parskip}{3pt}%%% espacement entre 2 paragraphes

%%%  Commandes perso FH

%%% Pour intégrale, somme et produit, etc.
\newcommand{\ds}{\displaystyle}%%% raccourci pour \displaystyle

%%% ensembles de nombres
%%% On réservera le style "double barre" à l'écriture au tableau
\newcommand{\R}{\textbf{R}}
\newcommand{\N}{\textbf{N}}
\newcommand{\Z}{\textbf{Z}}
\newcommand{\C}{\textbf{C}}
\newcommand{\Q}{\textbf{Q}}
\newcommand{\K}{\textbf{K}}

%%% différents repères
\newcommand{\Oij}{(\text{O}\,;\,\vec{\imath}\,,\,\vec{\jmath})}
\newcommand{\rep}{(\text{O},\text{I},\text{J})}
\newcommand{\Ouv}{(\text{O}\,;\,\vec{u}\,,\,\vec{v})}
%\newcommand{\Oijk}{(\text{O}\,;\,\vec{\imath}\,,\,\vec{\jmath}\,,\,\vec{k})}

%%%  Courbe représentative
\newcommand{\Cr}[1]{\mathscr{C}_{#1}}

%%% crochets gauche et droit
\newcommand{\cg}{\texttt{]}}
\newcommand{\cd}{\texttt{[}}

%%% crochet d'entiers
\newcommand{\cde}{\texttt{[}\!\!\texttt{[}}
\newcommand{\cge}{\texttt{]}\!\!\texttt{]}}

%%% inférieur ou égal, supérieur ou égal
\newcommand{\pg}{\geqslant}
\newcommand{\pp}{\leqslant}

\usepackage{fancyhdr}%%%       En-têtes et pieds de pages
\pagestyle{fancy}
\renewcommand\headrulewidth{1pt}%%% filet haut de page
\renewcommand\footrulewidth{0pt}%%% filet bas de page
\renewcommand{\headwidth}{\textwidth}
%%% head pour haut de page
%%% L C et R pour Left Center et Right
\fancyhead[L]{\url{http://latexetmath.canalblog.com}}
\fancyhead[R]{\today} %%% \today = date du jour
\fancyhead[C]{}
%%% foot pour pied de page
\fancyfoot[C]{\begin{small}-- \thepage\  --\end{small}}  
\fancyfoot[R]{}%%%     {\jobname}%%% nom du fichier tex
\fancyfoot[L]{\href{mailto:francois.hache@free.fr}{FH}}

%%% Pour les énumérations
%%% premier niveau 
\renewcommand{\theenumi}{\textbf{\arabic{enumi}}}
\renewcommand{\labelenumi}{\textbf{\theenumi.}}
%%% deuxième niveau
\renewcommand{\theenumii}{\textbf{\alph{enumii}}}
\renewcommand{\labelenumii}{\textbf{\theenumii.}}
%%% troisième niveau
\renewcommand{\theenumiii}{\textbf{\arabic{enumiii}}}
\renewcommand{\labelenumiii}{\textbf{\theenumiii)}}
%%% permet d'avoir a. au lieu de (a) dans une énumération de niveau 2
%%% voir : http://cahiers.gutenberg.eu.org/cg-bin/article/CG_1994___17_32_0.pdf

\newenvironment{changemargin}[2]
{\begin{list}{}{%
\setlength{\topsep}{0pt}%
\setlength{\leftmargin}{0pt}%
\setlength{\rightmargin}{0pt}%
\setlength{\listparindent}{\parindent}%
\setlength{\itemindent}{\parindent}%
\setlength{\parsep}{0pt plus 1pt}%
\addtolength{\leftmargin}{#1}%
\addtolength{\rightmargin}{#2}%
}\item }{\end{list}}
%%%% pour changer les marges gauche et droite sur un paragraphe
%%%% \begin{changemargin}{marge gauche}{marge droite}
%%%% ...
%%%% \end{changemargin}

\usepackage{hyperref}%%% pour les références

%%% paramètres des pdf
\hypersetup{
pdfauthor = {F. Hache},
pdftitle = {Python et LaTeX},
pdfstartview = FitH,
pdfcreator = {LaTeX vers PDF}
allbordercolors = white,
colorlinks=true,
linkcolor=red,
urlcolor=red,
unicode=true}

%%% Autres commandes qui doivent être définies après hyperref
\newcommand{\e}{\,\text{e}}%%%               le e de l'exponentielle
\renewcommand{\d}{\,\text d}%%%              le d de l'intégration
\renewcommand{\i}{\,\text{i}\,}%%%           le i des complexes
\renewcommand{\v}[1]{\,\overrightarrow{\,\text{#1}\,}}%%% vecteur

%%% définitions de nouvelles couleurs
\newrgbcolor{rb}{0.804 0 0}
\newrgbcolor{vb}{0 0.545 0}

\usepackage{listings}


\begin{document}

\part*{\centering \rb Rognage dans PSTricks}

\section{Position du problème}

\begin{multicols}{2}
On sait que dans  un graphique construit avec \verb!PSTricks!, il suffit d'utiliser \verb!pspicture*! au lieu de \verb!pspicture! pour limiter la figure au rectangle choisi. 

Dans l'exemple ci-contre, pas besoin de se soucier des valeurs de la variable $x$ pour éviter que l'exponentielle sorte du rectangle défini par \verb!\begin{pspicture*}!.

\columnbreak

\begin{center}
\psset{unit=0.6cm}
\def\xmin {-5}   \def\xmax {5} \def\ymin {-1}   \def\ymax {5}
\begin{pspicture*}(\xmin,\ymin)(\xmax,\ymax)
\psgrid[subgriddiv=1,gridlabels=0,gridcolor=lightgray] 
\psaxes[ticksize=-2pt 2pt,labels=none](0,0)(\xmin,\ymin)(\xmax,\ymax) 
\uput[dl](0,0){O}
\psaxes[ linewidth=1.8pt]{->}(0,0)(1,1)[$\vec\imath$,d][$\vec\jmath$,l]
%\uput[dr](1,0){$I$} \uput[l](0,1){$J$}
\def\f{2.7183 x exp}%   fonction exponentielle
\psplot[plotpoints=3000,linecolor=red]{\xmin}{\xmax}{\f}
\end{pspicture*}
\end{center}
\end{multicols}

Il en serait tout autrement si on avait mis \verb!\begin{pspicture}!.

\begin{multicols}{2}
Mais comment faire pour limiter une figure dans une autre figure? 

Dans la figure ci-contre, les arcs de cercle en rouge sont limités par le cercle bleu.

L'emploi de \verb!pspicture*! ne suffit pas!

\columnbreak

\begin{center}
\psset{unit=0.6cm}
\begin{pspicture}(-3,-2)(4,4)
\psgrid[subgriddiv=1,gridcolor=lightgray,gridlabels=0]
\psclip {%%%
\pscircle[linecolor=blue](0,1){2}
}
\pscircle[linecolor=red](-2,0){1}
\pscircle[linecolor=red](2,0){2}
\endpsclip
\pspolygon(-2.5,-1.5)(-2.5,3.5)(3.5,-1.5)
\end{pspicture}
\end{center}
\end{multicols}

\section{\textbackslash{}psclip}

En anglais, \emph{to clip} signifie: couper, rogner

On définit un environnement \verb!\psclip ... \endpsclip!, et dans cet environnement, on définit la \og zone-limite \fg{} que l'on place entre accolades. Enfin on définit la figure qui doit être tracée dans cette zone-limite: 

\begin{tabular}{@{\hspace*{0.2\linewidth}} | p{0.77\linewidth}}
\verb!\begin{pspicture}(xmin,ymin)(xmax,ymax)!\\
\verb!\psclip!\\
\quad \verb!{zone-limite}!\\
\quad \verb!ce qui doit être dans zone-limite!\\
\verb!\endpsclip!\\
\verb!tout ce qu'on veut dessiner d'autre!\\
\verb!\end{pspicture}!\\
\end{tabular}

\medskip

Par exemple, le dessin ci-dessus a été fait avec le code suivant:

\smallskip

\begin{tabular}{@{\hspace*{0.05\linewidth}} | p{0.93\linewidth}}
\verb!\psset{unit=0.6cm}!\\
\verb!\begin{pspicture}(-3,-2)(4,4)!\\
\verb!\psgrid[subgriddiv=1,gridcolor=lightgray,gridlabels=0]!\\
\verb!\psclip%%                                     début environnement!\\
\quad \verb!{\pscircle[linecolor=blue](0,1){2}}%%       zone-limite!\\
\quad \verb!\pscircle[linecolor=red](-2,0){1}%%         intérieur de zone-limite!\\
\quad \verb!\pscircle[linecolor=red](2,0){2}%%          intérieur de zone-limite!\\
\verb!\endpsclip%%                                  fin environnement!\\
\verb!\pspolygon(-2.5,-1.5)(-2.5,3.5)(3.5,-1.5)%%   le triangle!\\
\verb!\end{pspicture}!\\
\end{tabular}

\section{Quelques exemples}

Vous pouvez essayer de réaliser ces figures avant de regarder leur code. \\
J'ai juste rajouté des grilles pour vous faciliter le travail!

\subsection{Visual PSTricks}

Trouvé dans l'excellent document
\href{https://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/ctan/info/visualpstricks/VisuelPSTricks.pdf}{Visual PSTricks}
de \textsc{Jean Pierre Casteleyn}:

\begin{center}
\begin{pspicture}*(-2,-2)(3,2)
\psgrid[subgriddiv=1,gridlabels=0,gridcolor=lightgray] 
\psclip {\psdiamond(.5,.5)(2,1)}
\pscircle[linecolor=red]{.5}
\pscircle[linecolor=red]{1}
\endpsclip
\pscircle[linecolor=green]{1.5}
\end{pspicture}
\end{center}

\subsection{Intersection de deux ensembles}

Trouvé sur le site
\href{http://xymaths.free.fr/Informatique-Programmation/Latex/Dessins-pstricks.php}{xymaths}:

\begin{center}
\psset{unit=0.6cm}
\begin{pspicture}(-6,-3)(6,3)
\psgrid[subgriddiv=1,gridlabels=0,gridcolor=lightgray] 
%%% On trace l'ellipse de droite
\psellipse(2,0)(3,2)
\begin{psclip}%
%%% On définit la zone-limite
{\psellipse(-2,0)(3,2)}
% On colorie l'intersection:
\psellipse[fillstyle=solid,fillcolor=lightgray](2,0)(3,2)
\end{psclip}
% On retrace l'ellipse de gauche
\psellipse(-2,0)(3,2)
\end{pspicture}
\end{center}

C'est évidemment bien meilleur pour représenter l'intersection de deux ensembles que ce que j'avais présenté dans la 
\href{https://p5.storage.canalblog.com/53/24/1082582/127413967.pdf}{chronique 3}
de la saison 5!

\subsection{Composition personnelle}

\begin{center}
\begin{pspicture}(-2,-2)(4,3)
\psclip {%%%
\pscircle(1,0.5){2}
}
\pscircle*[linecolor=red](0,0){2}
\pscircle*[linecolor=white](0,0){1}
\pscircle(0,0){2}
\pscircle(0,0){1}
\endpsclip
\pscircle(1,0.5){2}
\psgrid[subgriddiv=2,gridlabels=0,gridcolor=lightgray] 
\end{pspicture}
\end{center}

À vos dessins!

\end{document}
