使用 tikz 制作的树形图形

使用 tikz 制作的树形图形

我想模仿图片中的树,但我无法从 tikz 手册中理解如何做一些事情:

  • 对齐线(不应从节点的上部中心开始)
  • 完美的平方线:我希望所有的角度都是 90°:现在我只需使用命令来近似它们\tikzstyle{level 1}=[level distance=14mm,sibling distance=25mm]
  • 我希望虚线以一条小连续线开始,并可能以 h_i 标签下的一个点结束:我尝试在右上角添加另一个(空)节点,但这样连续线就太长了。

我该如何进行这些编辑?

树模型

任何帮助将不胜感激。

这是我的 MWE

\documentclass[11pt,a4paper]{article}

\usepackage{tikz}
\usepackage{tikz-qtree}

\begin{document}

\begin{tikzpicture}[scale=1,font=\footnotesize]
\tikzset{
    solid node/.style={circle,draw,inner sep=1,fill=black},
    hollow node/.style={}
}

\tikzstyle{level 1}=[level distance=14mm,sibling distance=25mm]

\node[solid node,label=right:{$\phi$},label=left:{$t_0$}]{} [grow=up]
child {node[solid node,label=right:{$\phi$}] {}
    child {node[solid node,label=right:{$\phi$}]{}
            child {node[solid node,label=right:{$\phi$}]{}
                child{
                    %node[solid node,label=right:{$\phi$}] {}
                    child{node[hollow node,label=45:{$h_\omega$}] {}    edge from parent[dashed]}
                    child[missing]
                }   
                child {node[solid node,label=right:{$\neg\phi$}] {}
                    child[missing]
                    child {node[solid node,label=right:{$\neg\phi$}] {}
                        child[missing]
                        child {node[hollow node,label=135:{$h_3$}] {}   edge from parent[dashed]
                        }   
                    }
                }
            }
            child {node[solid node,label=right:{$\neg\phi$}] {}
                child[missing]
                child {node[solid node,label=right:{$\neg\phi$}] {}
                    child[missing]
                    child {node[hollow node,label=135:{$h_2$}] {}   edge from parent[dashed]
                    }   
                }
            }
    }
    child {node[solid node,label=right:{$\neg\phi$}] {}
        child[missing]
        child {node[solid node,label=right:{$\neg\phi$}] {}
            child[missing]
            child {node[hollow node,label=135:{$h_1$}] {}   edge from parent[dashed]
            }   
        }
    }
}
child {node[solid node,label=right:{$\neg\phi$}] {}
    child[missing]
    child {node[solid node,label=right:{$\neg\phi$}] {}
    child[missing]
    child {node[hollow node,label=135:{$h_0$}] {}       edge from parent[dashed]
    }   
    }
};
\end{tikzpicture}

\end{document}

我的第一笔画

答案1

我不会使用tikz-qtree如此简单的图表。

我建议你采用\foreach一个普通的定位解决方案:

\documentclass[11pt,a4paper]{article}

\usepackage{tikz}
\usetikzlibrary{positioning, calc}

\begin{document}
    \begin{tikzpicture}[font=\footnotesize,
        every node/.style={circle,draw,inner sep=1,fill=black}]
    \node[label=right:{$\phi$},label=left:{$t_{0}$}](p0){};
    \foreach \i [evaluate=\i as \j using int(\i - 1)] in {1,2,3} {
        \node[label=below right:{$\phi$}, above right= of p\j](p\i){};
        \draw (p\j) -- (p\i);   
    }
    \node[above right= of p3, label=above right:{$h_{\omega}$}] (p4) {};
    \draw (p3) -- ($(p3)!0.3!(p4)$) edge[dashed] (p4);
    \foreach \i in {0,1,2,3}{   
        \coordinate (pl0\i) at (p\i);
        \foreach \il [evaluate=\il as \jl using int(\il - 1)] in {1,2} {
            \node[label={$\neg\phi$}, above left= of pl\jl\i](pl\il\i){};
            \draw (pl\jl\i) -- (pl\il\i);   
        }
        \node[above left= of pl2\i, label=above left:{$h_{\i}$}] (end\i) {};
        \draw (pl2\i) -- ($(pl2\i)!0.3!(end\i)$) edge[dashed] (end\i);
    }
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容