Ostatnio stanąłem przed koniecznością narysowania grafu i wstawienia go do dokumentu LaTeXa. Ze względu na mój antytalent do rysowania, odpuściłem sobie zewnętrzne programy typu Corel Draw czy OpenOffice Picture. Rozwiązanie, które wybrałem, ma też jedną ogromną zaletę. Mój dokument kompiluje się bez problemów do DVI, PS i PDF.

Drzewko - rękodzieło

To brzydkie "malowidło" obok, zostało wykonane najbardziej prymitywnym narzędziem: ręką i długopisem. Ten sposób tworzenia obrazków ma niewątpliwie swoje zalety, jednak nie nadaje się do oficjalnych dokumentów. Wykonam go więc tak, żeby wyglądał profesjonalnie. :)

Narzędzia

Sam LaTeX pozwala na tworzenie prostych kształtów, typu okrąg, linia, prostokąt, itp. Jednak ja do tego celu użyję pakietu PGF/TikZ. Aby zainstalować pakiet, w Ubuntu Linux wystarczy wykonać poniższą komendę.

CODE:
  1. sudo apt-get install pgf

Pod Windowsem, w MikTeXu też nie powinno być problemów. Najprawdopodobniej paczka PGF zostanie automagicznie zainstalowana, przy pierwszej próbie użycia pakietu.

Tworzymy drzewko

Aby móc rysować za pomocą TikZa, w nagłówku dokumentu musimy dopisać:

CODE:
  1. \usepackage{tikz}

Sam kod należy umiescić w środowisku tikzpicture.

CODE:
  1. \begin{tikzpicture}
  2. ...
  3. \end{tikzpicture}

Na początek stwórzmy punkty. Polecenie \filldraw rysuje zamalowaną figurę. W tym wypadku są to koła o wielkości 5pt. Liczby w nawiasach to współrzędne punktów w układzie współrzędnych.

CODE:
  1. \begin{tikzpicture}
  2.   \filldraw (0,4) circle (5pt)
  3.              (-2,2) circle (5pt)
  4.               (-3,0) circle (5pt)
  5.               (-1,0) circle (5pt)
  6.              (2,2) circle (5pt)
  7.               (1,0) circle (5pt)
  8.               (3,0) circle (5pt);
  9. \end{tikzpicture}

Graf 01
Dodajmy do tego kilka krawędzi. Poleceniem \draw możemy narysować linie.

CODE:
  1. \begin{tikzpicture}
  2.   ...
  3.   \draw (0,4) -- (-2,2);
  4.   \draw (-2,2) -- (-3,0);
  5.   \draw (-2,2) -- (-1,0);
  6.   \draw (0,4) -- (2,2);
  7.   \draw (2,2) -- (3,0);
  8.   \draw (2,2) -- (1,0);
  9.   \draw (-3,0) -- (-3.5,-1);
  10.   \draw (-3,0) -- (-2.5,-1);
  11.   \draw (-1,0) -- (-1.5,-1);
  12.   \draw (-1,0) -- (-0.5,-1);
  13.   \draw (3,0) -- (3.5,-1);
  14.   \draw (3,0) -- (2.5,-1);
  15.   \draw (1,0) -- (1.5,-1);
  16.   \draw (1,0) -- (0.5,-1);
  17. \end{tikzpicture}

Graf 01

Już mamy prawie cały graf. Zostały jeszcze podpisy i dwie elipsy.

CODE:
  1. \begin{tikzpicture}
  2.   \filldraw (0,4) circle (5pt) node[above=5pt] {$y$}
  3.              (-2,2) circle (5pt)
  4.               (-3,0) circle (5pt)
  5.               (-1,0) circle (5pt)
  6.              (2,2) circle (5pt)
  7.               (1,0) circle (5pt)
  8.               (3,0) circle (5pt);
  9.  
  10.   \draw (-2,0.25) ellipse (53pt and 80pt) node[above=75pt,left=25pt] {$S_1$};
  11.   \draw ( 2,0.25) ellipse (53pt and 80pt) node[above=75pt,right=25pt] {$S_2$};
  12.   ...
  13. \end{tikzpicture}

Graf 03

I to tyle. :) Jeżeli okaże się, że obrazek okaże się zbyt duży, możemy go skalować. Wystarczy otworzyć środowisko tikzpicture z odpowiednią opcją. Poniższy kod zmniejszy obrazek do 70% wielkości.

CODE:
  1. \begin{tikzpicture}[scale=0.7]
  2. ...

Skalowanie niestety ma swoje wady. Musimy się liczyć z tym, że tekst się rozjedzie. Najczęściej będziemy musieli na nowo ustalić położenie napisów.

Zakończenie

Pakiet PGF/TikZ ma o wiele większe możliwości, niż rysowanie prostych grafów. Na http://www.fauskes.net/ można obejrzeć przykłady świetnych prac.

Do tworzenia nowych swoich rysunków przyda się także manual.