![编辑](https://linux22.com/image/332556/%E7%BC%96%E8%BE%91.png)
我想在 Latex 中将相交的圆添加到一起,并从更大的圆中移除该区域。我的代码如下:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikzsymbols}
\usetikzlibrary{shapes,backgrounds,patterns}
\title{picture}
\author{john }
\date{April 2016}
\begin{document}
\def\cutThis{(3.5,0.7) circle (1cm) (5,0) circle (1cm)}
\begin{tikzpicture}
\fill[yellow, even odd rule] (4,0) circle (2cm) \cutThis;
\end{tikzpicture}
\maketitle
\section{Introduction}
\end{document}
但是这不起作用,因为两个圆圈相交的区域是黄色的。如果有人能帮助我,那就太好了。
答案1
最简单的方法就是在填充黄色圆圈后用白色填充圆圈。如果那不是一个选择,事情就没那么简单了,但下面的方法或多或少是可行的。也就是说,它是可行的,但你可能会得到伪影,这取决于你的观察者。(我按照你在截图中看到的那样做。)
\documentclass[border=10pt,tikz,multi]{standalone}
% code for inverse clipping from Paul Gaborit's answer at http://tex.stackexchange.com/a/59168/
\tikzset{%
invclip/.style={%
clip,insert path={%
{%
[reset cm]
(-16383.99999pt,-16383.99999pt) rectangle (16383.99999pt,16383.99999pt)
}%
}%
},
}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\begin{pgfinterruptboundingbox}
\path[invclip] (3.5,0.7) circle (1cm) (5,0) circle (1cm) (3.5,0.7) circle (1cm);
\end{pgfinterruptboundingbox}
\fill[yellow, even odd rule] (4,0) circle (2cm) (3.5,0.7) circle (1cm);
\end{scope}
\end{tikzpicture}
\end{document}
编辑
对于维恩图,有一些专门设计的软件包可供使用,以使这变得简单。文图基于 TikZ,而文氏基于MetaPost。
由于这些是为维恩图设计的,因此它们确实假设最外面的区域是矩形。我不确定在这种情况下这是否是个问题。无论如何,这里有几个使用第一个包的示例来说明它在 2 组和 3 组中的用法。
\documentclass[border=10pt,tikz,multi]{standalone}
\usepackage{venndiagram}
\begin{document}
\begin{venndiagram2sets}[labelA={}, labelB={}, shade=yellow]
\fillNotAorB
\end{venndiagram2sets}
\begin{venndiagram3sets}[labelA={}, labelB={}, labelC={}, shade=yellow]
\fillNotABC
\end{venndiagram3sets}
\end{document}
这产生了
和
稍微调整一下第二张图
\begin{venndiagram3sets}[labelA={}, labelB={}, labelC={}, shade=yellow, tikzoptions={draw=none}]
\fillNotABC
\end{venndiagram3sets}
我们可以得到