我正在尝试文图为了回答另一个问题问题. 绘制了图表那个答案,我想我会尝试一个稍微复杂一点的例子:
\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
此问题现已修复venndiagram
v1.1 检查\pgfversion
确定要使用什么语法atan2
,因此venndiagram
现在应该可以与pgf
v2.0 和pgf
v3.0 一起使用。