![TikZ 网格和记忆图片、叠加](https://linux22.com/image/249971/TikZ%20%E7%BD%91%E6%A0%BC%E5%92%8C%E8%AE%B0%E5%BF%86%E5%9B%BE%E7%89%87%E3%80%81%E5%8F%A0%E5%8A%A0.png)
在帮助生成布局的软件包?背景中的方格纸?评论中有人问,为什么需要移动整个图片才能正确排列网格。这个问题从来没有令人满意的答案。
不幸的是,位置以及网格生成过程似乎受到段落缩进的影响。
考虑下面的 MWE 并使用注释行和非注释行运行它。
\documentclass{article}
\usepackage{tikz}
\begin{document}
%\null
%\noindent
\begin{tikzpicture}[remember picture, overlay]
\draw[line width=1pt,color=teal,step=1cm] (current page.south west) grid ++(5cm,5cm);
\end{tikzpicture}
XXXX
\end{document}
这将产生以下内容:
如果取消注释这些行,您将获得不同的布局。如果添加 7.8 毫米的偏移,则会产生整数平方
\draw[line width=1pt,color=teal,step=1cm,xshift=-7.8mm,yshift=-7.8mm] (current page.south west) grid ++(5cm,5cm);
正确的补偿方法是什么?为什么算法不产生整数平方?如何强制执行整数平方?
答案1
我猜诀窍是稍微移动网格。所需的移位在 .aux 文件中定义,该文件定义了一个名为 的点pgfid<x>
,其中<x>
指的是 tikzpicture 的索引。一般来说,这个数字由 给出\pgfpictureid
。以下代码似乎有效(编译后两次) 适用于所有页面。
\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum}
\begin{document}
\newlength\shiftx
\newlength\shifty
\makeatletter
\newcommand\calcshift{%
\pgfsys@getposition{\pgfpictureid}\@basepoint%
\pgf@process{\pgfpointorigin\@basepoint}%
\setlength\shiftx\pgf@x%
\setlength\shifty\pgf@y%
}
\makeatother
\begin{tikzpicture}[remember picture, overlay]
\calcshift
\draw [line width=1pt,color=teal,step=1cm,xshift=-\shiftx, yshift=-\shifty]
(current page.south west) grid ++(5cm,5cm);
\end{tikzpicture}
\lipsum{4}
% --- just some other tikz picture
\begin{tikzpicture}
\draw (0, 0) rectangle (1, 1);
\end{tikzpicture}
\begin{tikzpicture}[remember picture, overlay]
\calcshift
\draw [line width=1pt,color=teal,step=1cm,xshift=-\shiftx, yshift=-\shifty]
(current page.south west) grid ++(5cm,5cm);
\end{tikzpicture}
\end{document}
答案2
一个新的示例,其中 tikzpicture 位于 tikzpicture 内部,但最简单的方法是第二种方法
1)
\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum}
\begin{document}
\begin{tikzpicture}[remember picture, overlay]
\node[anchor=south west,inner sep=0pt] at (current page.south west)
{\tikz \draw[line width=1pt,color=teal] (0,0) grid ++(5cm,5cm);};
\end{tikzpicture}%
\lipsum
\end{document}
2)
\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum}
\begin{document}
\begin{tikzpicture}[remember picture, overlay,shift=(current page.south west) ]
\draw[line width=1pt,color=teal] (0,0) grid ++(5cm,5cm);
\end{tikzpicture}%
\lipsum
\end{document}