我正在尝试绘制一个可以表示为三个形状上的布尔运算的图形:A、B、C。该图形是A - B - C
(或A - (B U C)
)。但是,我不知道如何使用\clip
Tikz 中的或其他命令来绘制它。
例如,以下是改编自TikZ 示例,下面第一张图片是代码生成的,但第二张才是我想要的。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,backgrounds}
\begin{document}
\pagestyle{empty}
\def\firstcircle{(0,0) circle (1.5cm)}
\def\secondcircle{(45:2cm) circle (1.5cm)}
\def\thirdcircle{(0:2cm) circle (1.5cm)}
\begin{tikzpicture}
\draw \firstcircle node[below] {$A$};
\draw \secondcircle node [above] {$B$};
\draw \thirdcircle node [below] {$C$};
\begin{scope}
\clip \firstcircle;
\fill[red] \secondcircle;
\end{scope}
\begin{scope}
\clip \firstcircle;
\clip \secondcircle;
\fill[green] \thirdcircle;
\end{scope}
\end{tikzpicture}
\end{document}
编辑:具体来说,我不是要画维恩图,而是要从三个基本形状中画出一些形状,但实现需要:
- 允许任何形状(不仅仅是圆形)
- 透明(不能使用白色)
- 图像边框不包括 B 和 C
以这个新图像为例
答案1
至于您更新的问题:这可以通过反向剪辑和奇偶剪辑技巧。假设我们想要三角形(-4,0) -| (0,2) -- cycle
减去矩形(-1,-0.5) rectangle (1,0.5)
减去圆形(0.5,1) circle[radius=1cm]
。那么我们需要
- 添加三角形的路径以获得一些非空的图片(但我们不画出来),
- 添加矩形
reverse clip'
(实际上有一个微妙之处:外部路径的方向很重要,这就是为什么有“其他”方向的版本), even odd
reverse clip
为圆圈添加一个。
瞧。
\documentclass[tikz,border=3mm]{standalone}
\tikzset{current reverse clip/.style={insert path={{% https://tex.stackexchange.com/a/127045
([xshift=-10cm,yshift=-10cm]current bounding box.south east) -|
([xshift=10cm,yshift=10cm]current bounding box.north west) -| cycle
}}},
current reverse clip'/.style={insert path={{% https://tex.stackexchange.com/a/127045
([xshift=-10cm,yshift=-10cm]current bounding box.south east) -|
([xshift=10cm,yshift=10cm]current bounding box.north west) -| cycle
}}},
even odd clip/.code={% https://tex.stackexchange.com/a/76216
\pgfseteorule}}
\begin{document}
\begin{tikzpicture}
\path (-4,0) -| (0,2) -- cycle;
\clip[overlay] (-1,-0.5) rectangle (1,0.5) [current reverse clip'];
\clip[overlay,even odd clip] (0.5,1) circle[radius=1cm] [current reverse clip];
\draw[left color=red,right color=blue] (-4,0) -| (0,2) -- cycle;
\end{tikzpicture}
\end{document}
我要提一下,有一个实验库venn
可以找到这里。这包含上述风格的一些变体。保存这个文件就像tikzlibraryvenn.code.tex
在 LaTeX 可以找到它的地方一样,例如与你编译的文件相同的目录。手册可以在这里,您可以在这里找到更多剪辑示例。使用此库获取原始问题的图表非常简单
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{venn}
\begin{document}
\begin{tikzpicture}[Venn diagram={style={fill=blue},offset angle=60}]
\Venn{-B,-C,A}
\end{tikzpicture}
\end{document}
或者你可以使用也许更直观的语法
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{venn}
\begin{document}
\begin{tikzpicture}[Venn diagram={style={fill=blue},offset angle=60}]
\Venn{op={(A)/(BuC)}}
\end{tikzpicture}
\end{document}
顺便说一句,如果您对语法有抱怨,或者说,如果您愿意\Venn{op={(A)-(BuC)}}
,现在是给出这种反馈的时候了。