TikZ 网格和记忆图片、叠加

TikZ 网格和记忆图片、叠加

帮助生成布局的软件包?背景中的方格纸?评论中有人问,为什么需要移动整个图片才能正确排列网格。这个问题从来没有令人满意的答案。

不幸的是,位置以及网格生成过程似乎受到段落缩进的影响。

考虑下面的 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} 

相关内容