TikZ 网格与页面边界不同步

TikZ 网格与页面边界不同步

下面的代码

\documentclass{article}
\usepackage{tikz}
\usepackage[paperheight=297mm,paperwidth=210mm,margin=0mm,showframe]{geometry}
\begin{document}
\noindent
\begin{tikzpicture}[remember picture,overlay]
  \draw[help lines] (current page.south west) grid (current page.north east);
  \draw[help lines] (current page.south west) -- (current page.north east);
\end{tikzpicture}
\end{document}

生成的网格似乎与页面边框不同步,即使基于--对角线路径,这两个点似乎是正确的,如下所示?

来自文档我希望网格准确地从这两个点开始和结束。


显然,我对这个问题的回答不够清楚。我并不为无法用整数个方格填满整个页面而感到困惑。我感到困惑的是,为什么方格不从我开始网格的位置开始(那么在其他 3 个角,我可以在一个方向、另一个方向或两个方向上放置少于一个方格)

在此处输入图片描述

答案1

TikZ 的操作grid基于下层 pgf 层和命令\pgfpathgrid。其文档102.8 网格路径操作更详细地解释了网格的构造。

\pgfpathgrid[⟨options⟩]{⟨first corner⟩}{⟨second corner⟩}

从概念上讲,原点是网格的一部分,网格被裁剪到由 ⟨first corner⟩ 和 ⟨second corner⟩ 指定的矩形内。但是,不会发生裁剪(此命令只会将部分内容添加到当前路径),并且会计算线条进入和离开“裁剪区域”的点,并使用这些点将简单线条添加到当前路径。

这意味着网格交点的坐标是步进设置的倍数。x 和 y 方向的默认值均为 1 厘米。

A4纸的尺寸为21厘米×29.7厘米。高度为不是1厘米的倍数。因此,不可能同时将左下角和右上角作为网格交点。选项:

  • 改变垂直方向的步长,使高度成为步长的倍数。
  • 或者决定哪个角与网格交叉点相匹配。

另一个问题是你不知道在哪里节点的原点(current page)是。但这可以通过变换来确保。以下代码将原点(用大红点标记)放在页面的左下角:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage[paperheight=297mm,paperwidth=210mm,margin=0mm,showframe]{geometry}
\begin{document}
\noindent
\begin{tikzpicture}[remember picture,overlay]
  \draw[thick, shift=(current page.south west)]
     (0, 0) grid ($(current page.north east) - (current page.south west)$);
  % Visualize origin for grid
  \fill[red] (current page.south west) circle[radius=10mm];
  % Diagonal
  \draw[very thick, blue] (current page.south west) -- (current page.north east);
\end{tikzpicture}
\end{document}

带有蓝色对角线和左下角红点的页面网格

答案2

网格框默认为 1cm。因此您的网格不能在这些点上开始和结束。此外,即使坐标不是整数,网格也会在整数值处有交点。请考虑以下示例:

在此处输入图片描述

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw[blue](0,0)grid(7,5);
\draw[red, thick](.5,.5)grid(6.5,4.5);
\end{tikzpicture}

\end{document}

相关内容