From c3e45a18cd1d6e3912efb68c36588ff0c86ce75f Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 17 Mar 2016 21:34:36 +0000 Subject: venndiagram (17mar16) git-svn-id: svn://tug.org/texlive/trunk@40058 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/latex/venndiagram/venndiagram.sty | 889 ++++++++++++++++----- 1 file changed, 670 insertions(+), 219 deletions(-) (limited to 'Master/texmf-dist/tex/latex/venndiagram') diff --git a/Master/texmf-dist/tex/latex/venndiagram/venndiagram.sty b/Master/texmf-dist/tex/latex/venndiagram/venndiagram.sty index d761b27e09d..9e4b39a460b 100644 --- a/Master/texmf-dist/tex/latex/venndiagram/venndiagram.sty +++ b/Master/texmf-dist/tex/latex/venndiagram/venndiagram.sty @@ -7,7 +7,7 @@ %% venndiagram.dtx (with options: `venndiagram.sty,package') %% %% venndiagram.dtx -%% Copyright 2012 Nicola Talbot +%% Copyright 2016 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -39,11 +39,20 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{venndiagram}[2012/10/24 v1.0 (NLCT) Venn diagrams] +\ProvidesPackage{venndiagram}[2016/03/16 v1.1 (NLCT) Venn diagrams] \RequirePackage{xkeyval} \RequirePackage{tikz} \RequirePackage{etoolbox} -\usetikzlibrary{intersections} +\newif\ifvennoldpgf +\ifdef\pgfversion +{ + \def\@venn@checkversion#1.#2\@venn@end@checkversion{% + \ifnum#1<3 \vennoldpgftrue \else \vennoldpgffalse\fi} + \expandafter\@venn@checkversion\pgfversion.0\@venn@end@checkversion +} +{ + \vennoldpgftrue +} \newcommand*{\@venn@label@A}{$A$} \newcommand*{\@venn@label@B}{$B$} \newcommand*{\@venn@label@C}{$C$} @@ -90,7 +99,106 @@ \define@key{venn}{vgap}{\def\@venn@vgap{#1}} \define@key{venn}{overlap}{\def\@venn@overlap{#1}} \define@key{venn}{tikzoptions}{\def\@venn@tikzoptions{#1}} - +\newcommand*{\@venn@computecircleintersects}[4]{% + \ifdim#1=#3\relax + \pgfmathsetlength{\@venn@intersect@i@y}{0.5*(#4+#2)}% + \setlength{\@venn@intersect@ii@y}{\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@i}{#4-#2}% + \pgfmathsetlength{\dimen@}{\@venn@radius*\@venn@radius-0.25*\dimen@i*\dimen@i}% + \setlength{\@venn@intersect@i@x}{#1}% + \setlength{\@venn@intersect@ii@x}{#1}% + \ifdim\dimen@=0pt\relax + \def\@venn@intersect@n{1}% + \else + \ifdim\dimen@>0pt\relax + \def\@venn@intersect@n{2}% + \pgfmathsetlength{\dimen@i}{sqrt(\dimen@)}% + \addtolength{\@venn@intersect@i@x}{\dimen@i}% + \addtolength{\@venn@intersect@ii@x}{-\dimen@i}% + \else + \def\@venn@intersect@n{0}% + \fi + \fi + \else + \ifdim#2=#4\relax + \pgfmathsetlength{\@venn@intersect@i@x}{0.5*(#3+#1)}% + \setlength{\@venn@intersect@ii@x}{\@venn@intersect@i@x}% + \setlength{\dimen@i}{#3}% + \addtolength{\dimen@i}{-#1}% + \pgfmathsetlength{\dimen@}{\@venn@radius*\@venn@radius + -0.25*\dimen@i*\dimen@i}% + \setlength{\@venn@intersect@i@y}{#2}% + \setlength{\@venn@intersect@ii@y}{#2}% + \ifdim\dimen@=0pt\relax + \def\@venn@intersect@n{1}% + \else + \ifdim\dimen@>0pt\relax + \def\@venn@intersect@n{2}% + \pgfmathsetlength{\dimen@i}{sqrt(\dimen@)}% + \addtolength{\@venn@intersect@i@y}{\dimen@i}% + \addtolength{\@venn@intersect@ii@y}{-\dimen@i}% + \else + \def\@venn@intersect@n{0}% + \fi + \fi + \else + \pgfmathparse{#1/72.27}\let\@vnn@ax\pgfmathresult + \pgfmathparse{#2/72.27}\let\@vnn@ay\pgfmathresult + \pgfmathparse{#3/72.27}\let\@vnn@bx\pgfmathresult + \pgfmathparse{#4/72.27}\let\@vnn@by\pgfmathresult + \pgfmathparse{\@venn@radius/72.27}\let\@vnn@r\pgfmathresult + \pgfmathparse{\@vnn@ax*\@vnn@ax}\let\@vnn@ax@sq\pgfmathresult + \pgfmathparse{\@vnn@ay*\@vnn@ay}\let\@vnn@ay@sq\pgfmathresult + \pgfmathparse{\@vnn@bx*\@vnn@bx}\let\@vnn@bx@sq\pgfmathresult + \pgfmathparse{\@vnn@by*\@vnn@by}\let\@vnn@by@sq\pgfmathresult + \pgfmathparse{\@vnn@r*\@vnn@r}\let\@vnn@r@sq\pgfmathresult + \pgfmathparse{0.5*(\@vnn@bx@sq-\@vnn@ax@sq+\@vnn@by@sq-\@vnn@ay@sq) + /(\@vnn@by-\@vnn@ay)}% + \let\@vnn@c\pgfmathresult + \pgfmathparse{(\@vnn@ax-\@vnn@bx)/(\@vnn@by-\@vnn@ay)}% + \let\@vnn@m\pgfmathresult + \pgfmathparse{1+\@vnn@m*\@vnn@m}% + \let\@vnn@one@plus@m@sq\pgfmathresult + \pgfmathparse{\@vnn@m*(\@vnn@c-\@vnn@ay)-\@vnn@ax}% + \let\@vnn@b\pgfmathresult + \pgfmathparse{\@vnn@b*\@vnn@b + - \@vnn@one@plus@m@sq + *(\@vnn@ax@sq+\@vnn@ay@sq+\@vnn@c*\@vnn@c + -2*\@vnn@ay*\@vnn@c-\@vnn@r@sq)}% + \let\@vnn@root\pgfmathresult + \setlength\dimen@{\pgfmathresult in}% + \ifdim\dimen@=0pt\relax + \def\@venn@intersect@n{1}% + \pgfmathparse{-\@vnn@b/\@vnn@one@plus@m@sq}% + \setlength{\@venn@intersect@i@x}{\pgfmathresult in}% + \setlength{\@venn@intersect@ii@x}{\@venn@intersect@i@x}% + \pgfmathparse{\pgfmathresult*\@vnn@m+c}% + \setlength{\@venn@intersect@i@y}{\pgfmathresult in}% + \setlength{\@venn@intersect@ii@y}{\@venn@intesect@i@y}% + \else + \ifdim\dimen@>0pt\relax + \def\@venn@intersect@n{2}% + \pgfmathsqrt{\@vnn@root}% + \let\@vnn@root\pgfmathresult + \pgfmathparse{(-\@vnn@b+\@vnn@root)/\@vnn@one@plus@m@sq}% + \setlength{\@venn@intersect@i@x}{\pgfmathresult in}% + \pgfmathparse{\pgfmathresult*\@vnn@m+\@vnn@c}% + \setlength{\@venn@intersect@i@y}{\pgfmathresult in}% + \pgfmathparse{(-\@vnn@b-\@vnn@root)/\@vnn@one@plus@m@sq}% + \setlength{\@venn@intersect@ii@x}{\pgfmathresult in}% + \pgfmathparse{\pgfmathresult*\@vnn@m+\@vnn@c}% + \setlength{\@venn@intersect@ii@y}{\pgfmathresult in}% + \else + \def\@venn@intersect@n{0}% + \fi + \fi + \fi + \fi +} +\newlength\@venn@intersect@i@x +\newlength\@venn@intersect@i@y +\newlength\@venn@intersect@ii@x +\newlength\@venn@intersect@ii@y \newenvironment{venndiagram3sets}[1][]% {% \disable@keys{venn}{labelAB,labelNotAB}% @@ -125,155 +233,10 @@ \def\fillNotC{\path[fill=\@venn@shade,even odd rule] (0,0) rectangle (\@venn@w,\@venn@h) (\@venn@Cx,\@venn@Cy) circle (\@venn@radius);}% - \def\fillOnlyA{% - \begin{scope} - \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius); - \path[name path=BC] (\@venn@Bx,\@venn@By) circle (\@venn@radius) - (\@venn@Cx,\@venn@Cy) circle (\@venn@radius); - \path[name intersections={of=A and BC,name=ABintersect}] - (ABintersect-1) ; - \pgfgetlastxy{\@venn@AB@xi}{\@venn@AB@yi} - \path (ABintersect-2); - \pgfgetlastxy{\@venn@AB@xii}{\@venn@AB@yii} - \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Ax,\@venn@AB@yi-\@venn@Ay)} - \let\@venn@start@i=\pgfmathresult - \pgfmathparse{360+atan2(\@venn@AB@xii-\@venn@Ax,\@venn@AB@yii-\@venn@Ay)} - \let\@venn@end@i=\pgfmathresult - \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius); - \path[name path=C] (\@venn@Cx,\@venn@Cy) circle (\@venn@radius); - \path[name intersections={of=B and C,name=BCintersect}] - (BCintersect-1); - \pgfgetlastxy{\@venn@BC@x}{\@venn@BC@y} - \pgfmathparse{atan2(\@venn@AB@xii-\@venn@Cx, \@venn@AB@yii-\@venn@Cy)} - \let\@venn@start@ii=\pgfmathresult - \pgfmathparse{atan2(\@venn@BC@x-\@venn@Cx, \@venn@BC@y-\@venn@Cy)} - \let\@venn@end@ii=\pgfmathresult - \pgfmathparse{atan2(\@venn@BC@x-\@venn@Bx, \@venn@BC@y-\@venn@By)} - \let\@venn@start@iii=\pgfmathresult - \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Bx, \@venn@AB@yi-\@venn@By)-360} - \let\@venn@end@iii=\pgfmathresult - \path[fill=\@venn@shade] (ABintersect-1) - arc[radius=\@venn@radius, - start angle=\@venn@start@i,end angle=\@venn@end@i] - arc[radius=\@venn@radius, - start angle=\@venn@start@ii,end angle=\@venn@end@ii] - arc[radius=\@venn@radius, - start angle=\@venn@start@iii,end angle=\@venn@end@iii] - -- cycle; - \end{scope} - }% - \def\fillOnlyB{% - \begin{scope} - \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius); - \path[name path=AC] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius) - (\@venn@Cx,\@venn@Cy) circle (\@venn@radius); - \path[name intersections={of=B and AC,name=BAintersect,sort by=B}] - (BAintersect-1); - \pgfgetlastxy{\@venn@BA@xi}{\@venn@BA@yi} - \path (BAintersect-4); - \pgfgetlastxy{\@venn@BA@xii}{\@venn@BA@yii} - \pgfmathparse{atan2(\@venn@BA@xi-\@venn@Bx,\@venn@BA@yi-\@venn@By)} - \let\@venn@start@i=\pgfmathresult - \pgfmathparse{atan2(\@venn@BA@xii-\@venn@Bx,\@venn@BA@yii-\@venn@By)} - \let\@venn@end@i=\pgfmathresult - \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius); - \path[name path=C] (\@venn@Cx,\@venn@Cy) circle (\@venn@radius); - \path[name intersections={of=A and C,name=ACintersect}] - (ACintersect-2); - \pgfgetlastxy{\@venn@AC@x}{\@venn@AC@y} - \pgfmathparse{atan2(\@venn@BA@xii-\@venn@Cx, \@venn@BA@yii-\@venn@Cy)} - \let\@venn@start@ii=\pgfmathresult - \pgfmathparse{atan2(\@venn@AC@x-\@venn@Cx, \@venn@AC@y-\@venn@Cy)} - \let\@venn@end@ii=\pgfmathresult - \pgfmathparse{atan2(\@venn@AC@x-\@venn@Ax, \@venn@AC@y-\@venn@Ay)} - \let\@venn@start@iii=\pgfmathresult - \pgfmathparse{atan2(\@venn@BA@xi-\@venn@Ax, \@venn@BA@yi-\@venn@Ay)} - \let\@venn@end@iii=\pgfmathresult - \path[fill=\@venn@shade] (BAintersect-1) - arc[radius=\@venn@radius, - start angle=\@venn@start@i,end angle=\@venn@end@i] - arc[radius=\@venn@radius, - start angle=\@venn@start@ii,end angle=\@venn@end@ii] - arc[radius=\@venn@radius, - start angle=\@venn@start@iii,end angle=\@venn@end@iii] - -- cycle ; - \end{scope} - }% - \def\fillOnlyC{% - \begin{scope} - \path[name path=C] (\@venn@Cx,\@venn@Cy) circle (\@venn@radius); - \path[name path=BA] (\@venn@Bx,\@venn@By) circle (\@venn@radius) - (\@venn@Ax,\@venn@Ay) circle (\@venn@radius); - \path[name intersections={of=C and BA,name=CBintersect,sort by=C}] - (CBintersect-1); - \pgfgetlastxy{\@venn@CB@xi}{\@venn@CB@yi} - \path (CBintersect-4); - \pgfgetlastxy{\@venn@CB@xii}{\@venn@CB@yii} - \pgfmathparse{atan2(\@venn@CB@xi-\@venn@Cx,\@venn@CB@yi-\@venn@Cy)} - \let\@venn@start@i=\pgfmathresult - \pgfmathparse{atan2(\@venn@CB@xii-\@venn@Cx,\@venn@CB@yii-\@venn@Cy)-360} - \let\@venn@end@i=\pgfmathresult - \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius); - \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius); - \path[name intersections={of=B and A,name=BAintersect}] - (BAintersect-2); - \pgfgetlastxy{\@venn@BA@x}{\@venn@BA@y} - \pgfmathparse{atan2(\@venn@CB@xii-\@venn@Ax, \@venn@CB@yii-\@venn@Ay)} - \let\@venn@start@ii=\pgfmathresult - \pgfmathparse{atan2(\@venn@BA@x-\@venn@Ax, \@venn@BA@y-\@venn@Ay)} - \let\@venn@end@ii=\pgfmathresult - \pgfmathparse{atan2(\@venn@BA@x-\@venn@Bx, \@venn@BA@y-\@venn@By)} - \let\@venn@start@iii=\pgfmathresult - \pgfmathparse{atan2(\@venn@CB@xi-\@venn@Bx, \@venn@CB@yi-\@venn@By)} - \let\@venn@end@iii=\pgfmathresult - \path[fill=\@venn@shade] (CBintersect-1) - arc[radius=\@venn@radius, - start angle=\@venn@start@i,end angle=\@venn@end@i] - arc[radius=\@venn@radius, - start angle=\@venn@start@ii,end angle=\@venn@end@ii] - arc[radius=\@venn@radius, - start angle=\@venn@start@iii,end angle=\@venn@end@iii] - -- cycle; - \end{scope} - }% - \def\fillNotABC{% - \begin{scope} - \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius); - \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius); - \path[name path=C] (\@venn@Cx,\@venn@Cy) circle (\@venn@radius); - \path[name intersections={of=A and B,name=ABintersect}] - (ABintersect-1); - \pgfgetlastxy{\@venn@AB@x}{\@venn@AB@y} - \path[name intersections={of=A and C,name=ACintersect}] - (ACintersect-1); - \pgfgetlastxy{\@venn@AC@x}{\@venn@AC@y} - \path[name intersections={of=C and B,name=CBintersect}] - (CBintersect-1); - \pgfgetlastxy{\@venn@CB@x}{\@venn@CB@y} - \pgfmathparse{atan2(\@venn@AB@x-\@venn@Ax, \@venn@AB@y-\@venn@Ay)} - \let\@venn@start@i=\pgfmathresult - \pgfmathparse{atan2(\@venn@AC@x-\@venn@Ax, \@venn@AC@y-\@venn@Ay)+360} - \let\@venn@end@i=\pgfmathresult - \pgfmathparse{atan2(\@venn@AC@x-\@venn@Cx,\@venn@AC@y-\@venn@Cy)} - \let\@venn@start@ii=\pgfmathresult - \pgfmathparse{atan2(\@venn@CB@x-\@venn@Cx,\@venn@CB@y-\@venn@Cy)+360} - \let\@venn@end@ii=\pgfmathresult - \pgfmathparse{atan2(\@venn@CB@x-\@venn@Bx,\@venn@CB@y-\@venn@By)} - \let\@venn@start@iii=\pgfmathresult - \pgfmathparse{atan2(\@venn@AB@x-\@venn@Bx,\@venn@AB@y-\@venn@By)} - \let\@venn@end@iii=\pgfmathresult - \path[fill=\@venn@shade] - (0,0) rectangle (\@venn@w,\@venn@h) - (ABintersect-1) - arc[radius=\@venn@radius, - start angle=\@venn@start@i,end angle=\@venn@end@i] - arc[radius=\@venn@radius, - start angle=\@venn@start@ii,end angle=\@venn@end@ii] - arc[radius=\@venn@radius, - start angle=\@venn@start@iii,end angle=\@venn@end@iii] - -- cycle; - \end{scope} - }% + \let\fillOnlyA\@venn@fillOnlyA@threesets + \let\fillOnlyB\@venn@fillOnlyB@threesets + \let\fillOnlyC\@venn@fillOnlyC@threesets + \let\fillNotABC\@venn@fillNotABC@threesets \def\fillANotB{% \begin{scope} \clip (\@venn@Ax,\@venn@Ay) circle (\@venn@radius); @@ -428,6 +391,460 @@ } \newcommand*{\@postvennhook}{} \newcommand*{\setpostvennhook}[1]{\def\@postvennhook{#1}} +\newcommand*\@venn@fillOnlyA@threesets{% + \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Bx}{\@venn@By}% + \ifnum\@venn@intersect@n=2\relax + \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@>\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}% + \edef\@venn@start@pt@x{\the\@venn@intersect@i@x}% + \edef\@venn@start@pt@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}% + \edef\@venn@start@pt@x{\the\@venn@intersect@ii@x}% + \edef\@venn@start@pt@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@i@angle\pgfmathresult + \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Cx}{\@venn@Cy}% + \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@>\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}% + \edef\@venn@end@pt@i@x{\the\@venn@intersect@i@x}% + \edef\@venn@end@pt@i@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}% + \edef\@venn@end@pt@i@x{\the\@venn@intersect@ii@x}% + \edef\@venn@end@pt@i@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@i@angle\pgfmathresult + \pgfmathadd{\@venn@end@i@angle}{360}% + \let\@venn@end@i@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@end@pt@i@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@i@y-\@venn@Cy}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@ii@angle\pgfmathresult + \@venn@computecircleintersects{\@venn@Bx}{\@venn@By}{\@venn@Cx}{\@venn@Cy}% + \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@<\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Cy}% + \edef\@venn@end@pt@ii@x{\the\@venn@intersect@i@x}% + \edef\@venn@end@pt@ii@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Cy}% + \edef\@venn@end@pt@ii@x{\the\@venn@intersect@ii@x}% + \edef\@venn@end@pt@ii@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@ii@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@end@pt@ii@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@ii@y-\@venn@By}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@iii@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@start@pt@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@start@pt@y-\@venn@By}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@iii@angle\pgfmathresult + \pgfmathsubtract{\@venn@end@iii@angle}{360}% + \let\@venn@end@iii@angle\pgfmathresult + \path[fill=\@venn@shade] (\@venn@start@pt@x,\@venn@start@pt@y) + arc[radius=\@venn@radius,start angle=\@venn@start@i@angle, + end angle=\@venn@end@i@angle] + arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle, + end angle=\@venn@end@ii@angle] + arc[radius=\@venn@radius,start angle=\@venn@start@iii@angle, + end angle=\@venn@end@iii@angle] -- cycle; + \else + \fillOnlyA + \fi +}% +\newcommand*\@venn@fillOnlyB@threesets{% + \@venn@computecircleintersects{\@venn@Bx}{\@venn@By}{\@venn@Ax}{\@venn@Ay}% + \ifnum\@venn@intersect@n=2\relax + \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@>\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@By}% + \edef\@venn@start@pt@x{\the\@venn@intersect@i@x}% + \edef\@venn@start@pt@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@By}% + \edef\@venn@start@pt@x{\the\@venn@intersect@ii@x}% + \edef\@venn@start@pt@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@i@angle\pgfmathresult + \@venn@computecircleintersects{\@venn@Bx}{\@venn@By}{\@venn@Cx}{\@venn@Cy}% + \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@>\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@By}% + \edef\@venn@end@pt@i@x{\the\@venn@intersect@i@x}% + \edef\@venn@end@pt@i@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@By}% + \edef\@venn@end@pt@i@x{\the\@venn@intersect@ii@x}% + \edef\@venn@end@pt@i@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@i@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@end@pt@i@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@i@y-\@venn@Cy}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@ii@angle\pgfmathresult + \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Cx}{\@venn@Cy}% + \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@<\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Cy}% + \edef\@venn@end@pt@ii@x{\the\@venn@intersect@i@x}% + \edef\@venn@end@pt@ii@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Cy}% + \edef\@venn@end@pt@ii@x{\the\@venn@intersect@ii@x}% + \edef\@venn@end@pt@ii@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@ii@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@end@pt@ii@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@ii@y-\@venn@Ay}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@iii@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@start@pt@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@start@pt@y-\@venn@Ay}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@iii@angle\pgfmathresult + \path[fill=\@venn@shade] + (\@venn@start@pt@x,\@venn@start@pt@y) + arc[radius=\@venn@radius,start angle=\@venn@start@i@angle, + end angle=\@venn@end@i@angle] + arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle, + end angle=\@venn@end@ii@angle] + arc[radius=\@venn@radius,start angle=\@venn@start@iii@angle, + end angle=\@venn@end@iii@angle] -- cycle; + \else + \fillOnlyB + \fi +}% +\newcommand*\@venn@fillOnlyC@threesets{% + \@venn@computecircleintersects{\@venn@Cx}{\@venn@Cy}{\@venn@Bx}{\@venn@By}% + \ifnum\@venn@intersect@n=2\relax + \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@>\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Cy}% + \edef\@venn@start@pt@x{\the\@venn@intersect@i@x}% + \edef\@venn@start@pt@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Cy}% + \edef\@venn@start@pt@x{\the\@venn@intersect@ii@x}% + \edef\@venn@start@pt@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@i@angle\pgfmathresult + \@venn@computecircleintersects{\@venn@Cx}{\@venn@Cy}{\@venn@Ax}{\@venn@Ay}% + \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@>\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Cy}% + \edef\@venn@end@pt@i@x{\the\@venn@intersect@i@x}% + \edef\@venn@end@pt@i@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Cy}% + \edef\@venn@end@pt@i@x{\the\@venn@intersect@ii@x}% + \edef\@venn@end@pt@i@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@i@angle\pgfmathresult + \pgfmathsubtract{\@venn@end@i@angle}{360}% + \let\@venn@end@i@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@end@pt@i@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@i@y-\@venn@Ay}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@ii@angle\pgfmathresult + \@venn@computecircleintersects{\@venn@Bx}{\@venn@By}{\@venn@Ax}{\@venn@Ay}% + \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@<\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}% + \edef\@venn@end@pt@ii@x{\the\@venn@intersect@i@x}% + \edef\@venn@end@pt@ii@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}% + \edef\@venn@end@pt@ii@x{\the\@venn@intersect@ii@x}% + \edef\@venn@end@pt@ii@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@ii@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@end@pt@ii@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@ii@y-\@venn@By}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@iii@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@start@pt@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@start@pt@y-\@venn@By}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@iii@angle\pgfmathresult + \path[fill=\@venn@shade] (\@venn@start@pt@x,\@venn@start@pt@y) + arc[radius=\@venn@radius,start angle=\@venn@start@i@angle, + end angle=\@venn@end@i@angle] + arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle, + end angle=\@venn@end@ii@angle] + arc[radius=\@venn@radius,start angle=\@venn@start@iii@angle, + end angle=\@venn@end@iii@angle] -- cycle; + \else + \fillOnlyC + \fi +}% +\newcommand*\@venn@fillNotABC@threesets{% + \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Bx}{\@venn@By}% + \ifnum\@venn@intersect@n=2\relax + \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Cx-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Cy-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@>\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}% + \edef\@venn@start@pt@x{\the\@venn@intersect@i@x}% + \edef\@venn@start@pt@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}% + \edef\@venn@start@pt@x{\the\@venn@intersect@ii@x}% + \edef\@venn@start@pt@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@i@angle\pgfmathresult + \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Cx}{\@venn@Cy}% + \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Bx-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@By-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@>\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}% + \edef\@venn@end@pt@i@x{\the\@venn@intersect@i@x}% + \edef\@venn@end@pt@i@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}% + \edef\@venn@end@pt@i@x{\the\@venn@intersect@ii@x}% + \edef\@venn@end@pt@i@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@i@angle\pgfmathresult + \pgfmathadd{\@venn@end@i@angle}{360}% + \let\@venn@end@i@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@end@pt@i@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@i@y-\@venn@Cy}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@ii@angle\pgfmathresult + \@venn@computecircleintersects{\@venn@Cx}{\@venn@Cy}{\@venn@Bx}{\@venn@By}% + \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@i@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@i@y}% + \pgfmathsetlength{\dimen@}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \pgfmathsetlength{\dimen@i}{\@venn@Ax-\@venn@intersect@ii@x}% + \pgfmathsetlength{\dimen@ii}{\@venn@Ay-\@venn@intersect@ii@y}% + \pgfmathsetlength{\dimen@i}{\dimen@i*\dimen@i+\dimen@ii*\dimen@ii}% + \ifdim\dimen@>\dimen@i + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Cy}% + \edef\@venn@end@pt@ii@x{\the\@venn@intersect@i@x}% + \edef\@venn@end@pt@ii@y{\the\@venn@intersect@i@y}% + \else + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Cx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Cy}% + \edef\@venn@end@pt@ii@x{\the\@venn@intersect@ii@x}% + \edef\@venn@end@pt@ii@y{\the\@venn@intersect@ii@y}% + \fi + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@ii@angle\pgfmathresult + \pgfmathadd{\@venn@end@ii@angle}{360}% + \let\@venn@end@ii@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@end@pt@ii@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@end@pt@ii@y-\@venn@By}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@iii@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@start@pt@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@start@pt@y-\@venn@By}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@iii@angle\pgfmathresult + \path[fill=\@venn@shade,even odd rule] + (0,0) rectangle (\@venn@w,\@venn@h) + (\@venn@start@pt@x,\@venn@start@pt@y) + arc[radius=\@venn@radius,start angle=\@venn@start@i@angle, + end angle=\@venn@end@i@angle] + arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle, + end angle=\@venn@end@ii@angle] + arc[radius=\@venn@radius,start angle=\@venn@start@iii@angle, + end angle=\@venn@end@iii@angle] + -- cycle; + \else + \path[fill=\@venn@shade,even odd rule] + (0,0) rectangle (\@venn@w,\@venn@h) + (\@venn@Ax,\@venn@Ay) circle (\@venn@radius) + (\@venn@Bx,\@venn@By) circle (\@venn@radius) + (\@venn@Cx,\@venn@Cy) circle (\@venn@radius);% + \fi +}% \newenvironment{venndiagram2sets}[1][]% {% \disable@keys{venn}{labelABC,labelOnlyC,labelOnlyAC,labelOnlyBC,% @@ -448,56 +865,8 @@ circle (\@venn@radius);}% \def\fillAll{\path[fill=\@venn@shade] (0,0) rectangle (\@venn@w,\@venn@h);}% - \def\fillOnlyA{% - \begin{scope} - \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius); - \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius); - \path[name intersections={of=A and B,name=ABintersect}] - (ABintersect-1) ; - \pgfgetlastxy{\@venn@AB@xi}{\@venn@AB@yi} - \path (ABintersect-2); - \pgfgetlastxy{\@venn@AB@xii}{\@venn@AB@yii} - \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Ax,\@venn@AB@yi-\@venn@Ay)} - \let\@venn@start@i=\pgfmathresult - \pgfmathparse{360+atan2(\@venn@AB@xii-\@venn@Ax,\@venn@AB@yii-\@venn@Ay)} - \let\@venn@end@i=\pgfmathresult - \pgfmathparse{atan2(\@venn@AB@xii-\@venn@Bx, \@venn@AB@yii-\@venn@By)} - \let\@venn@start@ii=\pgfmathresult - \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Bx, \@venn@AB@yi-\@venn@By)-360} - \let\@venn@end@ii=\pgfmathresult - \path[fill=\@venn@shade] (ABintersect-1) - arc[radius=\@venn@radius, - start angle=\@venn@start@i,end angle=\@venn@end@i] - arc[radius=\@venn@radius, - start angle=\@venn@start@ii,end angle=\@venn@end@ii] - -- cycle; - \end{scope} - }% - \def\fillOnlyB{% - \begin{scope} - \path[name path=A] (\@venn@Ax,\@venn@Ay) circle (\@venn@radius); - \path[name path=B] (\@venn@Bx,\@venn@By) circle (\@venn@radius); - \path[name intersections={of=A and B,name=ABintersect}] - (ABintersect-1) ; - \pgfgetlastxy{\@venn@AB@xi}{\@venn@AB@yi} - \path (ABintersect-2); - \pgfgetlastxy{\@venn@AB@xii}{\@venn@AB@yii} - \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Bx,\@venn@AB@yi-\@venn@By)} - \let\@venn@start@i=\pgfmathresult - \pgfmathparse{atan2(\@venn@AB@xii-\@venn@Bx,\@venn@AB@yii-\@venn@By)} - \let\@venn@end@i=\pgfmathresult - \pgfmathparse{atan2(\@venn@AB@xii-\@venn@Ax, \@venn@AB@yii-\@venn@Ay)} - \let\@venn@start@ii=\pgfmathresult - \pgfmathparse{atan2(\@venn@AB@xi-\@venn@Ax, \@venn@AB@yi-\@venn@Ay)} - \let\@venn@end@ii=\pgfmathresult - \path[fill=\@venn@shade] (ABintersect-1) - arc[radius=\@venn@radius, - start angle=\@venn@start@i,end angle=\@venn@end@i] - arc[radius=\@venn@radius, - start angle=\@venn@start@ii,end angle=\@venn@end@ii] - -- cycle; - \end{scope} - }% + \let\fillOnlyA\@venn@fillOnlyA@twosets + \let\fillOnlyB\@venn@fillOnlyB@twosets \def\fillNotA{\path[fill=\@venn@shade,even odd rule] (0,0) rectangle (\@venn@w,\@venn@h) (\@venn@Ax,\@venn@Ay) circle (\@venn@radius);}% @@ -524,22 +893,8 @@ (\@venn@Bx,\@venn@By) circle (\@venn@radius) ; }% - \def\fillANotB{% - \begin{scope} - \clip (\@venn@Ax,\@venn@Ay) circle (\@venn@radius); - \path[fill=\@venn@shade,even odd rule] - (\@venn@Ax,\@venn@Ay) circle (\@venn@radius) - (\@venn@Bx,\@venn@By) circle (\@venn@radius); - \end{scope} - }% - \def\fillBNotA{% - \begin{scope} - \clip (\@venn@Bx,\@venn@By) circle (\@venn@radius); - \path[fill=\@venn@shade,even odd rule] - (\@venn@Bx,\@venn@By) circle (\@venn@radius) - (\@venn@Ax,\@venn@Ay) circle (\@venn@radius); - \end{scope} - }% + \let\fillANotB\fillOnlyA + \let\fillBNotA\fillOnlyB \def\fillACapB{% \begin{scope} \clip (\@venn@Ax,\@venn@Ay) circle (\@venn@radius); @@ -579,6 +934,102 @@ \@postvennhook \end{tikzpicture} } +\newcommand*\@venn@fillOnlyA@twosets{% + \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Bx}{\@venn@By}% + \ifnum\@venn@intersect@n=2\relax + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@i@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@i@angle\pgfmathresult + \pgfmathadd{\@venn@end@i@angle}{360}% + \let\@venn@end@i@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@By}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@ii@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@By}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@ii@angle\pgfmathresult + \pgfmathadd{\@venn@start@ii@angle}{360}% + \let\@venn@start@ii@angle\pgfmathresult + \path[fill=\@venn@shade] + (\@venn@intersect@i@x,\@venn@intersect@i@y) + arc[radius=\@venn@radius,start angle=\@venn@start@i@angle, + end angle=\@venn@end@i@angle] + arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle, + end angle=\@venn@end@ii@angle] + -- cycle; + \else + \fillOnlyA + \fi +}% +\newcommand*\@venn@fillOnlyB@twosets{% + \@venn@computecircleintersects{\@venn@Ax}{\@venn@Ay}{\@venn@Bx}{\@venn@By}% + \ifnum\@venn@intersect@n=2\relax + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@By}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@i@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Bx}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@By}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@i@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@intersect@ii@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@ii@y-\@venn@Ay}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@start@ii@angle\pgfmathresult + \pgfmathsetlength{\dimen@i}{\@venn@intersect@i@x-\@venn@Ax}% + \pgfmathsetlength{\dimen@ii}{\@venn@intersect@i@y-\@venn@Ay}% + \ifvennoldpgf + \pgfmathatantwo{\dimen@i}{\dimen@ii}% + \else + \pgfmathatantwo{\dimen@ii}{\dimen@i}% + \fi + \let\@venn@end@ii@angle\pgfmathresult + \path[fill=\@venn@shade] + (\@venn@intersect@i@x,\@venn@intersect@i@y) + arc[radius=\@venn@radius,start angle=\@venn@start@i@angle, + end angle=\@venn@end@i@angle] + arc[radius=\@venn@radius,start angle=\@venn@start@ii@angle, + end angle=\@venn@end@ii@angle] + -- cycle; + \else + \fillOnlyB + \fi +}% \endinput %% %% End of file `venndiagram.sty'. -- cgit v1.2.3