私は tikz 初心者です。有向集合のグラフを描きたかったのですが、何が起こっているのかよく理解せずに、オンラインの例のコードを組み合わせてなんとか描きました。今、私はいくつかの改善を行いたいと思っていますが、そのための例 (コードに統合できるもの) が見つかりませんでした。
これまでの私のコード:
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{main node/.style={circle,draw}}
...
\begin{tikzpicture}
\node[main node] (B) {};
\node[main node] (a) [above left = 1 cm and 1cm of B] {$\alpha$};
\node[main node] (a1) [above left = 1 cm and 1cm of a] {};
\node[main node] (a2) [above right = 1 cm and 1cm of a] {};
\node[main node] (g) [above right = 1cm and 1cm of B] {$\gamma$};
\node[main node] (g1) [above left = 1 cm and 1cm of g]{};
\node[main node] (g2) [above right = 1 cm and 1cm of g]{};
\node[main node] (g3) [above right = 1 cm and 1cm of g2]{};
\path[draw,thick]
(B) edge node {} (a)
(B) edge node {} (g)
(a) edge node {} (a1)
(a) edge node {} (a2)
(g) edge node {} (g1)
(g) edge node {} (g2)
(g2) edge node {} (g3);
\end{tikzpicture}
改善したい点:
1) グラフが継続していることを示したいと思います。たとえば、右上のノードとエッジを、現在のエッジの方向にある 3 つのダッシュに置き換えたいと思います。このような「3 つのダッシュの拡張」を の子にも追加したいと思います$\alpha$
。
2) 1) で示した拡張部分を含む のすべての子孫を囲む四角形を描きます$\alpha$
。このボックスの上部に次のようなテキストを入れます。$\geq\alpha$
3) すべての円を同じサイズにしたいのですが、これは最大のラベルによって自動的に決定されます。
編集:
minimum size=1cm
3) はノードのスタイルに を使用することで部分的に解決できます。ただし、ラベル、フォント、その他のサイズが変更されるたびに 1cm 調整する必要があります。
答え1
1 は、ノードを非表示にして ( を省略draw
)、エッジを にすることで実行できますdashed
。
2 は tikzlibrary を使用して実行できますfit
。
3 はかなり難しいです。なぜなら、すべてのノードが処理された後にのみ最大ノードがわかるのに対し、ノード サイズを事前に設定する必要があるからです。これに対処する方法はいくつかありますが、絶対サイズを定義する (自分で提案したように) か、または、代わりに、ユーザーが提供する最大ノード (以下の MWE 内) から最大サイズを計算する方が (はるかに) 簡単です。
注: この解決策は既存の質問に基づいています: 例:Tikz - ノードセットの周囲にボックスを描く方法新しい質問をする前に、必ず広範囲な検索を行ってください。MWE については、 が含まれ\documentclass
、が\begin{document}
含まれず、コンパイルされることを確認してください...
。
MWE:
\documentclass{article}
\usepackage{tikz}
\usepackage{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{fit}
\tikzset{main node/.style={circle,draw}}
\newcommand{\largest}{$\gamma$}
\newlength{\sizemax}
\setlength{\sizemax}{\maxof{\widthof{\largest}}{\totalheightof{\largest}}}
\tikzset{minimum size=\sizemax+10pt}
\begin{document}
\begin{tikzpicture}
\node[main node] (B) {};
\node[main node] (a) [above left = 1cm and 1cm of B] {$\alpha$};
\node[main node] (a1) [above left = 1cm and 1cm of a] {};
\node[main node] (a2) [above right = 1cm and 1cm of a] {};
\node (a1x) [above left = 1cm and 1cm of a1]{};
\node (a2x) [above left = 1cm and 1cm of a2]{};
\node[main node] (g) [above right = 1cm and 1cm of B] {$\gamma$};
\node[main node] (g2) [above right = 1cm and 1cm of g]{};
\node (g3) [above right = 1cm and 1cm of g2]{};
\path[draw,thick]
(B) edge (a)
(B) edge (g)
(a) edge (a1)
(a) edge (a2)
(g) edge (a2)
(g) edge (g2)
(g2) edge[dashed] (g3)
(a1) edge[dashed] (a1x)
(a2) edge[dashed] (a2x);
\node[draw,fit=(a) (a1) (a2) (a1x) (a2x)] (ad) {};
\node[above=0mm of ad] {$\geq\alpha$};
\end{tikzpicture}
\end{document}
結果: