
我一直在嘗試使用 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}
不過,我會推薦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}