我想用 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)]
]