Диаграмма дерева (последовательности) в Asymptote

Диаграмма дерева (последовательности) в Asymptote

Хочу нарисовать древовидную диаграмму с помощью Asymptote. Но возникли некоторые проблемы.

Я поискал и нашел в Интернете две подсказки. 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)]
  ]

Связанный контент