Хочу нарисовать древовидную диаграмму с помощью 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)]
]