嵌套 tikzpictures 中的嵌套范围转移?

嵌套 tikzpictures 中的嵌套范围转移?

请考虑以下 MWE:

\documentclass{book}

\usepackage[a4paper,twoside,hmargin=3cm]{geometry}

\usepackage{tikz,tikzpagenodes}
\usetikzlibrary{calc,positioning}

\newif\ifoutertikznest
\outertikznesttrue
% \outertikznestfalse


\begin{document}

\begin{tikzpicture}[overlay,remember picture,anchor=north west,inner sep=0pt, outer sep=0pt,line width=2pt]


  \node[draw=red,minimum size=2cm,anchor=north west,inner sep=0pt,outer sep=0pt] at (0,0) (A1) {%
  \ifoutertikznest %
    \begin{tikzpicture}[overlay,remember picture,anchor=north west,inner sep=0pt, outer sep=0pt,line width=2pt] % ***
  \else
    }; % ***
  \fi


  \node[draw=blue,minimum size=2cm,anchor=center,inner sep=0pt,outer sep=0pt] at (current page.center) (A2) {};

  \node[draw=green,minimum size=2cm,anchor=north west,inner sep=0pt,outer sep=0pt] at (current page.north west) (A3) {};


  \begin{scope}[shift={(0.5,1.0)}] %
    \node[draw=magenta,minimum size=2cm,anchor=north west,inner sep=0pt,outer sep=0pt] at (0,0) (A4) {};
    \begin{scope}[shift={(0.5,1.0)}] %
      \node[draw=yellow,minimum size=2cm,anchor=north west,inner sep=0pt,outer sep=0pt] at (0,0) (A5) {};
    \end{scope}
  \end{scope}


  \ifoutertikznest %
  \end{tikzpicture} % ***
  }; % ***
  \fi

\end{tikzpicture}


\end{document}

如果启用该\outertikznestfalse行,则 tikzpicture 中不会有额外的包装,并且嵌套的范围变化看起来如预期的那样(左图):

一个.png

然而,如果图像的其余部分被“包裹”在第一个节点下(这需要额外的tikzpicture) - 并且这是状态,如果outertikznesttrue启用了线 - 那么嵌套的 s 的相对移位就不太正确scope(图像右)。

虽然我确实期望额外的元素tikzpicture会以某种方式影响绝对位置,但我没想到它会干扰scopes 之间的相对偏移。这是预期的行为吗?即使我有一个额外的包装器,我怎么能拥有相同的嵌套范围的相对位置(如左图所示)tikzpicture

答案1

结果正常。您可以添加\fill (0,0) circle (2pt);

  \fill (0,0) circle (2pt);
  \begin{scope}[shift={(0.5,1.0)}] %
    \node[draw=magenta,minimum size=2cm,anchor=north west,inner sep=0pt,outer sep=0pt] at (0,0) (A4) {};
    \begin{scope}[shift={(0.5,1.0)}] %
      \node[draw=yellow,minimum size=2cm,anchor=north west,inner sep=0pt,outer sep=0pt]  at (0,0) (A5) {};
    \end{scope}
  \end{scope}

您可以看到,您使用嵌套的 tikzpicture 更改了原点。在这种情况下,原点位于红色节点的中心,在另一种情况下,原点是西北点(您的代码中正常)。

相关内容