TiKZ:为什么在内/外 sep =0 的两个拟合节点之间可以看到一条线?

TiKZ:为什么在内/外 sep =0 的两个拟合节点之间可以看到一条线?

考虑下面的代码片段(用 PDFLatex TexLive 2015 编译)。

为什么 DocumentViewer (3.18.2,Ubuntu 16) 显示一条细线(某些缩放级别)?我已将外部/内部分隔符设置为 0。这是 PDF 渲染中的缺陷还是此 TiKZ 代码片段存在问题?

在此处输入图片描述

\documentclass{book}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}
\node[inner sep=0mm, outer sep=0mm, fill=blue,minimum width=5cm,minimum height=5cm] (first) at (10,10) {};
\node[inner sep=0mm, outer sep=0mm, fill=blue,minimum width=5cm, fit=(first.north)(first.south),anchor=east] (second) at (first.west) {};
\end{tikzpicture}
\end{document}

答案1

问题可能出在查看器中的渲染上(我使用 Sumatra)。如果我放大使用您的代码获得的图像,此行就会消失。要解决此查看器差异,请尝试以下操作:

\documentclass{book}
\usepackage{tikz}
\usetikzlibrary{fit}
\begin{document}
  \begin{tikzpicture}%
    [every node/.style =
      {fill=blue, draw=blue, % <-- added "draw"
       inner sep=0mm, outer sep=0mm, 
       minimum width=5cm, minimum height=5cm
      }
    ]
  \node (first) at (10,10) {};
  \node[fit=(first.north) (first.south),anchor=east] (second) at (first.west) {};
  \end{tikzpicture}
\end{document}

在此处输入图片描述

编辑: Percusse 的答案解释了为什么在您的情况下相邻节点之间的细线是可见的。draw在上面的 MWE 中添加了选项,导致节点重叠以获得边框线的厚度:

在此处输入图片描述

因此,图像查看器不再有位置可用。上图是使用以下代码生成的:

\documentclass{book}\usepackage{tikz}
\usetikzlibrary{fit}

\begin{document}
    \begin{tikzpicture}[
test/.style = {fill=#1, draw=#1, draw opacity=0.5,
               inner sep=0pt, outer sep=0pt, 
               minimum width=5cm, minimum height=5cm}
                        ]
\node (first)  [test=blue]  {};
\node (second) [test=red,
                fit=(first.north) (first.south),
                anchor=east] at (first.west) {};
    \end{tikzpicture}
\end{document}

答案2

这种效果通常被称为合并伪影,与 TikZ 无关。这是图形设计师熟知的伪影,他们通过避免共享完美对齐边缘的形状或精确填充切口的形状来避免这种情况。

例如参见渲染问题这里(单击后请稍等片刻以查看更改)。同样,graphics.SE 也有很多相关问题,希拉里的标志可能是投票最多的:希拉里·克林顿的标志上有隐藏的缺口,这有什么原因吗?

所以典型的解决方案是让事物稍微重叠。

相关内容