Деревья и простые графы
дочерние ручки синтаксиса и интервалов.
Деревья и простые графы
Иерархии возникают постоянно: деревья синтаксического анализа, деревья решений, макеты файлов, таксономии. Рисование по одному блоку за раз с помощью «позиционирования» работает, но сохранять равномерные уровни и уровни вручную утомительно. Библиотека деревьев TikZ позволяет вместо этого описывать саму иерархию, используя вложенные «дочерние» операции, и вычисляет макет за вас:
\usetikzlibrary{trees}\begin{tikzpicture}[ every node/.style={draw, circle, minimum size=7mm}, level distance=12mm, sibling distance=18mm]\node{A} child{node{B}} child{node{C} child{node{D}} child{node{E}}};\end{tikzpicture}Чтение дочернего синтаксиса
На картинке содержится одно утверждение. Оно начинается с корня \node{A}, и каждый присоединенный к нему child{...} объявляет одно поддерево. Дочерний элемент обычно содержит node{...} для своей собственной метки и может содержать дополнительные дочерние операции, именно так C получает дочерних элементов D и E. Вложенность фигурных скобок отражает вложенность дерева, поэтому вы можете прочитать структуру непосредственно по отступу. TikZ размещает каждый уровень ниже предыдущего и автоматически рисует соединяющиеся края. Оператор one заканчивается одной точкой с запятой после последней скобки. Отсутствие или лишняя точка с запятой внутри структуры является здесь обычной причиной ошибок.
Три ручки макета
Параметры вверху управляют внешним видом и интервалом. every node/.style={draw, круг, минимальный размер=7 мм} применяет стиль ко всем узлам одновременно: каждый получает нарисованную рамку, круглую форму и минимальный диаметр 7 мм, поэтому отдельные буквы создают однородные круги. level distance=12mm устанавливает вертикальный зазор между родительским и его дочерними элементами. sibling distance=18mm устанавливает горизонтальный разрыв между соседними дочерними элементами одного и того же родителя.
Расстояние между братьями и сестрами — это ручка, которую вы будете регулировать больше всего. Библиотека деревьев резервирует одинаковую ширину для каждого поддерева на данном уровне, поэтому широкие поддеревья могут конфликтовать, если значение слишком мало. Стандартным решением является увеличение интервала вверху, где поддеревья самые широкие, с помощью настроек для каждого уровня, таких как level 1/.style={sibling distance=36mm} и level 2/.style={sibling distance=18mm}. Если ваши метки сильно различаются по ширине, переключитесь с кругов на прямоугольники, удалив слово «круг» из общего стиля.
За маленькими деревьями
Края подбирают стиль через edge fromparent/.style, например, для добавления стрелок или более толстых линий. Для деревьев, насчитывающих примерно дюжину узлов, или для общих графов с циклами библиотека деревьев становится ограниченной. Пакет «лес» обрабатывает большие деревья с автоматической упаковкой. Библиотека graphs с алгоритмами graphdrawing охватывает произвольные графы, хотя для этого пути требуется LuaLaTeX. TikZ не отображает эти предварительные просмотры на странице, поэтому скомпилируйте пример, чтобы увидеть макет. Начните с основ в вашей первой картинке TikZ, если этот синтаксис новый.