Die `scale`-Option führt laut Dokumentation nur zu einer Koordinatentransformation, d.h. sie wirkt nur, wenn Koordinaten betroffen sind. Die Linienstärke, die Größe der Pfeilspitzen oder Optionen wie `shorten >` sowie die Noden werden davon nicht beeinflusst. Bei manchen Dingen muss man auch austesten, ob die Skalierung wirkt oder nicht. Zum Beispiel wird die `node distance` nicht automatisch mit angepasst. Dadurch sieht man im Ausgangsbeispiel keinerlei Wirkung der `scale`-Option. Deshalb ist hier noch ein Beispiel bei dem man die Wirkung der `scale`-Option auf Koordinaten sehen kann:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{
state/.style={circle, draw, minimum size=6ex},
arrow/.style={-latex, shorten >=3pt, shorten <=3pt}}
\newcommand\grafik{%
\node [state] (S1) {$S_1$};
\node [state, right=of S1] (S2) {$S_2$};
\draw [arrow, bend left=60] (S1) to (S2);
\draw [arrow, bend right=60] (S1) to (S2);
\draw[fill=red] (S1.east) -- ++(2.5em-1mm,0) +(1mm,0) circle [radius=1mm];}
\begin{document}
\begin{tikzpicture}[node distance=5em]
\grafik % unskaliert
\begin{scope}[xshift=4cm, scale=2]
\grafik
\end{scope}
\begin{scope}[xshift=8cm, scale=0.5]
\grafik
\end{scope}
\end{tikzpicture}
\end{document}
Abhängig davon, was in der Grafik alles skaliert werden soll, gibt es unterschiedliche Lösungsmöglichkeiten:
**Abstände:**
Anpassungsmöglichkeiten:
**Abstände, die über node distance eingestellt werden:**
Sollen lediglich die die Noden unverändert bleiben, aber die über `node distance` eingestellten Abstände zwischen den Noden trotzdem skaliert werden, dann müssen muss diese anders plaziert Option von Hand angepasst werden. Zum Beispiel über die explizite Angabe der Koordinaten oder `shift`-Optionen:
\documentclass{scrartcl}
\usepackage{tikz}
\tikzset{
state/.style={circle, draw, minimum size=6ex},
arrow/.style={-latex, shorten >=5pt, shorten <=5pt}}
\begin{document}
\begin{tikzpicture}[scale=2]
\node [state] (S1) {$S_1$};
\node [state, anchor=west] (S2) at ([xshift=5em] S1.east) {$S_2$};
\draw [arrow, bend left=60] (S1) to (S2);
\draw [arrow, bend right=60] (S1) to (S2);
Werden Teile einer TikZ-Abbildung unterschiedlich skaliert, dann kann man sich für die Zeichnung einen eigenen Skalierungsstil definieren, damit `node distance` jeweils mitskaliert wird:
\begin{tikzpicture}[
myscale/.style={scale=#1, node distance=#1*5em},myscale=1]
\grafik % unskaliert
\begin{scope}[xshift=4cm, myscale=2]
\grafik
\end{scope}
\begin{scope}[xshift=10cm, myscale=0.5]
\grafik
\end{scope}
\end{tikzpicture}
\end{document}
Auf dem gleichen Weg lassen sich natürlich auch die Linienbreite etc. beeinflussen.
**Noden:**
@Stefan hat schon erklärt, wie durch die zusätzliche Angabe der `scale`-Option für einzelne oder alle Noden, diese und deren Inhalt ebenfalls skaliert werden können.
**Noden und Abstände:**
Gibt man bei den betreffenden Noden oder einer `scope` oder für das gesamte tikzpicture `tikzpicture` die Option `transform shape` an, wird neben den Noden auch automatisch die `node distance` angepasst.
\documentclass[parskip=full-]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{
state/.style={circle, draw, minimum size=6ex},
arrow/.style={-latex, shorten >=5pt, shorten <=5pt}}
\begin{document}
\begin{tikzpicture}[node distance=5em,scale=2,every node/.style={scale=2}]
\node [state] (S1) {$S_1$};
\node [state, right=of S1,] (S2) {$S_2$};
\draw [arrow, bend left=60] (S1) to (S2);
\draw [arrow, bend right=60] (S1) to (S2);
distance=5em]
\grafik % unskaliert
\begin{scope}[xshift=5cm, scale=2, every node/.style={scale=2}] % Noden mitskalieren
\grafik
\end{scope}
\begin{scope}[xshift=12cm, scale=2, transform shape] % Noden und Abstände mitskalieren
\grafik
\end{scope}
\end{tikzpicture}
\par
\begin{tikzpicture}[node distance=5em,scale=2,transform shape]
\node [state] (S1) {$S_1$};
\node [state, right=of S1,] (S2) {$S_2$};
\draw [arrow, bend left=60] (S1) to (S2);
\draw [arrow, bend right=60] (S1) to (S2);
\end{tikzpicture}
\end{document}
**Komplette Grafik:**
Soll die gesamte Zeichnung einschließlich der Schrift, der Linienstärke und der Größe der Pfeilspitzen sowie der `shorten` Optionen skaliert werden, dann kann man `\scalebox` verwenden. Das dafür benötigte `graphicx`-Paket wird von tikz bereits mitgeladen.
% skalieren auf die doppelte Größe
\scalebox{2}{%
\begin{tikzpicture}[node distance=5em]
\node [state] (S1) {$S_1$};
\node [state, right=of S1] (S2) {$S_2$};
\draw [arrow, bend left=60] (S1) to (S2);
\draw [arrow, bend right=60] (S1) to (S2);
\grafik
\end{tikzpicture}%
}
Alternativ kann mit `\resizebox` aus dem gleichen Paket die gesamte Grafik auf eine vorgegebene Breite skaliert werden.
% Breite auf \linewidth 15cm skalieren, Höhe wird durch Angabe von ! proportional angepasst
\resizebox{\linewidth}{!}{%
\resizebox{15cm}{!}{%
\begin{tikzpicture}[node distance=5em]
\node [state] (S1) {$S_1$};
\node [state, right=of S1] (S2) {$S_2$};
\draw [arrow, bend left=60] (S1) to (S2);
\draw [arrow, bend right=60] (S1) to (S2);
\grafik
\end{tikzpicture}%
}
Mit beiden Befehlen können neben Zeichnungen auch Tabellen, Texte oder anderes Material skaliert werden. Weitere Informationen zu `\scalebox`, `\resizebox` sowie `\resizebox*` sind in der Anleitung der [`graphics`-Sammlung][1] zu finden.
[1]: http://www.ctan.org/pkg/graphicx