请考虑以下 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 中不会有额外的包装,并且嵌套的范围变化看起来如预期的那样(左图):
然而,如果图像的其余部分被“包裹”在第一个节点下(这需要额外的tikzpicture
) - 并且这是状态,如果outertikznesttrue
启用了线 - 那么嵌套的 s 的相对移位就不太正确scope
(图像右)。
虽然我确实期望额外的元素tikzpicture
会以某种方式影响绝对位置,但我没想到它会干扰scope
s 之间的相对偏移。这是预期的行为吗?即使我有一个额外的包装器,我怎么能拥有相同的嵌套范围的相对位置(如左图所示)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 更改了原点。在这种情况下,原点位于红色节点的中心,在另一种情况下,原点是西北点(您的代码中正常)。