\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 Diagrammes de Venn et de Carroll}

Pour représenter des ensembles, \texttt{PsTricks} propose quelques outils.

\section{Les outils de PsTricks}

\subsection{Rectangle}

On dessine un rectangle au moyen de l'instruction \verb!\psframe! en désignant les coordonnées de deux points, le sommet inférieur gauche et le sommet supérieur droit.

On peut arrondir les angles en modifiant la valeur de \texttt{framearc} en option.

Voici quelques exemples.

\smallskip

\hfill
\psset{xunit=1cm,yunit=0.9}
\begin{pspicture}(-3,-0.8)(11,1.8)
%\psgrid[subgriddiv=1, griddots=10, gridcolor=gray]
\psframe[framearc=0](-3,-0.9)(-1,1.8) \rput(-2,0.5){framearc} \rput(-2,0){$=0$}
\psframe[framearc=0.2](0,-0.9)(2,1.8) \rput(1,0.5){framearc} \rput(1,0){$=0,2$}
\psframe[framearc=0.4](3,-0.9)(5,1.8) \rput(4,0.5){framearc} \rput(4,0){$=0,4$}
\psframe[framearc=0.6](6,-0.9)(8,1.8) \rput(7,0.5){framearc} \rput(7,0){$=0,6$}
\psframe[framearc=0.8](9,-0.9)(11,1.8) \rput(10,0.5){framearc} \rput(10,0){$=0,8$}
\end{pspicture}
\hfill{}

\subsection{Ellipse}

\begin{minipage}{0.6\linewidth}
En \texttt{PsTricks}, la syntaxe pour dessiner une ellipse est

%\begin{center}
\hfill{}\verb!\psellipse[options](x,y)(rx,ry)!\hfill{}
%\end{center}

où \texttt{(x,y)} désigne les coordonnées du centre de l'ellipse, \\
\texttt{rx} le rayon en \texttt{x} et \texttt{ry} le rayon en \texttt{y}.\\[5pt]
L'ellipse ci-contre est tracée par l'instruction:

\hfill\verb!\psellipse[linecolor=blue](0,0)(2,1)!\hfill{}
\end{minipage}
\hfill
\begin{minipage}{0.33\linewidth}
\hfill
\psset{unit=1cm}
\begin{pspicture}(-2,-1)(2,1)
\psgrid[subgriddiv=1, griddots=10, gridcolor=gray]
\psellipse[linecolor=blue](0,0)(2,1)
\psline[linecolor=vb]{<->}(0,0)(2,0) \rput*(1,0){\vb \texttt{rx}}  
\psline[linecolor=rb]{<->}(0,0)(0,1) \rput*(0,0.5){\rb \texttt{ry}}  
\end{pspicture}
\end{minipage}

\section{Exemples}

\subsection{Un diagramme complet}

Soit $E$ l'ensemble $\{a\,,\,b\,,\,c\,,\,d\,,\,e\,,\,f\,,\,g\,,\,h\,,\,i\,,\,j\,,\,k\,,\,l\,,\,m\}$.\\
Soient $A$, $B$ et $C$ des parties de $E$:
$A=\{c\,,\,e\,,\,h\,,\,i\,,\,j\}$, $B=\{b\,,\,d\,,\,e\,,\,f\,,\,j\,,\,k\}$ et $C=\{i\,,\,j\,,\,k\,,\,l\}$.

\newrgbcolor{sol}{0.8 0 0}%%% mettre 1 1 1 pour blanc

\begin{center}
\psset{unit=1cm}
\begin{pspicture}(-3,-3)(7,2)
%\psgrid
\psellipse[linecolor= blue](1,0)(2,1.2) \uput[u](1,1.2){\blue $A$} 
\psellipse[linecolor=vb](3,0)(2,1.2) \uput[u](3,1.2){\vb $B$} 
\psellipse[linecolor=rb](2,-1.2)(2,1.2) \uput[d](2,-2.4){\rb $C$}
\psframe[framearc=0.5](-2,-3)(6,2) \rput(6,2){$E$}
{\sol%%% couleur de l'affichage des éléments
\rput(5.5,0.5){$a$} \rput(3.5,0.5){$b$} \rput(-0.4,0.4){$c$} 
\rput(4.4,0.4){$d$} \rput(2,0.4){$e$} \rput(4.4,-0.4){$f$} 
\rput(5.5,-0.5){$g$} \rput(0.5,0.5){$h$} \rput(0.7,-0.7){$i$} 
\rput(2,-0.5){$j$} \rput(3.2,-0.8){$k$} \rput(2.2,-1.6){$l$} \rput(5.2,-1.4){$m$}  
}
%\psdots(0,0)
\end{pspicture}
\end{center}

L'instruction \verb!\newrgbcolor{sol}{0.8 0 0}! détermine la couleur, appelée \texttt{sol}, des éléments des ensembles; il suffit de mettre cette couleur à \texttt{blanc} en entrant les paramètres \{1~1~1\} pour ne pas afficher ces éléments.

\newpage

Après cette représentation au moyen de diagrammes de Venn, on peut représenter ces mêmes ensembles au moyen d'un diagramme de Carroll.

\begin{center}
\psset{nodesep=0pt, radius=0pt,unit=1.6cm,arrowscale=1.5}
\def\xmin {-0.5}   \def\xmax {4.5}
\def\ymin {-0.1}   \def\ymax {4.5}
\begin{pspicture}(\xmin,\ymin)(\xmax,\ymax)
%\psgrid[subgriddiv=2, griddots=10, gridlabels=0, gridcolor=black] 
\psframe(0,0)(4,4)
\psline(2,0)(2,4)
\psline(0,2)(4,2)
\psframe[linecolor=rb](1,1)(3,3) 
%\psframe[fillcolor=white,fillstyle=solid,linecolor=rb](1.8,1.8)(2.2,2.2) 
\rput*(3,3){\rb $C$}
\uput[u](1,4){$A$} \uput[u](3,4){$\overline A$}
\uput[l](0,3){$B$} \uput[l](0,1){$\overline B$} 
\rput*(4,4){$E$}
{\sol
\rput(3.5,1.5){$a$} \rput(2.5,3.5){$b$}  \rput(0.5,1.5){$c$} \rput(3.5,3.5){$d$} 
\rput(0.5,3.5){$e$} \rput(3.5,2.5){$f$} \rput(3.5,0.5){$g$} \rput(1,0.5){$h$} 
\rput(1.5,1.5){$i$} \rput(1.5,2.5){$j$} \rput(2.5,2.5){$k$} 
\rput(2.5,1.5){$l$} \rput(2.5,0.5){$m$} 
}
\end{pspicture}
\end{center}

\subsection{Complémentaire d'un ensemble -- non}

\hfill$\text{Si } A\subset E, \text{ alors } \complement_{E}^{A} = \overline{A} = \{x\in E\,|\, x\notin A\}$\hfill{}

\bigskip

\psset{unit=0.5cm,arrowsize=3pt 2}
\def\xmin {-5}   \def\xmax {5}
\def\ymin {-3}   \def\ymax {3}
\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)
\psellipse[fillstyle=solid,fillcolor=lightgray!40](0,0)(4,3)
\rotatebox{20}{\psellipse[fillstyle=solid,fillcolor=white](-1,0)(1,2)}
\rput(-1,0){$A$} \uput[ur](2,2.6){$E$} \rput*(2,0){$\complement_{E}^{A}$}
\end{pspicture}
\hfill
\psset{unit=1cm}
\begin{pspicture}(-1,0)(6,3)
%\psgrid
\psframe[fillstyle=solid,fillcolor=lightgray!40,framearc=0.6](0,0)(6,3)
\psframe[fillstyle=solid,fillcolor=white,framearc=0.9](0.5,0.5)(3,2.5)
\end{pspicture}

\medskip

C'est l'instruction \verb!\rotatebox! qui permet de tourner l'ellipse représentant l'ensemble $A$.

Le signe $\complement$ s'appelle tout simplement \verb!\complement!.

\subsection{Réunion de deux ensembles -- ou}

\hfill$A\cup B=\{x\,|\, x\in A \text{ ou } x\in B\}$\hfill{}

\bigskip

\psset{unit=1cm}
\begin{pspicture}(-2,-1.5)(4,1.1)
%\psgrid
\psellipse[fillstyle=solid,fillcolor=lightgray!40](0,0)(1.5,1)    %\rput(-1.3,0.9){$A$}
\psellipse[fillstyle=solid,fillcolor=lightgray!40](1.5,0)(1.5,1) %\rput(2.8,0.9){$B$}
\psellipse(0,0)(1.5,1) 
%\rput[u](0.75,-1.3){$A \cup B$}
\end{pspicture}
\hfill
\psset{unit=1cm}
\begin{pspicture}(-1,0)(6,3)
%\psgrid
\psframe[fillstyle=solid,fillcolor=lightgray!40,framearc=0.6](0,0)(4,3)
\psframe[fillstyle=solid,fillcolor=lightgray!40,framearc=0.6](2,0)(6,3)
\psframe[framearc=0.6](0,0)(4,3)
\end{pspicture}

\medskip

Dans le graphique de gauche, après avoir dessiné les deux ellipses pleines, il faut redessiner la première tracée dont une partie  a été effacée par l'autre ellipse.

\newpage

\subsection{Intersection de deux ensembles -- et}

\hfill$A\cap B=\{x\,|\, x\in A \text{ et } x\in B\}$\hfill{}

\bigskip

\psset{unit=1cm}
\begin{pspicture}(-2,-1.5)(4,1.1)
%\psgrid
\psellipse[](0,0)(1.5,1) %\rput(-1.3,0.9){$A$}
\psellipticarc[fillstyle=solid,fillcolor=lightgray!40](0,0)(1.5,1){-50}{50}
\psellipse[](1.5,0)(1.5,1) %\rput(2.8,0.9){$B$}
\psellipticarc[fillstyle=solid,fillcolor=lightgray!40](1.5,0)(1.5,1){130}{230}
%\rput[u](0.75,-1.3){$A \cap B$}
\end{pspicture}
\hfill
\psset{unit=1cm}
\begin{pspicture}(-1,0)(6,3)
%\psgrid
\psframe[framearc=0.6,linecolor=red](0,0)(6,3)
\psframe[fillstyle=solid,fillcolor=lightgray!40,framearc=0.9,linecolor=blue](2,0)(4,3)
\end{pspicture}

\medskip

Pour l'intersection avec des ellipses, il faut utiliser l'instruction (peu documentée!) \verb!\psellipticarc!.

\medskip

\psset{unit=1cm}
\begin{pspicture}(-2,-1.2)(4,1.1)
%\psgrid
\psellipticarc[fillstyle=solid,fillcolor=lightgray!40](0,0)(1.5,1){-50}{50}
%\psdots[dotstyle=x](0,0)
\psline[linestyle=dashed,linecolor=gray](1.1;-50)(0,0)(1.1;50)
\psline[linestyle=dashed,linecolor=gray](0,0)(1.5,0)
\psarc[linecolor=red]{->}(0,0){0.5}{0}{50} \uput[ur](0.5;25){\red\footnotesize $50\degres$}
\psarc[linecolor=blue]{<-}(0,0){0.5}{-50}{0} \uput[dr](0.5;-25){\blue\footnotesize $-50\degres$}
\end{pspicture}
\hfill
\psset{unit=1cm}
\begin{pspicture}(-2,-1.2)(4,1.1)
%\psgrid
\psellipticarc[fillstyle=solid,fillcolor=lightgray!40](1.5,0)(1.5,1){130}{230}
%\psdots[dotstyle=x](1.5,0)
\end{pspicture}

{\footnotesize
\verb!\psellipticarc[...](0,0)(1.5,1){-50}{50}!
\hfill
\verb!\psellipticarc[...](1.5,0)(1.5,1){130}{230}!}

\medskip

Les deux premiers paramètres sont les mêmes que pour une ellipse; les deux paramètres suivants correspondent à l'angle de début du tracé et l'angle de fin, comme dans
\verb!\psarc!.

\bigskip

C'est beaucoup plus simple pour l'intersection dessinée avec les rectangles aux bouts arrondis: on trace le grand \og   rectangle \fg{} (le rouge) puis on trace à l'intérieur le petit  (le bleu).

\subsection{Différence symétrique de deux ensembles -- ou exclusif}

\hfill$A \Delta B = (A\cup B) \setminus (A\cap B) = \left (A\cap \overline{B}\right ) \cup \left ( \overline{A} \cap B\right )$\hfill{}

\bigskip

\psset{unit=1cm}
\begin{pspicture}(-2,-1.5)(4,1.1)
%\psgrid
\psellipse[fillstyle=solid,fillcolor=lightgray!40](0,0)(1.5,1)  %\rput(-1.3,0.9){$A$}
\psellipse[fillstyle=solid,fillcolor=lightgray!40](1.5,0)(1.5,1) %\rput(2.8,0.9){$B$}
\psellipticarc[fillstyle=solid,fillcolor=white](0,0)(1.5,1){-50}{50}
\psellipticarc[fillstyle=solid,fillcolor=white](1.5,0)(1.5,1){130}{230}
%\rput[u](0.75,-1.3){$A \Delta B$}
\end{pspicture}
\hfill
\psset{unit=1cm}
\begin{pspicture}(-1,0)(6,3)
%\psgrid
\psframe[fillstyle=solid,fillcolor=lightgray!40,framearc=0.6](0,0)(6,3)
\psframe[fillstyle=solid,fillcolor=white,framearc=0.9](2,0)(4,3)
\end{pspicture}

\bigskip

Si on sait dessiner l'intersection, on sait dessiner la différence symétrique!

\end{document}
