我想用 Asymptote 畫樹形圖。但有一些問題。
我在網路上搜尋了一下,發現了2個提示。 http://asymptote.sourceforge.net/FAQ/section4.html http://asymptote.sourceforge.net/doc/Frames-and-pictures.html
使用這些技巧,並嘗試盒子和樹。
settings.outformat="pdf";
unitsize(5cm);
usepackage(amsmath);
frame f1;
label(f1, "$\mathbb{N} \models A(0)$", Draw);
add(f1, (0, 5))
frame f2;
label(f2, "$\mathbb{N} \models A(1)$", Draw);
add(f2, (0, 4));
draw(f1 -- f2);
但這行不通。最後的繪製(f1 - f2);命令錯誤。
畫命令需要協調。但這種方法......不聰明(對我來說)。
我想要連接2 盒。如何連接 2 個物件?
我發現繪圖樹官方教學PDF裡有模組,但看起來很難靈活使用(樹的形狀可以改變嗎?)。
如果有一種方法可以方便的使用繪圖樹模組,你能告訴我嗎?
謝謝。
答案1
以下程式碼作為獨立asymptote
腳本運行。我沒有使用過該drawtree
模組,所以我無法幫助你。在我的程式碼中,我沒有使用框架。相反,每個標籤都繪製在預設圖片中。
texpreamble("\usepackage{amssymb}");
settings.outformat="pdf";
unitsize(5cm);
pair p1 = (0, 5);
pair p2 = (0, 4);
draw(p1--p2);
label("$\mathbb{N} \models A(0)$", p1, FillDraw(white, black));
label("$\mathbb{N} \models A(1)$", p2, FillDraw(white, black));
答案2
由於替代方法通常是可以接受的,因此我無法抗拒提供森林解決方案。
math content
將所有節點的內容置於數學模式,避免需要$...$
.draw
在樹中的每個節點周圍繪製邊框。
節點會自動連接:每個父子關係的父節點到子節點。 (用於<node content>, no edge
例外情況。)我已指定與原始程式碼中的定義l sep
相符。unit
這是樹的層之間的最小距離。 (5公分很多了。)
森林不需要明確的座標。它會自動格式化樹。
\documentclass[tikz, border=10pt, multi]{standalone}
\usepackage{forest,amssymb}
\begin{document}
\begin{forest}
for tree={
draw,
math content,
l sep=50mm,
}
[\mathbb{N} \models A(0)
[\mathbb{N} \models A(1)]
]
\end{forest}
\end{document}
改變樹的外觀非常容易。您只需更改環境的序言即可forest
。
例如,
for tree={
draw=red,
thick,
edge={blue, thick, <->},
fill=red!10,
math content,
l sep=50mm,
grow=45,
}
產生
而樹本身的規格保持不變
[\mathbb{N} \models A(0)
[\mathbb{N} \models A(1)]
]