8

i want to create a node in TikZ that consists of two parts. So far I have tried the following

\usepackage{tikz}
\usetikzlibrary{shapes}

\tikzstyle{splitbox} = [rectangle split, rectangle split parts=2, minimum width=3cm, minimum height=2cm, text centered, text width=3cm, draw=black, rectangle split part fill={white, lightgray}]

\begin{document}

\begin{tikzpicture}[node distance=4cm]
\node (node) [splitbox] {\nodepart{one} The whole thing
\nodepart{two} A part of it}; 
\end{tikzpicture}
\end{document}

This gives me a result that looks like

Image 1

So far so good. But actually i want it to look more like

Image 2

Does anyone have an Idea, how I can achive that? Have been googeling for hours. The "part" nodepart should always be, where my arrow starts. Thanks a lot for your suggestions!

3

An alternative solution:

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{fit,shapes,positioning}

\begin{document}
    \begin{tikzpicture}[
    node distance=0mm, 
every node/.style = {rectangle, inner sep=0mm, outer sep=0mm,
                     align=center, minimum height=15mm},  
                    ]
\node (t) [text width=5cm] {The whole thing};
\node (b) [text width=3cm,draw,fill=lightgray, 
           below=of t] {A part of it};
\node [draw,fit=(t) (b)]    {};
    \end{tikzpicture}
\end{document}
  • Thank you very much! I have to say, that i like this one even a little better as the other suggestion, as I can connect it with my tikzstyles in the preamble... – scienceponder Mar 9 '16 at 16:28
4

like this :

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes, positioning}

\begin{document}

\begin{tikzpicture}[node distance=4cm]
\node [name=n1, rectangle, minimum width=5cm, minimum height=3cm,
text centered, text width=3cm, draw=black] {};

\node [name=t, rectangle, minimum width=5cm, minimum height=1.5cm,
text centered, text width=3cm, below=(0mm of n1.north)] {The whole thing};

\node [name=n2,rectangle, minimum width=3cm, minimum height=1.5cm,
text centered, text width=3cm, anchor=south, above=(0cm of n1.south),
draw=black,fill=lightgray] {A part of it};
\end{tikzpicture}

\end{document}

enter image description here

  • Thank you very much!!! This works and the output looks exactly how I want it to be. Nevertheless it produces two error messages: Package PGF Math Error: Unknown operator o' or of' (in '(0cm of n1.south)'). draw=black,fill=lightgray] (followed by: {A part of it};) Package PGF Math Error: Unknown operator o' or of' (in '(0mm of n1.north)'). ... text width=3cm, below=(0mm of n1.north)] (followed by: {The whole thing};) – scienceponder Mar 9 '16 at 15:31
  • you need positionings : \usetikzlibrary{shapes, positioning} – flav Mar 9 '16 at 15:47
  • That helped! My mistake ;) Thank you very much! – scienceponder Mar 9 '16 at 15:52
4

Another alternative with a unique node defined as a matrix and matrix of nodes:

\documentclass[border=2mm,tikz]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[%
    part/.style={draw, fill=black!30},
    whole/.style={
        matrix,
        draw,
        matrix of nodes,
        inner xsep=3mm,
        inner ysep=-.5\pgflinewidth,
        nodes={minimum height=12mm},
        row 2/.style={nodes={part}}
    }]

\node[whole] (A) {
The whole thing\\
A part of it\\
};
\end{tikzpicture}
\end{document}

enter image description here

  • you can use it on a \node[whole] if you add matrix to the style – percusse Mar 10 '16 at 9:13
  • 1
    @percusse I tested it before posting my answer and it didn't worked. Now it did. How are you controlling my computer? ;-) – Ignasi Mar 10 '16 at 9:46
  • With a mouse obviously; something emacs, vim geeks would never suspect :P – percusse Mar 10 '16 at 9:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.