
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.
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 nodes
alsgezeigt vor - definieren Sie nützlich
styles
, zur Verwendung mit dem nächsten Element - platziere neue
\node
s mit diesen Stilen an den gemerkten Positionen (benannt) \draw
einige Linien zwischen ihnen für die Parallelen
Wenn Sie genau hinsehen, tikz-qtree
scheinen die Baumknoten zumindest manchmal leicht außermittig zu sein. Obwohl die Stile also sq
eine crc
Mindestgröß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 size
oder“ minimum width
fü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.
\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
node
s \draw
später- Möglicherweise müssen Sie Ihr
anti
-Makro ändern
Neben der controls
Anweisung im Handbuch bevorzuge ich das Ersetzen --
in einem \draw
Befehl 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=.7
entlang 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