1
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning, calc}

\begin{document}
%define length of square
\def\length{5}

%define offset of squares
\def\offset{10mm}

%define square-layout
\newcommand{\TwoQuad}[1]{
\begin{tikzpicture}
\node (rectangle) at (0,0) {
\tikz \draw (0,0) rectangle (\length,\length);
};
\node (line) at (rectangle.center) {\tikz \draw[red] (0,-\length/2) -- (0,\length/2);};
\node (text) at (rectangle.north) {#1};
\end{tikzpicture}
}

\begin{tikzpicture} 
    \node (first) at (0,0) {\TwoQuad{First}};
    \node (second) [right=\offset of first]{\TwoQuad{Second}};
    \node (third) [below=\offset of first] {\TwoQuad{Third}};
    \node (fourth) [right=\offset of third]{\TwoQuad{Fourth}};
\end{tikzpicture}

\end{document}

Result

Hi, I'm having an issue with the relative positioning of tikz nodes together with a macro, where some other nodes are created. The red line and the heading are changing their relative positions when using the below = ... of or similar syntax. I don't know why the result is not everywhere the same. Any ideas how to fix this?

P.s. The result should look everywhere like "First" (Red line and Headline centered). "Second" should be on the same height at the right, "Third" below "First" and "Fourth" below "Second".

Thanks

Nico

2
  • 3
    It is not recommended to nest tikzpictures.
    – user121799
    Commented Feb 7, 2018 at 17:03
  • context of your approach is not known, so it is difficult give you an advice. what is purposes of nested nodes? is not possible achieve your goal without nesting?
    – Zarko
    Commented Feb 7, 2018 at 17:20

1 Answer 1

2

This is a more Tikzy way of doing this. (It is not recommended to nest tikzpictures.)

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning, calc}

\begin{document}
%define length of square
\def\length{5cm}

%define offset of squares
\def\offset{10mm}
\tikzset{BoxNode/.style={draw,minimum width=\length,minimum height=\length,
append after command={% courtesy of Alenanno ref: https://tex.stackexchange.com/questions/287967/drawing-thin-line-around-a-multipart-tikz-shape#comment696552_287972
      \pgfextra{\draw[red] (\tikzlastnode.north) -- (\tikzlastnode.south);}
}}}
\begin{tikzpicture} 
    \node[BoxNode,label=above:First] (first) at (0,0) {};
    \node[BoxNode,label=above:Second] (second) [right=\offset of first]{};
    \node[BoxNode,label=above:Third] (third) [below=\offset of first] {};
    \node[BoxNode,label=above:Fourth] (fourth) [right=\offset of third]{};
\end{tikzpicture}

\end{document}

enter image description here

1
  • This is a clever solution that does what I want. Thank you!
    – Nico
    Commented Feb 8, 2018 at 12:16

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .