tikz 结库中的“麦田怪圈”问题

tikz 结库中的“麦田怪圈”问题

使用 tikz 的 knots 库,我得到了剪切圆周的非常细的轮廓。我该如何让它们消失?以下是 MWE:

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{knots}

\newcommand*\anglei{68}
\newcommand*\radiusi{3.25}

\newcommand*\angleii{37}
\newcommand*\radiusii{5}

\begin{document}
\begin{tikzpicture}
  \begin{knot}%
  [%
    draft mode=off,%
    flip crossing/.list={4,5,8,9},%
    clip width=0,%
    clip radius=15pt,%
    line width=1pt,%
    background color=white,%
    only when rendering/.style={%
        draw=black,%
        double distance=12pt,%
    }%
  ]%
    \strand[double=red] (0,1) arc[start angle=270,delta angle=\anglei,radius=\radiusi] (3,3)
      arc[start angle={90+\anglei},delta angle=-\anglei,radius=\radiusi] (6,5);
    \strand[double=orange] (1,6) arc[start angle=180,delta angle=\anglei,radius=\radiusi] (3,3)
      arc[start angle=\anglei,delta angle=-\anglei,radius=\radiusi] (5,0);
    \strand[double=yellow] (0,5) arc[start angle=90,delta angle=-\angleii,radius=\radiusii] (3,4)
      arc[start angle={270-\angleii},delta angle=\angleii,radius=\radiusii] (6,3);
    \strand[double=green] (0,3) arc[start angle=90,delta angle=-\angleii,radius=\radiusii] (3,2)
      arc[start angle={270-\angleii},delta angle=\angleii,radius=\radiusii] (6,1);
    \strand[double=blue] (3,6) arc[start angle=0,delta angle=-\angleii,radius=\radiusii] (2,3)
      arc[start angle={180-\angleii},delta angle=\angleii,radius=\radiusii] (1,0);
    \strand[double=violet] (5,6) arc[start angle=0,delta angle=-\angleii,radius=\radiusii] (4,3)
      arc[start angle={180-\angleii},delta angle=\angleii,radius=\radiusii] (3,0);
  \end{knot}%
\end{tikzpicture}
\end{document}

注意每次交叉处剪切圆的弧。

答案1

该问题是由于查看 PDF 时的抗锯齿造成的。

这种结的绘制方式与结包翻转交叉点的方式之间存在相互作用。翻转是通过重新绘制上部线束但将其剪裁为交叉点附近的小圆圈来实现的。加倍效果是通过用不同的线条粗细绘制两次相同的线来实现的。因此,当重新绘制上部线束时,它被绘制了两次但被剪裁为圆圈。但是,当打开抗锯齿功能时,这种剪裁并不清晰,而是略微模糊。这意味着在边缘处,新部分变得略微透明并与已有部分混合。因此,当绘制上部路径时,在边缘附近它会变得模糊并与下部路径混合。混合导致了您看到的伪影。

仅在以下情况下使用抗锯齿功能:查看PDF。打印 PDF 时不会使用它。因此,打印 PDF 时这些伪影就会消失。

尽管如此,它们还是有点烦人。图书馆有一个更新knots,可在TeX-SX 启动板页面旨在解决这个问题(tex spath3.dtx生成库)。它并不完美(部分原因是图表中裁剪圆的所需大小不同),但它确实可以消除麦田怪圈。

无作物的结节

\documentclass{article}
%\url{http://tex.stackexchange.com/q/188447/86}
\usepackage{tikz}
\usetikzlibrary{knots}

\newcommand*\anglei{68}
\newcommand*\radiusi{3.25}

\newcommand*\angleii{37}
\newcommand*\radiusii{5}

\tikzset{
  basic strand/.style={
    line width=1pt,
    draw=red,
    double distance=12pt,
  },
  crossing strand/.style={
    line width=1pt,
    double distance=12pt,
    only when rendering/.style={%
      draw=\pgfinnerstrokecolor,%
      line width=12pt,
      double=none,
    }
  }
}

\begin{document}
\begin{tikzpicture}
  \begin{knot}%
  [%
    draft mode=off,%
    flip crossing/.list={4,5,8,9},%
    clip width=1,%
    clip radius=16pt,%
    line width=1pt,%
    background colour=red,%
    only when rendering/.style={%
      basic strand
    },%
    every intersection/.style={
      crossing strand
    },
  ]%
    \strand[double=red] (0,1) arc[start angle=270,delta angle=\anglei,radius=\radiusi] (3,3)
      arc[start angle={90+\anglei},delta angle=-\anglei,radius=\radiusi] (6,5);
    \strand[double=orange] (1,6) arc[start angle=180,delta angle=\anglei,radius=\radiusi] (3,3)
      arc[start angle=\anglei,delta angle=-\anglei,radius=\radiusi] (5,0);
    \strand[double=yellow] (0,5) arc[start angle=90,delta angle=-\angleii,radius=\radiusii] (3,4)
      arc[start angle={270-\angleii},delta angle=\angleii,radius=\radiusii] (6,3);
    \strand[double=green] (0,3) arc[start angle=90,delta angle=-\angleii,radius=\radiusii] (3,2)
      arc[start angle={270-\angleii},delta angle=\angleii,radius=\radiusii] (6,1);
    \strand[double=blue] (3,6) arc[start angle=0,delta angle=-\angleii,radius=\radiusii] (2,3)
      arc[start angle={180-\angleii},delta angle=\angleii,radius=\radiusii] (1,0);
    \strand[double=violet] (5,6) arc[start angle=0,delta angle=-\angleii,radius=\radiusii] (4,3)
      arc[start angle={180-\angleii},delta angle=\angleii,radius=\radiusii] (3,0);
  \end{knot}%
\end{tikzpicture}
\end{document}

相关内容