TikZ 节点之间的空白

TikZ 节点之间的空白

可能重复:
TikZ 边框不应该显示出来(重叠的圆圈)

使用绝对定位我可以制作一个漂亮的填充网格:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}

\newcommand{\backgroundfill}[5]{
  \begin{tikzpicture}[remember picture, overlay]
    \node (rect) at (current page.north west) 
    [shift={(#3/2 + #1, -#4/2 - #2)}, 
    minimum width =#3, 
    minimum height=#4, 
    fill=#5] {};
  \end{tikzpicture}
}

\thispagestyle{empty}
\begin{document}
\newlength{\LX}
\setlength{\LX}{.5\paperwidth}
 \backgroundfill{0cm}{0cm}{\LX}{\LX}{black}
 \backgroundfill{\LX}{0cm}{\LX}{\LX}{blue}
 \backgroundfill{0cm}{\LX}{\LX}{\LX}{blue}
 \backgroundfill{\LX}{\LX}{\LX}{\LX}{black}
\end{document}

在此处输入图片描述

然而,当我放大图片时,我有时会注意到矩形之间的白色背景。它很小但在屏幕上很明显,但由于某种原因,它没有显示在上传的 PDF 上(上面的光栅化图片)。为了说服自己这是真的,我截取了一张截图,并放大了边缘效果清晰可见的边框。

在此处输入图片描述

有没有什么办法可以避免 TikZ 中矩形之间的空白?

答案1

首先,我会避免不必要的空格导致的累积舍入误差。pgf第一个确定了当前的位置,\backgroundfill因为选项remember picture。下一个\backgroundfill由于行尾的空格而向右移动。该.aux文件包含位置(数字是水平和垂直位置,单位为sp):

\pgfsyspdfmark {pgfid1}{9782558}{43234099}
\pgfsyspdfmark {pgfid2}{10437917}{43234099}
\pgfsyspdfmark {pgfid3}{11093276}{43234099}
\pgfsyspdfmark {pgfid4}{11748635}{43234099}

不包含不必要空格的代码:

\documentclass[a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{positioning}

\newcommand{\backgroundfill}[5]{%
  \begin{tikzpicture}[remember picture, overlay]
    \node (rect) at (current page.north west)
    [shift={(#3/2 + #1, -#4/2 - #2)},
    minimum width =#3,
    minimum height=#4,
    fill=#5] {};
  \end{tikzpicture}%
}

\thispagestyle{empty}
\begin{document}
\newlength{\LX}
\setlength{\LX}{.5\paperwidth}
 \backgroundfill{0cm}{0cm}{\LX}{\LX}{black}%
 \backgroundfill{\LX}{0cm}{\LX}{\LX}{blue}%
 \backgroundfill{0cm}{\LX}{\LX}{\LX}{blue}%
 \backgroundfill{\LX}{\LX}{\LX}{\LX}{black}%
\end{document}

新职位:

\pgfsyspdfmark {pgfid1}{9192734}{46450400}
\pgfsyspdfmark {pgfid2}{9192734}{46450400}
\pgfsyspdfmark {pgfid3}{9192734}{46450400}
\pgfsyspdfmark {pgfid4}{9192734}{46450400}

警告: TikZ如果文件中的数据已更改,则不会发出警告.aux。即使没有重新运行警告,也可能需要额外运行。如果文件已更改,包rerunfilecheck会帮助获取警告:.aux

\usepackage[aux]{rerunfilecheck}

然后,.pdfpdflatex 生成的文件包含以下矩形:

-139.74774 -161.87898 297.64163 297.64163 re 
157.89388 -161.87898 297.64163 297.64163 re 
-139.74774 -459.52061 297.64163 297.64163 re 
157.89388 -459.52061 297.64163 297.64163 re 

该运算符re的语法如下:

<x-pos> <y-pos> <width> <height> re

左侧框的右边缘:157.89389 = -139.74774 + 297.64163右​​侧框的
左边缘:157.89388
上方框的下边缘:-459.52091 = -161.87898 - 297.64163
下方框的上边缘:-459.52061

这意味着已经存在 0.00001bp 和 0.0003bp 的微小重叠。

尝试了不同的 PDF 查看器,我没能发现差距。

答案2

作为一个穷人的解决办法,改变以下几行:

minimum width =#3, 
minimum height=#4, 

到:

minimum width =1.001#3, 
minimum height=1.001#4,

“过度绘制”矩形,以至于背景永远不可见。我仍然不太清楚为什么我的查看器evince在没有交错空间的情况下渲染背景,所以这个问题仍然悬而未决。

相关内容