Seite 1 von 1

[tikz] node rotieren auf zwei Arten funktioniert nicht

Verfasst: Do 4. Feb 2016, 15:54
von MoonKid
Habe zwei Varianten gefunden, um nodes zu rotieren. Keine funktioniert in meinem Code so wie ich es erwarte.

Zuerst mit rotate=. Die nodes werden rotiert, aber in der Chain treppchenweise versetzt.
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}
    [
        start chain=going below,
        foo/.style = {
            draw,
            align=center,
            on chain,
            rotate=90},
        every node/.append style = foo
    ]
    \node {Eins};
    \node {Zwei};
    \node {Drei};
    \node {Vier};
\end{tikzpicture}
\end{document}
Variante zwei verwendet node contents. Das zeigt gar keine Wirkung bei den nodes.
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}
    [
        start chain=going below,
        foo/.style = {
            draw,
            align=center,
            on chain,
            node contents={\rotatebox{90}{#1}}},
        every node/.append style=foo
    ]
    \node {Eins};
    \node {Zwei};
    \node {Drei};
    \node {Vier};
\end{tikzpicture}
\end{document}

Verfasst: Do 4. Feb 2016, 21:50
von esdd
Ergänze in Deinem ersten Bespiel anchor=south bei dem foo Stil.
\documentclass[tikz]{standalone} 
\usepackage{tikz} 
\usetikzlibrary{chains} 
\begin{document} 
\begin{tikzpicture} 
     [ 
         start chain=going below, 
         foo/.style = { 
             draw, 
             align=center, 
             on chain, 
             rotate=90,
             anchor=south
            }, 
         every node/.append style = foo 
     ] 
     \node {Eins}; 
     \node {Zwei}; 
     \node {Drei}; 
     \node {Vier}; 
\end{tikzpicture} 
\end{document}
Bild

Beim Rotieren eines Nodes rotieren die Anker mit. Die south Anker sind also bei den gedrehten Nodes rechts. Mit going below wird aber offensichtlich immer der north Anker eines neuen Nodes relativ zum south Anker des vorhergehenden eingefügt. Das führt dann zu der „Treppe“. Das explizite anchor=south bestimmt, das von dem neuen Node auch dieser Anker verwendet wird. Allerdings sind die Nodes damit rechtsbündig untereinander und der Abstand zwischen den Nodes hängt von deren Breite (unrotiert betrachtet), ja er der Abstand zwischen den beiden south Ankern ist.

Besser geeignet ist deshalb vermutlich die zweite Variante. Allerdings musst Du da für jeden Node den Nodentext als Argument an den Stil foo übergeben.
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}
    [
        start chain=going below,
        foo/.style = {
            draw,
            align=center,
            on chain,
            node contents={\rotatebox{90}{#1}}},
    ]
    \node [foo=Eins];
    \node [foo=Zwei];
    \node [foo=Drei];
    \node [foo=Vier];
\end{tikzpicture}
\end{document}
Bild

Verfasst: Fr 5. Feb 2016, 02:06
von MoonKid
esdd hat geschrieben:Besser geeignet ist deshalb vermutlich die zweite Variante. Allerdings musst Du da für jeden Node den Nodentext als Argument an den Stil foo übergeben.
    \node [foo=Eins];
Ah, verstehe. Danke sehr!
Allerdings wirkt diese Notation etwas merkwürdig. Eine Möglichkeit das eleganter/eingängier zu schreiben, gibt es nicht?