使用结库后,非常小的 TikZ 图片中的结间隙会消失

使用结库后,非常小的 TikZ 图片中的结间隙会消失

我试图模仿一个奇特的断点,但使用三个互锁的圆圈。不幸的是,无论我缩小 TikZ 图片还是将其绘制为已经很小的尺寸,结点间隙都会消失。在这种情况下,是否可以保留可见的结点间隙?

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

\begin{document}

\def\rings{
\begin{tikzpicture}[knot gap=0.1pt]
\begin{knot}[
    %draft mode=crossings ,
%    clip width=3,
    flip crossing/.list={1,3},
    ]
    \strand [line width=0.7pt, black] (0,0) ellipse (3.2pt and 2.2pt);%circle (1.0cm);
    \strand [line width=0.7pt, black] (4pt,0) ellipse (3.2pt and 2.2pt);%circle (1.0cm);
    \strand [line width=0.7pt, black] (8pt,0) ellipse (3.2pt and 2.2pt);%circle (1.0cm);
\end{knot}
\end{tikzpicture} 
}

\fancybreak{\rings}

\def\ringsA{
\begin{tikzpicture}[scale=0.1,knot gap=8pt]
\begin{knot}[
    %draft mode=crossings ,
    clip width=3,
    flip crossing/.list={1,3},
    ]
    \strand [line width=0.7pt, black] (0,0) ellipse (1.2 and 0.8);%circle (1.0cm);
    \strand [line width=0.7pt, black] (1.5,0) ellipse (1.2 and 0.8);%circle (1.0cm);
    \strand [line width=0.7pt, black] (3,0) ellipse (1.2 and 0.8);%circle (1.0cm);
\end{knot}
\end{tikzpicture} 
}

\fancybreak{\ringsA}

\fancybreak{***}

\end{document}

在此处输入图片描述

答案1

所以我在这里学习有关我自己的包的东西......

我真的没有想到人们会用这个knots库来绘制非常小的图表,所以尽管可以这样做,但我似乎并没有让这一切变得那么简单!特别是,我似乎把一些与此相关的东西放进去了,但没有费心去记录它们!

当库重新绘制交叉点时,有多种因素会发挥作用knots。过境路径被重新绘制两次,一次用背景色粗略绘制以切掉下境路径,然后再次重新绘制为路径。这两者都被圆圈剪裁,因此它们只在交叉点附近渲染,但圆圈的半径略有不同,因此过境路径与现有路径很好地融合在一起。默认情况下,过境路径被剪裁为比擦除路径大 2pt 的圆圈,并且在更改剪裁半径时保持这一状态。这通常不是问题,因为 2pt 通常小到不引人注意,但当图表太小以至于 2pt 很重要时,它需要更改。这可能,但没有记录:有一个键clip draw radius可以覆盖路径上方剪辑圆的半径。

小尺寸出现的另一个地方是交叉点靠近路径的端点。这可能由假交叉点触发,因此有一个关键点说“如果交叉点在端点的这个距离内,则忽略它,因为它可能是假的”。同样,这个值被设置为很小,但在这么小的图表上,它需要更小。

最后,这些尺寸不考虑 tikzpicture 上的任何缩放比例,因此需要将其视为绝对尺寸而不是相对尺寸。这就是为什么下面两张图片的各种设置都相同。

顺便说一句,如果您在文档中经常使用这些,那么我会将它们存储在一个框中box并重复使用该框。这样可以节省重复所有计算工作。

\documentclass{memoir}
%\url{https://tex.stackexchange.com/q/554924/86}
\usepackage{tikz}
\usetikzlibrary{knots}

\begin{document}

\def\rings{
\begin{tikzpicture}
\begin{knot}[
    clip radius=1.8pt,
    clip draw radius=1.9pt,
    end tolerance=2pt,
    clip width=3,
    flip crossing/.list={1,3},
    ]
    \strand [line width=0.7pt, black] (0,0) ellipse (3.2pt and 2.2pt);%circle (1.0cm);
    \strand [line width=0.7pt, black] (4pt,0) ellipse (3.2pt and 2.2pt);%circle (1.0cm);
    \strand [line width=0.7pt, black] (8pt,0) ellipse (3.2pt and 2.2pt);%circle (1.0cm);
\end{knot}
\end{tikzpicture} 
}

\fancybreak{\rings}

\def\ringsA{
\begin{tikzpicture}[scale=0.1]
\begin{knot}[
    clip radius=1.8pt,
    clip draw radius=1.9pt,
    end tolerance=2pt,
    flip crossing/.list={1,3},
    ]
    \strand [line width=0.7pt, black] (0,0) ellipse (1.2 and 0.8);%circle (1.0cm);
    \strand [line width=0.7pt, black] (1.5,0) ellipse (1.2 and 0.8);%circle (1.0cm);
    \strand [line width=0.7pt, black] (3,0) ellipse (1.2 and 0.8);%circle (1.0cm);
\end{knot}
\end{tikzpicture} 
}

\fancybreak{\ringsA}

\fancybreak{***}

\end{document}

链接环作为非常小的图表

答案2

这看起来像是一个在 40% 缩放系数时出现的分辨率/舍入问题。

作为临时解决方法,将结点导出为独立的 pdf,然后将\includegraphics其(使用graphicx包)与 scale= 选项一起作为\fancybreak

结

我尝试了不同的剪辑和翻转交叉设置进行实验。

独立式:

\documentclass[border=6pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{knots}


\newcommand\ringsA{
\begin{tikzpicture}[scale=1,knot gap=8pt]
\begin{knot}[
    %draft mode=crossings ,
    clip width=15,
    flip crossing/.list={2,3},
    ]
    \strand [line width=0.7pt, black] (0,0) ellipse (1.2 and 0.8);%circle (1.0cm);
    \strand [line width=0.7pt, black] (1.5,0) ellipse (1.2 and 0.8);%circle (1.0cm);
    \strand [line width=0.7pt, black] (3,0) ellipse (1.2 and 0.8);%circle (1.0cm);
\end{knot}
\end{tikzpicture} 
}
\begin{document}


\ringsA

\end{document}

其中包括:

\documentclass{memoir}
\usepackage{graphicx}
\begin{document}
\fancybreak{\includegraphics[scale=0.1]{knots_scaledA}}%filename from previous step
\fancybreak{***}
\end{document}

相关内容