Asymptote 中的树(序列)图

Asymptote 中的树(序列)图

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

相关内容