Auch wenn viele meiner Kommilitonen den Weg zu \LaTeX gefunden haben, so verwenden doch nur recht wenige \LaTeX zur Erstellung von Präsentationen und noch weniger verwenden TikZ zur Erstellung der Grafiken. Ein Hauptargument gegen den Einsatz von TikZ ist, dass im Vergleich zu einem WYSIWYG Grafikeditor die Planung und Erstellung einer Grafik etwas länger dauert. Bei dem Einsatz von TikZ muss man die entsprechenden Befehle und Argumente kennen/lernen und sich im Vorfeld Gedanken über die Positionierung der einzelnen Elemente machen, da man sie nicht einfach auf ihre Position ziehen kann.

Trotzdem gibt es für mich unverzichtbare Vorteile von TikZ, gegenüber Grafiken aus externen Anwendungen. Eine TikZ Grafik lässt sich programmieren. Möchte man eine komplexe Grafik mit sich wiederholenden Mustern erstellen, oder gar die Funktionsweise eines Algorithmus darstellen, so lässt sich dies mit etwas Geschick in TikZ direkt programmieren und benötigt somit relativ wenig Aufwand.

Eine Sammlung von tollen Beispielen zu \LaTeX mit dem Paket Beamer und TikZ findet sich auf der Plattform TeXample.net.

Einige Animationen auf TeXample.net basieren leider auf einem JavaScript-Plugin, welches nur in den neueren Adobe-Readern unter Windows und Mac OS funktioniert. Sollte ich Animationen verwenden wollen, so verwende ich lieber das Programm Impressive um diese nachträglich hinzuzufügen und ausschließlich während der Präsentation anzuzeigen.

Informationsfluss im Projekt Zwei Welten

Der Informationsfluss und die eingesetzten Technologien für das Projekt Zwei Welten

Für die Abschlusspräsentation im Projekt „Zwei Welten“ habe ich anstelle eines Inhaltsverzeichnisses eine Grafik zum Informationsfluss in der Webanwendung verwendet. Diese wurde dann Stück für Stück aufgebaut (siehe Folgeartikel Teil 2 und Teil 3) und konnte so einen besseren Überblick über die aktuell besprochene Komponente geben, als es mit einem linearen Inhaltsverzeichnis möglich gewesen wäre.

Hätte ich die Grafik in einem externen Grafikeditor erstellt, so hätte ich bei jeder Änderung mehr als zehn Einzelgrafiken exportieren müssen. Da ich sie aber in TikZ erstellt habe, konnte ich sie einfach in einem \LaTeX Kommando speichern und immer wieder aufrufen. Im Folgenden zwei einfache Tipps, wie sich TikZ Grafiken in Präsentationen mit Beamer und \LaTeX verwenden lassen.

Beispiel Grafik schrittweise aufdecken

Das \LaTeX Paket Beamer stellt verschiedene Befehle bereit, mit dem sich Elemente nur auf bestimmten Folien einblenden lassen (\pause \only \onslide \uncover \visible, siehe \LaTeX Dokumentation). Diese lassen sich auch direkt in einer TikZ Grafik verwenden, wenn man die einzelnen Pfade getrennt erstellt. Dies sieht man im folgenden Codebeispiel daran, dass jeder Pfad mit einem Backslash eingeleitet und mit einem Semikolon abgeschlossen wird.

Als Beispiel habe ich hier einen Ausschnitt aus der oben dargestellten Grafik zum Informationsfluss im Projekt „Zwei Welten“ ausgesucht.

Es ist zu beachten, dass sich die einzelnen Knoten relativ zu dem Schema-Knoten in der Mitte ausrichten, weshalb dieser als erstes definiert werden muss.

Beispiel Code für LaTeX mit den Paketen Beamer und TikZ

\documentclass{beamer}
\usepackage[german]{babel}
\usepackage{tikz}
\setbeamertemplate{navigation symbols}{} % entferne Navigationssymole
\setbeamercovered{transparent} % zeige verdeckte Elemente transparent
\begin{document}
\begin{frame}[plain]
  \begin{figure}
    \centering
    \resizebox{.99\textwidth}{!}{
      \begin{tikzpicture}[
        node distance=3.5cm,
        every edge/.append style={black, font=\small},
        every node/.append style={sloped, anchor=south, auto=false},
        main/.style={white, fill=blue, inner sep=5pt}]
    \uncover{
      \node (schema)  [main, fill=red]              {XML Schema};
    }
    \uncover{
      \node (quelle)  [main, above left of=schema]  {Stadtmuseum};
    }
    \uncover{
      \node (ansicht) [main, below left of=schema]  {Stadtansichten};
    }
    \uncover{
      \node (kattags) [main, above right of=schema] {Kategorisierte Tags};
    }
    \uncover{
      \node (antags)  [main, below right of=schema] {Annotierte Tags};
    }
    \uncover{
      \path[->] (quelle)  edge node {XSLT} (ansicht);
    }
    \uncover{
      \path[->] (quelle)  edge node {XQuery} (kattags);
    }
    \uncover{
      \path[->] (kattags) edge node {Pyhon} (antags);
    }
    \uncover{
      \path[->] (schema)  edge[dashed] node {validate} (kattags)
                (schema)  edge[dashed] node {validate} (antags)
                (schema)  edge[dashed] node {validate} (ansicht)
                (schema)  edge[dashed] node {validate} (quelle);
    }
      \end{tikzpicture}
    }
    \caption{Beispiel f"ur den Einsatz von \LaTeX~Beamer mit \textbf{TikZ}.}
  \end{figure}
\end{frame}
\end{document}

Beispiel Grafik in Kommando speichern

Möchte man die TikZ Grafik auf mehreren unterschiedlichen Folien verwenden, so kann man diese in einem \LaTeX Kommando speichern und mit einem Parameter für den gewünschten Schritt aufrufen. Der Ablauf lässt sich entsprechend mit if-Abfragen steuern, es wird aber auch eine foreach-Schleife zur Verfügung gestellt, welche ich im folgenden Beispiel zur Erzeugung der fünf Beispielfolien verwende.

Da im Gegensatz zum Beispiel mit dem \uncover Befehl oben die einzelnen Knoten per if-Abfrage effektiv in einzelnen Schritten nicht vorhanden sind, war es für das Beispiel nötig einen Dummy Knoten für die restlichen Schritte zu erzeugen. Eine andere Möglichkeit wäre gewesen, anstatt einer relativen Positionierung zum Mittelknoten, einen festen Abstand zum ersten Knoten in der oberen linken Ecke zu verwenden.

Beispiel Code für LaTeX mit den Paketen Beamer und TikZ

\documentclass{beamer}
\usepackage[german]{babel}
\usepackage{tikz}
\setbeamertemplate{navigation symbols}{} % entferne Navigationssymole
\setbeamercovered{transparent} % zeige verdeckte Elemente transparent
\newcommand*{\tikzexample}[1]{
  \begin{tikzpicture}[
    node distance=3.5cm,
    every edge/.append style={black, font=\small},
    every node/.append style={sloped, anchor=south, auto=false},
    main/.style={white, fill=blue, inner sep=5pt}]
    \ifnum #1 < 5
      \node (schema)  [main, fill=white]            {XML Schema};
    \else
      \node (schema)  [main, fill=red]              {XML Schema};
    \fi
    \ifnum #1 > 0
      \node (quelle)  [main, above left of=schema]  {Stadtmuseum};
    \fi
    \ifnum #1 < 2
      \node (ansicht) [main, below left of=schema, fill=white] {Stadtansichten};
    \else
      \node (ansicht) [main, below left of=schema]  {Stadtansichten};
    \fi
    \ifnum #1 > 2
      \node (kattags) [main, above right of=schema] {Kategorisierte Tags};
    \fi
    \ifnum #1 < 4
      \node (antags)  [main, below right of=schema, fill=white] {Annotierte Tags};
    \else
      \node (antags)  [main, below right of=schema] {Annotierte Tags};
    \fi
    \ifnum #1 > 1
      \path[->] (quelle)  edge node {XSLT} (ansicht);
    \fi
    \ifnum #1 > 2
      \path[->] (quelle)  edge node {XQuery} (kattags);
    \fi
    \ifnum #1 > 3
      \path[->] (kattags) edge node {Pyhon} (antags);
    \fi
    \ifnum #1 > 4
      \path[->] (schema)  edge[dashed] node {validate} (kattags)
                (schema)  edge[dashed] node {validate} (antags)
                (schema)  edge[dashed] node {validate} (ansicht)
                (schema)  edge[dashed] node {validate} (quelle);
    \fi
  \end{tikzpicture}
}
\begin{document}
\foreach \nr in {1, ..., 5} {
  \begin{frame}[plain]
    \begin{figure}
      \centering
      \resizebox{.99\textwidth}{!}{
        \tikzexample{\nr}
      }
      \caption{Beispiel f"ur den Einsatz von \LaTeX~Beamer mit \textbf{TikZ} -- \nr .}
    \end{figure}
  \end{frame}
}
\end{document}

Es gibt natürlich noch weiterenwickeltere Methoden um abhängig vom übergebenen Parameter einzelnen Elementen automatisch eine vorher definierte Klasse zuzuweisen, in dem man sich in die Verarbeitungsroutinen von TikZ einhängt. Oder man greift auf den Beamer internen Zähler \beamer@slideinframe für die Nummer der angezeigten Zwischenfolie zu. Hintergrund: blendet man Elemente auf einer Folie/Frame Stück für Stück ein, so werden mehrere Zwischenfolien erstellt, die alle die gleiche Folien/Framenummer haben.

Einzelne Schritte einer TikZ Grafik als Bilder exportieren

Mit der Hilfe von ImageMagick lassen sich PDF Dateien problemlos in verschiedene Grafikformate umwandeln. Hierfür habe ich den Typ der Frames mit dem Parameter \begin{frame}[plain] auf plain gestellt und dann folgenden Befehl verwendet:

convert -resize 400x400 tikz-example.pdf tikz-example.png

Die unterstützen Formate und spezielle Parameter für PDF-Dateien gibt es auf der Webseite von ImageMagick.

Zusammenfassung

Hat man sich an die Syntax von TikZ gewöhnt, lassen sich relativ schnell komplexe Grafiken für Präsentationen und Artikel erstellen, die dann schrittweise aufgebaut, markiert oder an verschiedenen Stellen in unterschiedlichen Aufbaustadien eingebunden werden können. In Kombination mit ImaMagick lassen sich die Grafiken auch automatisch in üblichere Grafikformate umwandeln.