Блог о математике, программировании, алгоритмах. И немного о работе операционной системы Linux.

четверг, 27 октября 2011 г.

graphviz, dot2tex, tikz: вставка графов прямо в тело LaTeX документа (TeXLive, Ubuntu 10.04).

Изветсно, что LaTeX является de-facto стандартом оформления научной (особенно математической, физической и химической) документации. В случае с математикой (особенно дискретной), возникает острая потребность вставки изображений графов в текст документа. Обычно, для визуализации графов используется набор утилит graphviz, который использует для описания графа свой, простой в изучении, язык DOT, но для того, чтобы вставить в LaTeX документ граф, нужно сначала создать файл с описанием графа, потом скомпилировать его, а потом только вставить картинку в документ. Для автоматизации этого процесса создан пакет dot2texi, который использует утилиту dot2tex.

Положим, что у нас есть LaTeX документ, со стандартной преамбулой:
% Задает класс документа, размер шрифта, и двустороннюю разметку
\documentclass[12pt,a4paper,twoside]{book}
% Указывает на то, что будет использована кодировка UTF-8
\usepackage[utf8x]{inputenc}
% Включает пакет babel с поддержкой русского и английского языков
\usepackage[english,russian]{babel}
% Добавляет пакет asmmath (Ameriacn Mathematical Society)
\usepackage{amsmath}
% Дает возможность включать в документ графику
\usepackage[dvips]{graphicx}

\begin{document}
 
\end{document}
Прямо перед \begin{document} мы вставляем следующие строки:
\usepackage{dot2texi}[dot,mathmode]
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
После чего в документе, то есть между \begin{document} и \end{document} можем вставлять следующее:
\begin{dot2tex}
    digraph G {
        x_1 -> x_2;
        x_1 -> x_3;
    }
\end{dot2tex}
То что стоит между \begin{document} и \end{document} является записью структуры графа на языке DOT. Теперь давайте разберемся. dot2texi — пакет, который переводит запись на языке DOT в TeX представление, а tikz — пакет все это отрисовывающий. Я пользовался пакетом texlive на Ubuntu 10.04. При установке всего этого я столкнулся со следующими проблемами:
  1. Пакет dot2texi не установлен (LaTeX предлагал мне указать где лежит файл стиля *.sty). Для устранения этой ошибки нужно поставить пакет texlive-pictures
    sudo apt-get install texlive-pictures
  2. Также нужно поставить пакет texlive-pstricks.
  3. При попытке компиляции файла выдавалась ошибка: Package dot2texi Warning: Conversion of latex-dot2tex-fig1.dot failed... Я точно не знаю почему возникает эта ошибка (почему-то при запуске из TeX-скриптов не получается найти утилиту dot2tex), но она решается добавлением аттрибута --shell-escape к команде latex, то есть результирующая строка будет выглядеть так:
    latex --shell-escape your_filename.tex
    
  4. Я не помню зачем, но мне понадобилось установить пакет texlive-latex-extras. Но если вы постоянно пользуетесь LaTeX для верстки документов, то у вас он, скорее всего уже стоит.
  5. Были обнаружены проблемы при работе с утилитой dvipdfm. Вместо нее нужно использовать dvipdf.
Для правильной работы пакета dot2texi нужно, чтобы была установлена утилиты dot2tex и graphviz. Они присутствуют в стандартном репозитории. dot2tex-у можно задать параметры, например, каким визуализатором графов из набора graphviz пользоваться. В нашем случае это dot. Подробнее о работе пакета dot2texi можно почитать в официальном руководстве.

2 комментария:

  1. У меня даже родные примеры dot2tex и dot2texi работают неправильно - такое впечатление, что узлы графа рисуются один поверх другого. И не знаю, куда копать...

    ОтветитьУдалить
  2. У меня родные примеры (те, которые из официального мануала) тоже работали не правильно. Например, граф, который изображал конечный автомат разползся и выглядел криво, не так как в мануале, есть мнение, что можно сменить отрисовщик: например, dot на neato.

    ОтветитьУдалить