为什么我不能将一个节点放置于另一个节点之下?

为什么我不能将一个节点放置于另一个节点之下?

我尝试将一个节点放置在另一个节点下,但这似乎不可能。

\documentclass{article}

\usepackage{pgf}
\usepackage{tikz}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,shadows,shadows.blur,positioning,calc,arrows.meta,automata}    \usepackage[latin1]{inputenc}
\usepackage{verbatim}

\begin{document}
    \begin{figure}[H]
        \centering
        \begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
                        semithick]
            \tikzstyle{every state}=[fill=black,draw=none,text=white]

            \node[state] (A_1)                      {Sunny};
            \node[state] (B_1) [below of = A_1]     {Cloudy};
            \node[state] (C_1) [below of = B_1]     {Rainy};

            \node[state] (A_2) [right of = A_1]     {Sunny};
            \node[state] (B_2) [right of = B_1]     {Cloudy};
            \node[state] (C_2) [right of = C_1]     {Rainy};

            \node[state] (A_3) [right of = A_2]     {Sunny};
            \node[state] (B_3) [right of = B_2]     {Cloudy};
            \node[state] (C_3) [right of = C_2]     {Rainy};

            \tikzstyle{every state}=[fill=blue,draw=none,text=white]

            \node[state] (O1) [below of = A_3]      {dry};
            %\node[state] (O2) [right of = O1]      {damp};        
            %\node[state] (O3) [right of = O2]      {soggy};

            \path  (A_1) edge   node {}  (A_2)
                   (A_1) edge   node {}  (B_2)
                   (A_1) edge   node {}  (C_2)

                   (B_1) edge   node {}  (A_2)
                   (B_1) edge   node {}  (B_2)
                   (B_1) edge   node {}  (C_2)

                   (C_1) edge   node {}  (A_2)
                   (C_1) edge   node {}  (B_2)
                   (C_1) edge   node {}  (C_2)

                   (A_2) edge   node {}  (A_3)
                   (A_2) edge   node {}  (B_3)
                   (A_2) edge   node {}  (C_3)

                   (B_2) edge   node {}  (A_3)
                   (B_2) edge   node {}  (B_3)
                   (B_2) edge   node {}  (C_3)

                   (C_2) edge   node {}  (A_3)
                   (C_2) edge   node {}  (B_3)
                   (C_2) edge   node {}  (C_3);


        \end{tikzpicture}        
        \caption{Example of Markov chain}
        %\label{fig:ex-markov}
    \end{figure}

\end{document}

我正在尝试放置

\node[state] (O1) [below of =of A_3]      {dry};

但不知何故,状态没有放在 A_3 下​​,而是放在 C_2 下。

在此处输入图片描述

它看起来是这样的,红线显示了我想要的位置。不是精确的距离,而是在 A_3 下​​方,使用固定距离。

答案1

考虑到红线的位置,你显然想要

below of=C_1

而不是

below of=A_3

否则,节点将被放置在下方,A_3即的顶部B_3

您似乎认为您的节​​点排列如下:

A_1 B_1 C_1
A_2 B_2 C_2
A_3 B_3 C_3

但你却用这种方式画它们:

A_1 A_2 A_3
B_1 B_2 B_3
C_1 C_2 C_3

答案2

请参阅 TikZ 手册“17.5.3 高级放置选项”。键below ofabove of已被弃用,取而代之的是tikz 库中更灵活的below等。abovepositioning

举例来说,您可以写[below=of A_3]甚至[below=2 of A_3]来指定距离。

请注意,除非您指定该on grid选项,否则节点之间的距离将是它们之间的空间长度,而不是它们的中心之间的距离。

编辑:阅读评论后,我意识到问题可能是对选项的效果的误解below:的效果below=of A是将节点放置在下方,A其边缘之间的距离为1(确切的测量值取决于缩放等,但默认为 1cm)。现在,似乎您希望dry将其放置在下方A但非常接近它。这就是使用样式时会发生的情况label=below:dry\node[state] (A_3) [right=of A_2,label={[state]below:dry}] {Sunny};。您也可以指定距离,尝试below=.1 of A。如果这不是问题,请尝试更具体并准确报告问题的性质(即“不喜欢下面的用法”是什么意思?你收到错误了吗?)

相关内容