Innerhalb des Node-Textes befindet du dich wieder im klassischen TeX(t)-Modus.
TikZ sorgt extra dafür, dass Makros wie \path, \draw and \node
- nur innerhalb von TikZ-Pictures die TikZ-Bedeutung haben (man kann also in der Preamble selber ein
\node-Makro definieren, ohne dass TikZ’ \node davon beeinträchtigt ist) und
- innerhalb der Node-Texte wieder ihre Bedeutung haben, die sie vor dem TikZ-Picture hatten, das oben selbst-definierte
\node-Makro kann also im Node-Text wieder in der eigenen Definition verwendet werden.
Du benötigst eine weitere tikzpicture-Umgebung oder das Kurz-Makro \tikz, dein Beispiel mit nodes=draw versehen
\documentclass[tikz,convert=false]{standalone}
\begin{document}
\begin{tikzpicture}[nodes=draw]
\node (Aussen) {
\tikz\node{Innen};
};
\end{tikzpicture}
\end{document}
ergibt dann

Das funktioniert gerade noch zufriedenstellend. Probleme entstehen, wenn man Optionen verwendet. Diese werden nämlich an das innere TikZ-Picture sowie die Nodes vererbt. Verwendet man zum Beispiel minimum width=2cm an der äußeren Node verwendet die innere das auch und letztlich wird die äußere doch größer (inner xsep kommt ja auch noch dazu):
\documentclass[tikz,convert=false]{standalone}
\begin{document}
\begin{tikzpicture}[nodes=draw]
\draw[help lines] (0,0) grid (3,1);
\node[minimum width=2cm, anchor=south west] (Aussen) {
\tikz\node{Innen};
};
\end{tikzpicture}
\end{document}

Mit der fit-Library und dem fit-Key kann man dem entgegenwirken, in dem man erst die innere Node zeichnet und dann die äußere drumherum fittet:
\documentclass[tikz,convert=false]{standalone}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}[nodes=draw]
\draw[help lines] (0,0) grid (3,1);
\node (innen) at (1,.5) {Innen};
\node[fit=(innen), minimum width=2cm] {};
\end{tikzpicture}
\end{document}

Selbstverständlich zeichnet das auch die äußere Node später, so dass ihre Füllung die innere überdeckt, mit der backgrounds-Library und der on background layer kann man das ändern:
\documentclass[tikz,convert=false]{standalone}
\usetikzlibrary{fit,backgrounds}
\begin{document}
\begin{tikzpicture}[nodes=draw]
\node[fill=white] (innen) at (1,.5) {Innen};
\begin{scope}[on background layer]
\node[fill=yellow, fit=(innen), minimum width=2cm] {};
\end{scope}
\end{tikzpicture}
\end{document}

Eine Alternative zu fit und backgrounds ist die Speicherung der inneren Node in einer Box mittels \sbox. Zur Verwendung innerhalb des TikZ-Pictures (dessen Optionen es erben soll) benutzt man am besten \tikzBox wie unten definiert.
\documentclass[tikz,convert=false]{standalone}
\newbox\mybox
\newcommand{\tikzBox}[2][\mybox]{%
\sbox#1{\pgfinterruptpicture#2\endpgfinterruptpicture}}
\begin{document}
\begin{tikzpicture}[nodes=draw]
\tikzBox{\tikz\node[fill=white] (innen) at (1,.5) {Innen};}
\node[fill=yellow, minimum width=2cm] {\usebox\mybox};
\end{tikzpicture}
\end{document}

beantwortet
05 Aug '13, 19:41
Qrrbrbirlbel
2.9k●4●8●15
Akzeptiert-Rate:
53%
(
\tikz\node{Innen};) Man verhindert aber im besten Fall das Verschachteln von Nodes, da alle Optionen vererbt werden. Gibst du zum Beispiel eineminimum widthfür die äußere Node an, verwendet die innere diese auch und so hat die äußere nicht mal dieminimum width, wenn die innere ganz klein ist (es gibt ja noch dieinner xseps). Was möchtest du denn überhaupt erreichen? Eventuell kann man mitfitundbackgroundsetwas robuster (wenn auch unkomfortabler) arbeiten. Im Worst-Case speichert man das innere TikZ-Picture in einer box und verwendet die dann in der äußeren.