理解剪辑和范围

理解剪辑和范围

我有以下代码,正在尝试更好地理解它:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{figure}[htb] 
\begin{tikzpicture} 
\def\firstcircle{ (-1,0) circle (2cm) } 
\def\secondcircle{ (1,0) circle (2cm) }

\begin{scope}       
    \clip \firstcircle;     
    \fill[red!50!white] \secondcircle;      
\end{scope}

\begin{scope}
        \begin{scope}[even odd rule]
            \clip  \secondcircle (-3,-3) rectangle (3,3);   
            \fill[blue!50!white] \firstcircle;
    \end{scope}
\end{scope}
\end{tikzpicture}
\end{figure}
\end{document}

这将绘制一个有两个圆圈的维恩图。第一个scope环境会剪掉第一个圆圈,然后将第一个圆圈中属于第二个圆圈的所有内容都涂成红色。这样对吗?

第二个scope让我感到困惑。我不明白为什么我需要同时输入\secondcircle(-3,3) rectangle (3,3)。为什么这会对第一个圆圈中的内容产生阴影效果,而第二个圆圈中没有的内容?

答案1

第二条\clip命令包含两个不同的封闭路径,第二个是圆形,第二个是矩形,比当前绘图区域稍大。表示even odd rule如果某个区域被一个、三个、五个……区域(奇数)覆盖,则该区域位于剪切结果路径内。否则,如果某个区域未被覆盖,被两个、四个……区域(偶数)覆盖,则该区域被排除在外。

在这种情况下,除第二个圆形之外的整个矩形都在第二种情况的剪切区域中。

pgf手动的对规则的解释略有不同(可能更精确一些,但也更复杂一些)。可以在“15.5 填充路径”下的“15.5.2 图形参数:内部规则”小节中找到。

问题中的例子可以进一步细化:

  • 嵌套scope环境不是必需的。
  • 可以使用 的尺寸来替换矩形的神奇数字current bounding box
  • 选项overlay从边界框计算中删除第二个圆和矩形,只保留第一个圆。\fbox可视化固定边界框。

完整示例:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{figure}[htb]
% Check bounding box with \fbox
\setlength{\fboxsep}{0pt}
\fbox{\begin{tikzpicture}

\def\firstcircle{ (-1,0) circle (2cm) }

\def\secondcircle{ (1,0) circle (2cm) }

\begin{scope}

    \clip \firstcircle;

    \fill[red!50!white, overlay] \secondcircle;

\end{scope}

\begin{scope}[even odd rule, overlay]

    \clip
      \secondcircle
      (current bounding box.south west) rectangle
      (current bounding box.north east)
    ;

    \fill[blue!50!white] \firstcircle;

\end{scope}

\end{tikzpicture}}
\end{figure}
\end{document}

结果

相关内容