Рисование конечных автоматов и графов с помощью TikZ

Библиотека TikZ automata для теории автоматов

В курсах дискретной математики, теории компиляторов и теоретической информатики постоянной задачей является отрисовка детерминированных (ДКА) и недетерминированных (НКА) конечных автоматов, сетей Петри и графов переходов (в смежных задачах программирования также полезен навык создания блок-схем алгоритмов по ГОСТ).

Специализированная библиотека TikZ automata предоставляет готовые семантические примитивы: начальные состояния со стрелкой входа (initial), финальные допускающие состояния с двойной окружностью (accepting), а также петли и дуги переходов.

Подключение библиотек и базовые стили

В преамбуле документа подключите TikZ и расширения для позиционирования и автоматов:

LaTeX
\usepackage{tikz}
\usetikzlibrary{automata, positioning, arrows.meta}

Библиотека positioning позволяет размещать состояния фразами вида right=of q0 вместо ручного высчитывания сантиметров.

Конечный автомат latex онлайн: начальные и допускающие состояния

Ниже приведен готовый код, собирающий рабочий конечный автомат latex онлайн, распознающий бинарные цепочки с четным числом нулей (а иерархические структуры графов удобно строить через пакет синтаксических деревьев forest):

LaTeX
\begin{tikzpicture}[
    shorten >=1pt,
    node distance=3cm,
    on grid,
    auto,
    every state/.style={thick, fill=blue!10}
]
    % Состояния
    \node[state, initial, accepting] (q_0)   {$q_0$};
    \node[state]                    (q_1) [right=of q_0] {$q_1$};

    % Переходы
    \path[-{Stealth}]
        (q_0) edge [loop above] node {1} (q_0)
              edge [bend left]  node {0} (q_1)
        (q_1) edge [loop above] node {1} (q_1)
              edge [bend left]  node {0} (q_0);
\end{tikzpicture}

Ключевые директивы:

  • state, initial — рисует состояние $q_0$ с входящей стартовой стрелкой слева.
  • accepting — автоматически отрисовывает двойную концентрическую окружность допускающего состояния.
  • bend left — изгибает ребро дугой, чтобы прямая и обратная стрелки между узлами не сливались.

Нарисовать граф в latex tikz automata: изогнутые ребра и петли

Если требуется нарисовать граф в latex tikz automata общего вида (взвешенный, ориентированный или неориентированный), используют стили весов на дугах:

LaTeX
\begin{tikzpicture}[node distance=2.5cm, main/.style = {draw, circle, thick, minimum size=8mm}]
    \node[main] (1) {$v_1$};
    \node[main] (2) [right=of 1] {$v_2$};
    \node[main] (3) [below right=of 1] {$v_3$};

    \path[->, >=stealth, thick]
        (1) edge node[above] {$w=4$} (2)
        (2) edge [bend right] node[right] {$w=2$} (3)
        (3) edge node[below left] {$w=7$} (1)
        (1) edge [loop left] node {$w=1$} (1);
\end{tikzpicture}

Опция loop left / loop above формирует аккуратную петлю перехода узла в самого себя.

Позиционирование узлов относительно друг друга

Советы для создания чистых схем:

  • Используйте node distance=2.5cm and 3cm, чтобы раздельно управлять горизонтальным и вертикальным шагом сетки.
  • Для русскоязычных надписей на стрелках используйте стандартные текстовые ноды: node[midway, above] {сигнал}.
  • Цветные заливки состояний (fill=green!20) помогают визуализировать текущее состояние алгоритма при пошаговом объяснении в презентациях.

Практические советы

1

Скрытие стартового текста "start"

По умолчанию над стрелкой входа пишется слово «start». Чтобы убрать его или заменить на русское «вход», добавьте параметр: initial text={вход} или initial text={}.

2

Толщина линий переходов

Для полиграфической четкости используйте глобальный модификатор стрелок -Latex[length=3mm, width=2mm].

Попробуйте прямо сейчас

Создавайте векторные схемы в Labkeeper

Онлайн-редактор LaTeX с полной поддержкой TikZ, моментальной компиляцией в PDF и экспортом графики.

LaTeX editor screenshot
  • Полновесная компиляция: Получайте PDF профессионального качества с помощью встроенного LaTeX-компилятора.
  • 60 секунд на выполнение: Работайте со сложными документами без ограничений — лимит времени компиляции в разы выше, чем в аналогичных сервисах.
  • Умная конвертация: Любые вычислительные формулы автоматически преобразовываются в красивый LaTeX
  • Гибридный синтаксис: Используйте легковесные вставки Markdown прямо в сложном LaTeX-коде для ускорения работы.
bg

Другие статьи