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 fit
tet:
\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●3●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 width
fü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 xsep
s). Was möchtest du denn überhaupt erreichen? Eventuell kann man mitfit
undbackgrounds
etwas 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.