TikZ
TikZ (TikZ ist kein Zeichenprogramm) ist ein LaTeX-Paket, mit dem man sehr einfach qualitativ hochwertige Graphiken erstellen kann. Es wurde von Till Tantau, entwickelt, der auch das Paket beamer
entwickelt hat. TikZ funktioniert (im Gegensatz zu ähnlichen Paketen wie pstricks) unabhängig vom Ausgabeformat des LaTeX-Dokuments (DVI/PS/PDF) und eignet sich besonders gut für Präsentationen mit Beamer.
Ressourcen
- TeXample – eine Seite mit nützlichen Beispielen
- PGF and TikZ – Homepage des Projekts. Sehr lesenswert ist das PGF Manual, das im Paket enthalten ist.
PCM-Symbole in TikZ
Die folgenden Zeichnungen benötigen die Datei beamercolorthemekit.sty aus der SDQ-Beamer-Vorlage. Außerdem müssen folgende Pakete importiert werden:
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{fit}
\usetikzlibrary{petri}
\usetikzlibrary{shapes}
Beispiel-SEFF
Beispiele für ganze SEFFs finden sich im internen SVN (ggf. Betreuer fragen, zum Beispiel unter https://svnserver.informatik.kit.edu/i43/svn/paper/2010/Burger_WCOP2010/paper
Makros
Mit einfachen Makros werden die Bilder übersichtlicher:
\newcommand{\tikzComponent}[4]{
\node (#4_text) at (#1,#2) {\small #3};
\node[fill=white,draw=black,rectangle, minimum width=1.2em, minimum height=1.2em]
(#4_componentsymbol) at ([yshift=1.5em,xshift=-1em]#4_text.east) {};
\filldraw[fill=white,draw=black]
([xshift=-1em,yshift=.1em]#4_componentsymbol) rectangle +(.7em,.3em)
([xshift=-1em,yshift=.-.1em]#4_componentsymbol) rectangle +(.7em,-.3em);
\node[draw=black, inner sep = .5em] (#4_component) [fit=(#4_text) (#4_componentsymbol)] {};
\draw (#4_component.west) -- ([xshift=-1em]#4_component.west);
\node[circle, minimum size=1ex, draw] (#4_lolli) at ([xshift=-1em-1ex]#4_component.west) {};
\draw (#4_component.east) -- ([xshift=1em]#4_component.east);
\draw ([xshift=1em+1.4ex,yshift=1.4ex]#4_component.east) arc (90:270:1.4ex);
}
\newcommand{\tikzComponentP}[4]{
\node (#4_text) at (#1,#2) {\small #3};
\node[fill=white,draw=black,rectangle, minimum width=1.2em, minimum height=1.2em]
(#4_componentsymbol) at ([yshift=1.5em,xshift=-1em]#4_text.east) {};
\filldraw[fill=white,draw=black]
([xshift=-1em,yshift=.1em]#4_componentsymbol) rectangle +(.7em,.3em)
([xshift=-1em,yshift=.-.1em]#4_componentsymbol) rectangle +(.7em,-.3em);
\node[draw=black, inner sep = .5em] (#4_component) [fit=(#4_text) (#4_componentsymbol)] {};
\draw (#4_component.west) -- ([xshift=-1em]#4_component.west);
\node[circle, minimum size=1ex, draw] (#4_lolli) at ([xshift=-1em-1ex]#4_component.west) {};
}
\newcommand{\tikzComponentR}[4]{
\node (#4_text) at (#1,#2) {\small #3};
\node[fill=white,draw=black,rectangle, minimum width=1.2em, minimum height=1.2em]
(#4_componentsymbol) at ([yshift=1.5em,xshift=-1em]#4_text.east) {};
\filldraw[fill=white,draw=black]
([xshift=-1em,yshift=.1em]#4_componentsymbol) rectangle +(.7em,.3em)
([xshift=-1em,yshift=.-.1em]#4_componentsymbol) rectangle +(.7em,-.3em);
\node[draw=black, inner sep = .5em] (#4_component) [fit=(#4_text) (#4_componentsymbol)] {};
\draw (#4_component.east) -- ([xshift=1em]#4_component.east);
\draw ([xshift=1em+1.4ex,yshift=1.4ex]#4_component.east) arc (90:270:1.4ex);
}
\newcommand{\tikzDeployment}[2]{
\node (#1_deploytext) at ([yshift=4em]#1_component) {\small #2};
\node[draw=black, inner sep = 3em] (#1_deploy) [fit=(#1_component)] {};
\draw (#1_deploy.north west) -- +(1em,1em);
\draw (#1_deploy.north east) -- +(1em,1em);
\draw (#1_deploy.south east) -- +(1em,1em);
\draw ([xshift=1em,yshift=1em]#1_deploy.north west) -- ([xshift=1em,yshift=1em]#1_deploy.north east) -- ([xshift=1em,yshift=1em]#1_deploy.south east);
}
\newcommand{\tikzConnection}[2]{
\draw [dashed, ->] ([xshift=1em]#1_component.east)--(#2_lolli.west);
}
Nun kann man sehr einfach komplexere Bilder erstellen.
\begin{tikzpicture}
\tiny
\tikzComponentR{0}{0}{client application}{client}
\tikzDeployment{client}{client}
\tikzComponentP{4}{0}{service}{service}
\tikzDeployment{service}{server}
\tikzConnection{client}{service}
\end{tikzpicture}
![]() |
Einfügen als externes Bild
- Quelle: [1]
Definition:
\newif\iffinal % introduce a switch for draft vs. final document
%\finaltrue % use this to compile the final document
% [more preamble that in my case also uses \iffinal for other stuff]
\pgfrealjobname{proposal} % <-- NOTE: this needs to be the real document's basename
% (else you'll only get an empty output file)
\iffinal
\newcommand{\inputTikZ}[1]{%
\input{#1.tikz}%
}
\else
\newcommand{\inputTikZ}[1]{%
\beginpgfgraphicnamed{#1-external}%
\input{#1.tikz}%
\endpgfgraphicnamed%
}
\fi
Bild einfügen das in figs/picture.tikz gespeichert ist:
\begin{figure}[t]
\centering
% like \input{...}, but adds caching via PGF's externalization feature:
\inputTikZ{figs/picture}
\caption{\label{fig:isoosi-model}ISO/OSI stack with the network model and the PCM scope.}
\end{figure}