如何使用 venndiagram 包?或者如何避免出现奇怪的结果?

如何使用 venndiagram 包?或者如何避免出现奇怪的结果?

我正在尝试文图为了回答另一个问题问题. 绘制了图表那个答案,我想我会尝试一个稍微复杂一点的例子:

\documentclass[tikz,border=20pt,multi]{standalone}
\usepackage{venndiagram}
\begin{document}
\begin{venndiagram3sets}
  \fillOnlyA
\end{venndiagram3sets}
\end{document}

但这并没有产生预期的结果:

意想不到的结果

据我理解,该图应该只阴影集合 A 中与 B 和 C 均不相交的部分。

据我所知,此示例只是文档第 6/7 页上的示例 3。此问题不是由使用 引起的standalone- 使用 时,我得到了相同的结果article,但显然是在更大的页面上。

我是否遗漏了某些关键信息,或者这可能是一个错误?我想知道当前版本的 TikZ 是否存在兼容性问题。

答案1

在 venndiagram.sty 的第 138、140、147、159、151、153 行中,的参数顺序atan2错误。当我反转它们时,就会得到所需的结果。我的意思是,atan2 的原始参数输入为 (dx,dy),但它们应该输入为 (dy,dx)。

更正后的段落:(第 128 至 164 行)

  \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@yi-\@venn@Ay,\@venn@AB@xi-\@venn@Ax)}
    \let\@venn@start@i=\pgfmathresult
    \pgfmathparse{360+atan2(\@venn@AB@yii-\@venn@Ay,\@venn@AB@xii-\@venn@Ax)}
    \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@yii-\@venn@Cy,\@venn@AB@xii-\@venn@Cx )}
    \let\@venn@start@ii=\pgfmathresult
    \pgfmathparse{atan2(\@venn@BC@y-\@venn@Cy,\@venn@BC@x-\@venn@Cx )}
    \let\@venn@end@ii=\pgfmathresult
    \pgfmathparse{atan2(\@venn@BC@y-\@venn@By,\@venn@BC@x-\@venn@Bx )}
    \let\@venn@start@iii=\pgfmathresult
    \pgfmathparse{atan2(\@venn@AB@yi-\@venn@By,\@venn@AB@xi-\@venn@Bx )-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}
  }%

在此处输入图片描述

答案2

此问题现已修复venndiagramv1.1 检查\pgfversion确定要使用什么语法atan2,因此venndiagram现在应该可以与pgfv2.0 和pgfv3.0 一起使用。

相关内容