
このツリーに緑のアーク、ラベル、ボックスを追加したいと思います。(ラベルは、最小限ではない MWE と同様に、黒と赤になります)。プログラムによるソリューションは必要ありません。3 種類の緑のアークのそれぞれに対して 1 回ずつ実行する方法を理解していれば、作業を完了できます。
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}
答え1
としてフォローアップの質問、これは別のトピックなので、別の焦点を当てた別の回答をここに示します。
基本的な考え方:
- 紹介
named nodes
する前に表示 styles
次の項目で使用するために、有用性を定義する\node
これらのスタイルで新しい を記憶された位置(名前付き)に配置する\draw
それらの間に平行線を引いて
よく見ると、tikz-qtree
ツリー ノードが中心から少しずれて接続されているように見えます (少なくとも時々)。そのため、スタイルでsq
最小crc
サイズ (基本的には正方形または円) を定義しても、この試みは失敗し、平行でない線になります。
\node[sq] (X0) at (A0){};
\node[crc] (X1) at (C1){};
\draw[teal] (X0.south west) -- (X1.south east); % <<< no parallel line !
そこで私が選んだ代替案は次のとおりです。
- 代わりに極座標表記法を使用します。
(X1.340)
(340度のノード形状との交差) - 角度を「目視」で調整する
たとえば を使用することもできます([yshift=-2mm] X1)
が、これによって実際に利点が得られる可能性は低いでしょう。
minimum size
より均一な視覚的結果を得るには、ツリーのすべてのノードに対して、有用なまたはも必要になるかもしれませんminimum width
。これらの値が十分に大きい場合、A4 などの長方形を除いて、すべての黒い長方形は同じ寸法になります。
\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}
答え2
やり方は次のとおりです:
- マニュアルの第4章を参照
- 追加の
node
sを配置する \draw
後でanti
-macroを変更する必要があるかもしれません
マニュアルに記載されているステートメントの他に、コマンド内の を にcontrols
置き換えることを好む傾向があります。その方が視覚化しやすく、したがって制御しやすいと思うからです。--
\draw
to[out=angle,in=angle]
\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}
追伸
ノード内でマクロを使用することもできますが\anti
、おそらく最善の方法ではありません。
...
\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}
このコード:
\node(B4){\anti{4}};
左下を定義する- (A0)まで青い点線を引く
pos=.7
そのパス(ここでは直線)に沿った位置にノードを配置します。- そこにテキストを含むノードを挿入します。
below
- アンカーを固定し
west
、テキストが常にこのノードの右側から始まるように表示します。