Fügen Sie dem mit tikz-qtree gezeichneten Baum Bögen hinzu

Fügen Sie dem mit tikz-qtree gezeichneten Baum Bögen hinzu

Ich möchte diesem Baum die grünen Bögen, Beschriftungen und Kästchen hinzufügen. (Die Beschriftungen werden schwarz und rot sein, wie im nicht ganz minimalen MWE). Ich brauche keine programmgesteuerte Lösung. Ich kann die Arbeit beenden, wenn ich sehe, wie ich es einmal für jede der drei Arten von grünen Bögen machen kann.

Bildbeschreibung hier eingeben

MWE:

\documentclass{standalone}
\usepackage{tikz-qtree}
\newcommand{\anti}[1]{%
    \ensuremath{{\color{red}\overline{#1}}}%
}
\newcommand{\ee}[1]{%
    node[midway,left] {#1}
}
\begin{document}
\begin{tikzpicture}[every tree node/.style={draw,rectangle,align=center},
   level distance=1.5cm,sibling distance=0.5cm, 
   edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}]
  \Tree [.0
    \edge \ee{1};
    [.1
      \edge \ee{1};
      [.2
        \edge \ee{1};
        [.3
          \edge \ee{1}; 4
          \edge \ee{\anti{2}}; \anti{5}
        ]
        \edge \ee{\anti{2}};
        [.\anti{4}
          \edge \ee{1}; \anti{5}
          \edge \ee{\anti{2}}; 6
        ]
      ]
      \edge \ee{\anti{2}};
      [.\anti{3}
        \edge \ee{1};
              [.\anti{4}
                \edge \ee{1}; \anti{5}
                \edge \ee{\anti{2}}; 6
              ]
              \edge \ee{\anti{2}};
              [.5
                \edge \ee{1}; 6
                \edge \ee{\anti{2}}; \anti{7}
              ]
      ]
    ]
%    second half
    \edge \ee{\anti{2}};          
    [.\anti{2}
      \edge \ee{1};
      [.\anti{3}
        \edge \ee{1};
              [.\anti{4}
                \edge \ee{1}; \anti{5}
                \edge \ee{\anti{2}}; 6
              ]
              \edge \ee{\anti{2}};
              [.5
                \edge \ee{1}; 6
                \edge \ee{\anti{2}}; \anti{7}
              ]
      ]
      \edge \ee{\anti{2}};
            [.4
              \edge \ee{1};
              [.5
                \edge \ee{1}; 6
                \edge \ee{\anti{2}}; \anti{7}
              ]
              \edge \ee{\anti{2}};
                    [.\anti{6}
                \edge \ee{1}; \anti{7}
                \edge \ee{\anti{2}}; 8
                    ]
              ]
    ]
    ]
  ]
\end{tikzpicture}
\end{document}

Antwort1

Als einZusatzfrage, und da es sich um ein anderes Thema handelt, hier eine separate Antwort mit einem anderen Schwerpunkt.

Grundgedanken:

  • vorstellen named nodesalsgezeigt vor
  • definieren Sie nützlich styles, zur Verwendung mit dem nächsten Element
  • platziere neue \nodes mit diesen Stilen an den gemerkten Positionen (benannt)
  • \draweinige Linien zwischen ihnen für die Parallelen

Wenn Sie genau hinsehen, tikz-qtreescheinen die Baumknoten zumindest manchmal leicht außermittig zu sein. Obwohl die Stile also sqeine crcMindestgröße definieren (was sie im Grunde zu einem Quadrat oder Kreis macht), schlägt dieser Versuch fehl und führt zu einer nicht parallelen Linie:

    \node[sq] (X0) at (A0){};   
    \node[crc] (X1) at (C1){}; 
    \draw[teal] (X0.south west) -- (X1.south east); % <<< no parallel line !

Daher wähle ich die folgende Alternative:

  • Verwenden Sie stattdessen die Polarnotation, etwa (X1.340)(Schnittpunkt mit Knotenform bei 340 Grad)
  • Winkeleinstellung „nach Augenmaß“

Sie könnten auch eg verwenden ([yshift=-2mm] X1), aber das bringt wahrscheinlich keinen wirklichen Vorteil.

Für ein einheitlicheres optisches Ergebnis sollte man vielleicht auch ein sinnvolles „ minimum sizeoder“ minimum widthfür alle Knoten des Baums verlangen. Wenn diese Werte groß genug sind, haben alle schwarzen Rechtecke die gleichen Abmessungen, außer meinem A4-Rechteck usw.

Ergebnis

\documentclass[border=3mm]{standalone}  % <<<
\usepackage{tikz}   % <<< see manual
\usepackage{tikz-qtree}
\newcommand{\anti}[1]{%
    \ensuremath{{\color{red}\overline{#1}}}%
}
\newcommand{\ee}[1]{%
    node[midway,left] {#1}
}
\begin{document}
\begin{tikzpicture}[
    every tree node/.style={draw,rectangle,align=center},
    level distance=1.5cm,
    sibling distance=0.5cm, 
    edge from parent path={(\tikzparentnode) -- (\tikzchildnode)},
    sq/.style ={draw=teal!100!black!80, minimum size=9mm},
    crc/.style={draw=teal!100!black!80, minimum size=8mm,circle},
  ]
  \Tree [.\node(A0){0}; % <<<
    \edge \ee{1};
    [.\node(C1){1}; % <<<
      \edge \ee{1};
      [.2
        \edge \ee{1};
        [.3
          \edge \ee{1}; 4
          \edge \ee{\anti{2}}; \anti{5}
        ]
        \edge \ee{\anti{2}};
        [.\node(B4){\anti{4}};  % <<<
          \edge \ee{1}; \anti{5}
          \edge \ee{\anti{2}}; 6
        ]
      ]
      \edge \ee{\anti{2}};
      [.\anti{3}
        \edge \ee{1};
              [.\anti{4}
                \edge \ee{1}; \anti{5}
                \edge \ee{\anti{2}}; 6
              ]
              \edge \ee{\anti{2}};
              [.5
                \edge \ee{1}; 6
                \edge \ee{\anti{2}}; \anti{7}
              ]
      ]
    ]
%    second half
    \edge \ee{\anti{2}};          
    [.\anti{2}
      \edge \ee{1};
      [.\anti{3}
        \edge \ee{1};
              [.\anti{4}
                \edge \ee{1}; \anti{5}
                \edge \ee{\anti{2}}; 6
              ]
              \edge \ee{\anti{2}};
              [.5
                \edge \ee{1}; 6
                \edge \ee{\anti{2}}; \anti{7}
              ]
      ]
      \edge \ee{\anti{2}};
            [.\node(A4){A4};    % <<<
              \edge \ee{1};
              [.5
                \edge \ee{1}; 6
                \edge \ee{\anti{2}}; \anti{7}
              ]
              \edge \ee{\anti{2}};
                    [.\anti{6}
                \edge \ee{1}; \anti{7}
                \edge \ee{\anti{2}}; 8
                    ]
              ]
    ]
    ]
  ]
  
    % ~~~ extra-nodes and connectors ~~~~~~
    \node[sq] (X0) at (A0){};   
    \node[crc] (X1) at (C1){}; 
    \draw[teal] (X0.south west) -- (X1.340);    
    
    
    % ~~~ some connectors ~~~~~~~~~
    \draw[teal,dashed] (A0) -- (A4);
    \draw[teal,
          loosely dashed, <->] 
          (A0) to[out=-10,in=90] node[sloped,above]{off-road}(A4);
%   \draw[dotted,blue] (B4) -- node[below,pos=.7,anchor=west]{note!}(A0);
\end{tikzpicture}
\end{document}

Antwort2

So kann es gehen:

  • siehe Kapitel 4 im Handbuch
  • Platzieren Sie zusätzliche nodes
  • \drawspäter
  • Möglicherweise müssen Sie Ihr anti-Makro ändern

Ergebnis

Neben der controlsAnweisung im Handbuch bevorzuge ich das Ersetzen --in einem \drawBefehl durch to[out=angle,in=angle], da dies meiner Meinung nach leichter zu visualisieren und somit zu steuern ist.

\documentclass{standalone}
\usepackage{tikz}   % <<< see manual
\usepackage{tikz-qtree}
\newcommand{\anti}[1]{%
    \ensuremath{{\color{red}\overline{#1}}}%
}
\newcommand{\ee}[1]{%
    node[midway,left] {#1}
}
\begin{document}
\begin{tikzpicture}[every tree node/.style={draw,rectangle,align=center},
   level distance=1.5cm,sibling distance=0.5cm, 
   edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}]
  \Tree [.\node(A0){A0};    % <<<
    \edge \ee{1};
    [.1
      \edge \ee{1};
      [.2
        \edge \ee{1};
        [.3
          \edge \ee{1}; 4
          \edge \ee{\anti{2}}; \anti{5}
        ]
        \edge \ee{\anti{2}};
        [.\anti{4}
          \edge \ee{1}; \anti{5}
          \edge \ee{\anti{2}}; 6
        ]
      ]
      \edge \ee{\anti{2}};
      [.\anti{3}
        \edge \ee{1};
              [.\anti{4}
                \edge \ee{1}; \anti{5}
                \edge \ee{\anti{2}}; 6
              ]
              \edge \ee{\anti{2}};
              [.5
                \edge \ee{1}; 6
                \edge \ee{\anti{2}}; \anti{7}
              ]
      ]
    ]
%    second half
    \edge \ee{\anti{2}};          
    [.\anti{2}
      \edge \ee{1};
      [.\anti{3}
        \edge \ee{1};
              [.\anti{4}
                \edge \ee{1}; \anti{5}
                \edge \ee{\anti{2}}; 6
              ]
              \edge \ee{\anti{2}};
              [.5
                \edge \ee{1}; 6
                \edge \ee{\anti{2}}; \anti{7}
              ]
      ]
      \edge \ee{\anti{2}};
            [.\node(A4){A4};    % <<<
              \edge \ee{1};
              [.5
                \edge \ee{1}; 6
                \edge \ee{\anti{2}}; \anti{7}
              ]
              \edge \ee{\anti{2}};
                    [.\anti{6}
                \edge \ee{1}; \anti{7}
                \edge \ee{\anti{2}}; 8
                    ]
              ]
    ]
    ]
  ]
    % ~~~ some connectors ~~~~~~~~~
    \draw[teal,dashed] (A0) -- (A4);
    \draw[teal,
          loosely dashed, <->] 
          (A0) to[out=-10,in=90] node[sloped,above]{off-road}(A4);
    
\end{tikzpicture}
\end{document}

PS

Obwohl Sie Ihr Makro innerhalb eines Knotens verwenden können \anti, ist dies wahrscheinlich nicht die beste Vorgehensweise:

...
        \edge \ee{\anti{2}};
        [.\node(B4){\anti{4}};  % <<<
          \edge \ee{1}; \anti{5}
          \edge \ee{\anti{2}}; 6
        ]
...
    \draw[dotted,blue] (B4) -- node[below,pos=.7,anchor=west]{note!}(A0);
\end{tikzpicture}
\end{document}

Dieser Code:

  • definiert \node(B4){\anti{4}};nach unten links
  • zeichnet eine blaue gepunktete Linie zu (A0)
  • setzt einen Knoten an eine Position pos=.7entlang dieses Pfades (der hier nur eine gerade Linie ist)
  • fügt dort einen Knoten mit Text ein,below
  • verankert es west, d.h. lässt den Text so erscheinen, als würde er immer von der rechten Seite dieses Knotens beginnen

Ergebnis2

verwandte Informationen