[tikz] node rotieren auf zwei Arten funktioniert nicht

Tabellen und Grafiken erstellen und anordnen


MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

[tikz] node rotieren auf zwei Arten funktioniert nicht

Beitrag 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}
XeLaTeX, TeX Live, vim-latexsuite

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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
Dateianhänge
gl_chainrotatenodes.png
gl_chainrotatenodes.png (6.16 KiB) 963 mal betrachtet
gl_chainrotatecontents.png
gl_chainrotatecontents.png (8.13 KiB) 962 mal betrachtet

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 690
Registriert: Sa 30. Jun 2012, 11:56

Beitrag 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?
XeLaTeX, TeX Live, vim-latexsuite

Antworten