如何剪切覆盖的表面/路径而不是用白色填充它们?

如何剪切覆盖的表面/路径而不是用白色填充它们?

下面的代码

\newcommand*{\arcthickness}{0.3}
\newcommand*{\myarc}[4]{ % x,y,radius,text  
  % node is positioned by splitting the arc in two parts
  % see http://tex.stackexchange.com/a/76369/6255
  \draw (#1,#2) arc (180:90:#3)
            node[below=-1.5pt] {\tiny #4}
            arc (90:0:#3)
            -- ++(-\arcthickness,0) arc (0:180:#3-\arcthickness) -- cycle;
}
\begin{tikzpicture}
    \myarc{0}{0}{1}{A}
    \myarc{3}{0}{1}{C}
    \myarc{1}{0}{1.5}{B}
\end{tikzpicture}

生产

弧

,但我真正想要的是:

弧

相交部分在哪里不是白色,但应该被忽略(剪裁)。原因是该图形应该适用于任何背景颜色。当然,理想情况下,它应该以通用的方式工作,即进一步应用\myarc覆盖/剪裁先前的图形。

答案1

正如安德鲁所建议的,反向剪辑可用于:

\documentclass{article}
%\url{https://tex.stackexchange.com/q/76409/86}
\usepackage{tikz}

\tikzset{
  reverseclip/.style={
    clip even odd rule,
    insert path={(current page.north east) --
      (current page.south east) --
      (current page.south west) --
      (current page.north west) --
      (current page.north east)}
  },
  clip even odd rule/.code={\pgfseteorule}
}

\newcommand*{\reverseclip}[1]{
  \begin{pgfinterruptboundingbox}
      \clip[reverseclip] \againpath #1;
  \end{pgfinterruptboundingbox}
}

\newcommand*{\arcthickness}{0.3}
\newcommand*{\myarc}[4]{ % x,y,radius,text     
  % node is positioned by splitting the arc in two parts
  % (workaround until new pgf is released)
  % see https://tex.stackexchange.com/a/76369/6255
  \draw[save path=\arcclippath]
         (#1,#2) arc (180:90:#3)
         node[below=-1.5pt] {\tiny #4}
         arc (90:0:#3)
         -- ++(-\arcthickness,0) arc (0:180:#3-\arcthickness) -- cycle;
  \reverseclip{\arcclippath}             
}

\begin{document}

\begin{tikzpicture}[remember picture]

    \myarc{1}{0}{1.5}{B}
    \myarc{0}{0}{1}{A}
    \myarc{3}{0}{1}{C}

\end{tikzpicture}
\end{document}

笔记:

  1. 需要主图片上的键remember picture来确保current page伪节点正常工作。如果没有主图片上的键,它的位置不正确,因此剪辑区域就不是预期的。调试剪辑的一个好方法是将 更改\clip\fill并设置fill opacity=.5。如果没有 ,remember picture则 所遮蔽的矩形current page将偏移到当前图片的位置,而不是页面的位置。但是,overlay是不必要的,因为在计算其边界框时不会使用图片的额外大块。

  2. 为了避免路径重复,我们使用 TikZ 保存路径以供日后使用的功能。这是关键save path。要恢复它,我们使用名为 的命令\againpath

  3. 为了让剪辑遵循 ,even odd rule我们必须使用一些诡计。我们不能将 放在路径本身even odd rule\clip(因为这会触发 TikZ 的可怕警告),而且由于我们希望剪辑继续有效,我们不能将其放在范围内。所以我们必须直接复制 的效果。这是(现在)作为样式的一部分调用的even odd rule键(因为它可能应该始终为这种类型的剪辑设置)。clip even odd rulereverseclip

带剪辑的弧线

相关内容