文本在子 tikzpicture 中移动

文本在子 tikzpicture 中移动

我用来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}

结果如下:

在此处输入图片描述

相关内容