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 的所有功能kZ 等等。如果您願意,您可以將最終的線條放入一個節點中,並讓 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}

相關內容