如何使内部和外部区域透明?

如何使内部和外部区域透明?

白色区域必须是真正透明的(在 PDF 和 PNG 中均保留)。如何在 TikZ 或 PSTricks 中做到这一点?

下图仅作为说明示例。

在此处输入图片描述

答案1

使用 PDF 和 PostScript(以及 PSTricks 和 TikZ/pgf),您可以使用两个规则来确定某个点是否位于路径内:“非零规则”或“偶奇规则”。

以下代码(TikZ)显示了差异:

\documentclass[tikz]{standalone}
\usepackage{mwe}
\begin{document}
\begin{tikzpicture}
  \begin{scope}
    \fill[red] (-1.2,-.6) rectangle (1.2,.6);
    \fill[blue,draw=black,nonzero rule]
    circle[radius=1.1cm]
    (0:1cm) -- (120:1cm) -- (240:1cm) -- cycle;
  \end{scope}
  \begin{scope}[yshift=1*-2.3cm]
    \fill[red] (-1.2,-.6) rectangle (1.2,.6);
    \fill[blue,draw=black,nonzero rule]
    circle[radius=1.1cm]
    (0:1cm) -- (240:1cm) -- (120:1cm) -- cycle;
  \end{scope}
  \begin{scope}[yshift=2*-2.3cm]
    \fill[red] (-1.2,-.6) rectangle (1.2,.6);
    \fill[blue,draw=black,even odd rule]
    circle[radius=1.1cm]
    (0:1cm) -- (120:1cm) -- (240:1cm) -- cycle;
  \end{scope}
  \begin{scope}[yshift=3*-2.3cm]
    \fill[red] (-1.2,-.6) rectangle (1.2,.6);
    \fill[blue,draw=black,even odd rule]
    circle[radius=1.1cm]
    (0:1cm) -- (240:1cm) -- (120:1cm) -- cycle;
  \end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

PDF 文件是透明的。要获取正确的 PNG 文件(带透明度),请使用convertImageMagick(pdftopnm似乎添加了白色背景)。

以下 PSTricks 代码显示了差异(使用或不使用eofillfillstyle -eofill意味着偶数奇数填充):

\documentclass[border=12pt]{standalone}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}[showgrid](6,6)
  \pscustom[fillstyle=solid,fillcolor=green]
  {
    \pscircle(3,3){3}
    \psline[liftpen=2](1,2)(5,2)(3,5)(1,2)
  }
\end{pspicture}  
\begin{pspicture}[showgrid](6,6)
  \pscustom[fillstyle=solid,fillcolor=green]
  {
    \pscircle(3,3){3}
    \psline[liftpen=2](3,5)(5,2)(1,2)(3,5)
  }
\end{pspicture}  
\begin{pspicture}[showgrid](6,6)
  \pscustom[fillstyle=eofill,fillcolor=green]
  {
    \pscircle(3,3){3}
    \psline[liftpen=2](1,2)(5,2)(3,5)(1,2)
  }
\end{pspicture}  
\begin{pspicture}[showgrid](6,6)
  \pscustom[fillstyle=eofill,fillcolor=green]
  {
    \pscircle(3,3){3}
    \psline[liftpen=2](3,5)(5,2)(1,2)(3,5)
  }
\end{pspicture}  
\end{document}

在此处输入图片描述

使用 PSTricks 时,eofill不能与其他填充样式(如 hlines)一起使用(可能是一个错误)。您始终可以使用非零规则(PSTricks 使用的默认规则)并为您的孔指定正确的方向:

\documentclass[border=12pt]{standalone}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}[showgrid](6,6)
  \pscustom[fillstyle=hlines,hatchcolor=green]
  {
    \pscircle(3,3){3}
    \psline[liftpen=2](1,2)(5,2)(3,5)(1,2)
  }
\end{pspicture}  
\begin{pspicture}[showgrid](6,6)
  \pscustom[fillstyle=hlines,hatchcolor=green]
  {
    \pscircle(3,3){3}
    \psline[liftpen=2](3,5)(5,2)(1,2)(3,5)
  }
\end{pspicture}  
\end{document}

在此处输入图片描述

答案2

我不知道pstricks剪辑形状包含孔的非常复杂的剪辑可能性,但你可以(几乎总是)模仿通过叠加层来实现复杂的配置:

\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}[showgrid](6,6)
\psframe[linestyle=none,fillstyle=solid,fillcolor=blue](0,0)(3,3)
\pscircle[linestyle=none,dimen=middle,fillstyle=solid,fillcolor=red](3,3){3}
\begin{psclip}{\pspolygon[linestyle=none,fillstyle=solid,fillcolor=white](2,2)(3,4)(4,2)}
\psframe[linestyle=none,fillstyle=solid,fillcolor=blue](0,0)(3,3)
\end{psclip}
\end{pspicture}  
\end{document} 

请注意,三角形并不透明,就像示例中的正方形一样。

在此处输入图片描述

或者更复杂的

在此处输入图片描述

编辑:我认为,正如您的新示例所建议的那样,在最终的 pdf 文件中拥有真正的内部透明区域应该是可能的,因为此功能存在于 Illustrator 和 Inkscape 中,但据我所知,它尚未实现,pstricksTikZ我可能是错的。

相关内容