Je reproduis ci-dessous un exemple trouvé sur l'excellent site [texample.net](http://www.texample.net/tikz/examples/venn-diagram/).
Le code est de [Till Tantau](http://ctan.org/author/tantau), le créateur de Ti*k*Z/PGF et de beamer, avec des modifications apportées par [Kjell Magne Fauske](http://ctan.org/author/fauske). Je me suis contenté de traduire les commentaires.
Les librairies Ti*k*Z `shapes` et `backgrounds` sont utilisées.
utilisées. Pour bien comprendre ce code, je recommande de le compiler peu à peu : d'abord les trois premiers cercles, puis la première zone d'intersection, etc.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,backgrounds}
\begin{document}
\pagestyle{empty}
% Suppose we have three circles or ellipses or whatever. Let us define
% commands for their paths since we will need them repeatedly in the
% following:
% FRANÇAIS — Soit un diagramme constitué de trois cercles ou ellipses.
% Nous définissons ces trois figures de manière à pouvoir les réutiliser :
\def\firstcircle{(0,0) circle (1.5cm)}
\def\secondcircle{(45:2cm) circle (1.5cm)}
\def\thirdcircle{(0:2cm) circle (1.5cm)}
% Now we can draw the sets:
% FRANÇAIS — nous pouvons les dessiner :
\begin{tikzpicture}
\draw \firstcircle node[below] {$A$};
\draw \secondcircle node [above] {$B$};
\draw \thirdcircle node [below] {$C$};
% Now we want to highlight the intersection of the first and the
% second circle:
% FRANÇAIS — mettons en valeur la zone située
% à l'intersection des deux premiers cercles :
\begin{scope}
\clip \firstcircle;
\fill[red] \secondcircle;
\end{scope}
% Next, we want the highlight the intersection of all three circles:
% FRANÇAIS — mettons maintenant en valeur la zone située
% à l'intersection des trois premiers cercles :
\begin{scope}
\clip \firstcircle;
\clip \secondcircle;
\fill[green] \thirdcircle;
\end{scope}
% The intersection trick works pretty well for intersections. If you need
% the set-theoretic difference between two sets, things are a little more
% complicated:
% FRANÇAIS — l'astuce fonctionne bien pour les intersections.
% Néanmoins, si l'on désire différencier deux zones,
% c'est un chouïa plus complexe :
% Suppose we want to highlight the part of the first circle that is not
% also part of the second circle. For this, we need to clip against the
% "complement" of the second circle. The trick is to add a large rectangle
% that encompasses everything and then use the even-odd filling rule
% (see the manual again):
% FRANÇAIS — Supposons que nous désirions colorer la partie du premier cercle
% qui ne fait pas partie du second. Pour cela, on va exclure la zone.
% On ajoute donc un rectangle qui englobe l'ensemble,
% et l'on utilise un remplissage type cache/contre-cache :
\begin{scope}[shift={(6cm,0cm)}]
\begin{scope}[even odd rule]% first circle without the second
% FRANÇAIS — Le premier cercle SANS le second
\clip \secondcircle (-3,-3) rectangle (3,3);
\fill[yellow] \firstcircle;
\end{scope}
\draw \firstcircle node {$A$};
\draw \secondcircle node {$B$};
\end{scope}
% When using the above, you will notice that the border lines of the
% original circles are erased by the intersection parts. To solve this
% problem, either use a background layer (see the manual) or simply draw
% the border lines after everything else has been drawn.
% FRANÇAIS — L'exemple précédent montre que les contours des cercles
% sont effacés par les zones d'intersection.
% Pour éviter ce phénomène, il est possible de dessiner les contours
% après des intersactions. D'autres solutions sont possibles
% et évoquées dans le manuel.
% The last trick is to cheat and use transparency
% FRANÇAIS — La dernière astuce consiste à utiliser des transparences
\begin{scope}[shift={(3cm,-5cm)}, fill opacity=0.5]
\fill[red] \firstcircle;
\fill[green] \secondcircle;
\fill[blue] \thirdcircle;
\draw \firstcircle node[below] {$A$};
\draw \secondcircle node [above] {$B$};
\draw \thirdcircle node [below] {$C$};
\end{scope}
\end{tikzpicture}
% Naturally, all of this could be bundled into nicer macros, but the above
% should give the idea.
% FRANÇAIS — Ce code pourrait être amélioré par des macros,
% mais l'idée générale est là.
\end{document}
Étant bien certain que cette traduction peut être améliorée (notamment par des utilisateurs frottés au vocabulaire spécifique aux diagrammes de Venn), je rends cette contribution modifiable par les autres usagers du présent site.