我用来tikz
生成由多个或多或少复杂的子图组成的图形,这些子图会出现多次。所以我创建了一个命令来tikzpicture
为子图生成一个块,现在我想在包装中调用它两次tikzpicture
。
下面是一个 MWE,有人能解释一下为什么第二个方块中的标签会移动吗?我应该把 改成pos=0.5
别的吗?它看起来像是 的结果anchor=north west
,但我不知道如何获得我想要的行为(即相同的定位,但两个标签都在方块内居中)。
\documentclass[a4paper,11pt]{article}
\usepackage{tikz}
\usepackage{xparse}
\DeclareDocumentCommand{\drawSquare}{ m }{
\begin{tikzpicture}
\draw (0,0) rectangle (#1,-#1) node [pos=.5] {$A$};
\end{tikzpicture}
}
\begin{document}
\begin{tikzpicture}
\node[](S) { \drawSquare{2} };
\node[anchor=north west](T) at ([xshift=1cm]S.north east) { \drawSquare{2} };
\end{tikzpicture}
\end{document}
以下是相应的 pdf 图像:
答案1
我无法提供深刻的解释,只能指出:
嵌套 s 很危险
tikzpicture
。据我所知,它不受“官方”支持。它通常有效,但有时无效,因为外部图片的某些设置或参数会干扰内部图片。在您的情况下,外部节点的锚点会干扰内部节点的定位。在下面的示例中,蓝色矩形(节点内的图片)仍然可以,但额外的锚点(红色矩形)会破坏内部节点的定位。将材料装入节点时,如果要精确定位,则必须小心。请注意,红色矩形未准确定位在坐标处。原因是内容被内边框和外边框包围。只有将它们设置为零(
inner sep=0pt,outer sep=0pt
)后,矩形的角才位于坐标(绿色矩形)处。此外,请注意标签(绿色 4)仍然偏离中心,但与另一个矩形中的红色 3 相比,它已经移动;很难预测嵌套的 tikzpictures 会发生什么。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) rectangle (2,2) node[pos=.5] {$1$};
\draw[fill] (0,0) circle (2pt);
%
\node[blue] at (3,0)
{\tikz\draw (0,0) rectangle (2,2) node[pos=.5] {$2$};};
\draw[blue,fill] (3,0) circle (2pt);
%
\node[red,anchor=south west] at (4,0)
{\tikz\draw (0,0) rectangle (2,2) node[pos=.5] {$3$};};
\draw[red,fill] (4,0) circle (2pt);
%
\node[green,anchor=south west,inner sep=0pt,outer sep=0pt] at (6,0)
{\tikz\draw (0,0) rectangle (2,2) node[pos=.5] {$4$};};
\draw[green,fill] (6,0) circle (2pt);
\end{tikzpicture}
\end{document}
答案2
这是我所做的。
我移除了西北锚并绘制了east
第一个图。
以下是代码
\documentclass[a4paper,11pt]{article}
\usepackage{tikz}
\usepackage{xparse}
\DeclareDocumentCommand{\drawSquare}{ m }{
\begin{tikzpicture}
\draw (0,0) rectangle (#1,-#1) node [pos=.5] {$A$};
\end{tikzpicture}
}
\begin{document}
\begin{tikzpicture}
\node[](S) { \drawSquare{2} };
\node[](T) at ([xshift=2.2cm]S.east) { \drawSquare{2} };
\end{tikzpicture}
\end{document}
结果如下: