tikz 中心节点位于其他 2 个节点下方

tikz 中心节点位于其他 2 个节点下方

我想在其他两个节点下方创建一个节点,但将其恰好放置在两个节点的中间。以下是我目前所做的...

     \documentclass[12pt]{article}
     \thispagestyle{empty}
     \usepackage{tikz}
     \usepackage{amsfonts}

     \begin{document}
     \begin{center}
     \begin{tikzpicture}[node distance=3cm]
      \node (top)          {$\top$};
      \node (node1)   [below left of=top]       {\{node1\}};
      \node (node2)      [left of=node1] {\{node2\}};
      \node (node3) [below right of=top] {\{node3\}};
      \node (node4)[right of=node3]         {\{node4\}};
      \node (node1node2) [below right of=node2]        {\{node2 , node1\}};
      \node (node4node3) [below right of=node3]        {\{node3, node4\}};
      \node (bot)   [below left of = node4node3]  {$\bot$};
      \draw (top)    -- (node1);
      \draw (top)    -- (node2);
      \draw (top)    -- (node3);
      \draw (top)    -- (node4);
      \draw (node4)    -- (node4node3);
      \draw (node3)    -- (node4node3);
      \draw (node2)    -- (node1node2);
      \draw (node1)    -- (node1node2);
      \draw (node1node2)    -- (bot);
      \draw (node4node3)    -- (bot);

     \end{tikzpicture}
     \end{center}
     \end{document}

节点“bot”几乎位于节点“node1node2”和“node3node4”的中间,但并非完全位于中间。它应该位于图片底部的中心

答案1

首先,我不确定你想要什么。我知道你想要最后一个节点“bot”位于 (node1node2) 和 (node4node3) 中间,但在此之前我想知道你是否想要一个对称图。

在这种情况下,您需要写\node (node4node3) [below left of=node4]而不是\node (node4node3) [below right of=node3]

如果图是对称的,那么中间位于下方(顶部),放置(底部)没有问题。

如果图形不对称,首先可以使用 Peter 的方法和库calcpositioning但我认为您需要避免使用旧方法来放置节点。说明:below left of=top您需要写而不是below left= of top

/tikz/above left(无值)与anchor=south east相同。请注意,同时提供above和left选项不会产生与above left相同的效果,而只有最后一个left“获胜”。实际上,此选项也接受⟨offset⟩参数,但不使用定位库使用此参数已被弃用。(定位库将此参数的含义更改为更合理的含义。)

结果不一样,因为节点距离不是节点中心之间的距离。如果想要相同的结果,则需要使用选项on grid

为了获取两个节点的中间,你可以避免calc使用

  \path (A) -- node [below= 3cm] {$\bot$} (B);

我的解决方案

\documentclass[11pt]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}


\begin{center}
 \begin{tikzpicture}[node distance=3cm,on grid]
       \draw[help lines] (-6,-9) grid (6,1);
  \node (top)          {$\top$};
  \node (node1)      [below left=  of top]             {\{node1\}};
  \node (node2)      [left=        of node1]           {\{node2\}};
  \node (node3)      [below right= of top]             {\{node3\}};
  \node (node4)      [right=       of node3]           {\{node4\}};
  \node (node1node2) [below right= of node2]           {\{node2 , node1\}};
  \node (node4node3) [below right= of node3]           {\{node3, node4\}};
  \path (node1node2) -- node (bot) [text=red,below=3cm] {$\bot$} (node4node3);
  \draw (top)         edge (node1)
                      edge (node2)
                      edge (node3)
                      edge (node4);
  \draw (node1node2)  edge (bot)
                      edge (node1) 
                      edge (node2);
  \draw (node4node3)  edge (bot)
                      edge (node3) 
                      edge (node4);                    

 \end{tikzpicture}
 \end{center}
\end{document}

在此处输入图片描述

使用下面的代码,图形是对称的

\begin{center}
 \begin{tikzpicture}[node distance=3cm,on grid]
    ...
  \node (node4node3) [below left=  of node4]           {\{node3, node4\}};
   ...                    
 \end{tikzpicture}
 \end{center}

在此处输入图片描述

没有“网格and with the default节点距离”

\documentclass[11pt]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}
 \begin{center}
  \begin{tikzpicture}
        \draw[help lines] (-6,-9) grid (6,1);
   \node (top)          {$\top$};
   \node (node1)      [below left=  of top]             {\{node1\}};
   \node (node2)      [left=        of node1]           {\{node2\}};
   \node (node3)      [below right= of top]             {\{node3\}};
   \node (node4)      [right=       of node3]           {\{node4\}};
   \node (node1node2) [below right= of node2]           {\{node2 , node1\}};
   \node (node4node3) [below right= of node3]           {\{node3, node4\}};
   \path (node1node2) -- node (bot) [text=red,below=1cm] {$\bot$} (node4node3);
   \draw (top)         edge (node1)
                       edge (node2)
                       edge (node3)
                       edge (node4);
   \draw (node1node2)  edge (bot)
                       edge (node1) 
                       edge (node2);
   \draw (node4node3)  edge (bot)
                       edge (node3) 
                       edge (node4);                    

  \end{tikzpicture}
  \end{center}
\end{document}

在此处输入图片描述

备注、补充

要将一个节点放置在两个其他节点之间,有两种方法:

1)   \begin{tikzpicture}
     \node  (a) {a}  ;             
     \node  (b) at (4,2) {b};
     \path   (a) -- node {m} (b);
      %  or \path (a) -- (b) node[midway]{m}; 
      % or pos =.5  instead of midway
  \end{tikzpicture}

2)    \begin{tikzpicture} % with calc library
       \node  (a) {a}  ;             
       \node  (b) at (4,2) {b};
       \node   at ($(a)!0.5!(b)$) {m};
       \end{tikzpicture}

方法的选择取决于创建图形的方式(使用绝对坐标、使用定位库或不使用定位库、是否可以缩放、是否需要添加多个节点)

  \begin{tikzpicture}
     \node  (a) {a}  ;             
     \node  (b) at (8,0) {b};
      \path (a) -- (b) node[pos=.25]{c} node[pos=.5]{d} node[pos=.75]{e}; 
  \end{tikzpicture}

如果你需要将节点放置在中间以下。除非你需要缩放图片,否则使用定位库会很有趣。

如果没有定位库,5 表示 5 pt in,\path (a) -- node[below=5] {m} (b);但是有了定位库,5 表示 5 cm

如果需要缩放图片,使用 calc 库并避免定位会很有趣。例如:

 \node at ($(a)!0.5!(b)+(0,-1)$) {m};

使用此方法,您可以使用scale=2

答案2

您可以使用 tikz 的calc库来计算两个节点的中点:

  \coordinate (CENTER) at ($(node1node2)!0.5!(node4node3)$);
  \node (bot)   [red,below of = CENTER]  {$\bot$};

或者,按照 Jake 的建议,您可以使用 tikz 的positioning库(与 calc 对齐)库,这样您就不需要创建临时坐标了:

\node (bot) [red,below = of $(node1node2)!0.5!(node4node3)$]  {$\bot$};

在此处输入图片描述

代码:

 \documentclass[12pt]{article}
 \thispagestyle{empty}
 \usepackage{tikz}
 \usepackage{amsfonts}
 \usetikzlibrary{calc,positioning}

 \begin{document}
 \begin{center}
 \begin{tikzpicture}[node distance=3cm]
  \node (top)          {$\top$};
  \node (node1)   [below left of=top]       {\{node1\}};
  \node (node2)      [left of=node1] {\{node2\}};
  \node (node3) [below right of=top] {\{node3\}};
  \node (node4)[right of=node3]         {\{node4\}};
  \node (node1node2) [below right of=node2]        {\{node2 , node1\}};
  \node (node4node3) [below right of=node3]        {\{node3, node4\}};
  \node (bot) [red,below = of $(node1node2)!0.5!(node4node3)$]  {$\bot$};
  \draw (top)    -- (node1);
  \draw (top)    -- (node2);
  \draw (top)    -- (node3);
  \draw (top)    -- (node4);
  \draw (node4)    -- (node4node3);
  \draw (node3)    -- (node4node3);
  \draw (node2)    -- (node1node2);
  \draw (node1)    -- (node1node2);
  \draw (node1node2)    -- (bot);
  \draw (node4node3)    -- (bot);

 \end{tikzpicture}
 \end{center}
 \end{document}

相关内容