tikz-qtree 中的特殊功能

tikz-qtree 中的特殊功能

我一直在尝试使用 tikz-qtree 包来制作这棵树。我有它的几个部分,但我无法制作虚线。

在此处输入图片描述 我的代码如下:

    \documentclass[a4paper,12pt]{article}

    \usepackage[english]{babel}
    \usepackage[utf8]{inputenc}
    \usepackage{amsfonts, amsmath, amsthm, amssymb} 
    \usepackage{tikz-qtree}

    \begin{document}

\begin{tikzpicture}[scale=1.2,every node/.style={align=center}]
\tikzset{level distance=50pt,sibling distance=5pt}


\Tree [.{$\alpha(\beta)$}:$\tau^a$
        [.{$\alpha$}:$\langle\sigma^a,\tau^a\rangle$ $\bullet$\\$\gamma:\rho^c$ 
        ]
        [.$\beta$:$\sigma^a$ $\bullet$\\$\delta:\vartheta^c$ ] ]

\end{tikzpicture} 

    \end{document}

你能画出那条虚线吗?

答案1

您可以使用tikz任何您喜欢的选项在树中创建节点。例如,您可以创建一个带有圆角虚线边框的标签节点,如下所示:

\begin{tikzpicture}
  [
    scale=1.2,
    every node/.style={align=center},
    level distance=50pt,
    sibling distance=5pt,
  ]
  \Tree
  [.{$\alpha(\beta)$}:$\tau^a$
    [.{$\alpha$}:$\langle\sigma^a,\tau^a\rangle$ \node[label={[draw, densely dotted, rounded corners]below:\strut$\gamma:\rho^c$}]{$\bullet$};
    ]
    [.$\beta$:$\sigma^a$ \node[label={[draw, densely dotted, rounded corners]below:\strut$\delta:\vartheta^c$}]{$\bullet$};
    ]
  ]
\end{tikzpicture}

<code>tikz-qtree</code>

不过我建议forest能够提供 Ti 所有功能的Z 等等。如果您愿意,您可以将最后的线条放入节点中,并让 Forest 使用您想要的任何选项自动添加圆圈,同时添加虚线边框等。例如,您可以将以下代码用于树的序言。

  for tree={
    math content,

默认情况下,节点具有数学内容。

    parent anchor=children,
    child anchor=parent,

把东西整理一下。

  },
  before typesetting nodes={

推迟此操作,直到一切准备就绪。

    where n children=0{

仅适用于终端节点。

      no edge,

不要给它们画边。

      draw,

请为它们画一个边框。

      densely dotted,

使边框密集分布。

      content/.wrap value={\strut#1},

使它们都具有相同的高度。

      rounded corners,

把角弄圆。

      replace by={[, circle, fill, no edge, inner sep=0pt, minimum size=5pt, append]}

在终端节点前插入另一个节点,该节点只是一个小的实心圆。也不要在该节点上画边。通过replace by将原始节点与替代节点配对,然后append再配对原始节点来声明节点。我们稍后再执行此操作,因为否则原始节点尚未全部保存,如果我们尝试移动它们,我们可能会丢失一些东西。

    }{}

不要对非终端节点做任何事情。

  }

延迟的事情结束了。

这使得我们能够非常简洁地指定树本身,而无需一直切换到数学模式。

  [\alpha(\beta):\tau^a
    [{\alpha:\langle\sigma^a,\tau^a\rangle}
      [\gamma:\rho^c
      ]
    ]
    [\beta:\sigma^a
      [\delta:\vartheta^c
      ]
    ]
  ]

组装这个,

\begin{forest}
  for tree={
    math content,
    parent anchor=children,
    child anchor=parent,
  },
  before typesetting nodes={
    where n children=0{
      no edge,
      draw,
      densely dotted,
      content/.wrap value={\strut#1},
      rounded corners,
      replace by={[, circle, fill, no edge, inner sep=0pt, minimum size=5pt, append]}
    }{}
  }
  [\alpha(\beta):\tau^a
    [{\alpha:\langle\sigma^a,\tau^a\rangle}
      [\gamma:\rho^c
      ]
    ]
    [\beta:\sigma^a
      [\delta:\vartheta^c
      ]
    ]
  ]
\end{forest}

生产

森林

\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{tikz-qtree}
\usepackage{forest}
\begin{document}
\begin{tikzpicture}
  [
    scale=1.2,
    every node/.style={align=center},
    level distance=50pt,
    sibling distance=5pt,
  ]
  \Tree
  [.{$\alpha(\beta)$}:$\tau^a$
    [.{$\alpha$}:$\langle\sigma^a,\tau^a\rangle$ \node[label={[draw, densely dotted, rounded corners]below:\strut$\gamma:\rho^c$}]{$\bullet$};
    ]
    [.$\beta$:$\sigma^a$ \node[label={[draw, densely dotted, rounded corners]below:\strut$\delta:\vartheta^c$}]{$\bullet$};
    ]
  ]
\end{tikzpicture}
\begin{forest}
  for tree={
    math content,
    parent anchor=children,
    child anchor=parent,
  },
  before typesetting nodes={
    where n children=0{
      no edge,
      draw,
      densely dotted,
      content/.wrap value={\strut#1},
      rounded corners,
      replace by={[, circle, fill, no edge, inner sep=0pt, minimum size=5pt, append]}
    }{}
  }
  [\alpha(\beta):\tau^a
    [{\alpha:\langle\sigma^a,\tau^a\rangle}
      [\gamma:\rho^c
      ]
    ]
    [\beta:\sigma^a
      [\delta:\vartheta^c
      ]
    ]
  ]
\end{forest}
\end{document}

相关内容