Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Relativkoordinaten und labels in Tikz zeigen

  1. #1
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    59

    Relativkoordinaten und labels in Tikz zeigen

    Guten Tag,

    ich verwende viele Relativkoordinaten bei TikZ. Es wärehilfreich, wenn alle Abhängigkeiten im kompilierten dokument eingezeichnet sind, beispielsweise durch Rote Pfeile. Das gleiche gilt für die Labelnamen.

    Das würde helfen den Code robuster gegen Änderungen zu machen.
    Natürlich möchte ich nicht jede node verändern, sondern es sollte sollte ein befehl sein wie \showallrelativcoordinatesplease

    Vielen Dank für Tipps!

  2. #2
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    59

    Beispiel als Erklärung

    Hallo,

    vielleicht macht dieses Beispiel das Problem klarer (kompiliertes PDF-Dokument im Anhang):
    Code:
    \RequirePackage{tikz}
    \usetikzlibrary{positioning}
    \documentclass{article}
    \begin{document}
    \begin{tikzpicture}
    	\node[rectangle,draw] (o1) {Objekt 1};
    	\node[rectangle,draw] (o2) [below right = 2cm and 2cm of o1] {Objekt 2};
    	\draw[red,->,very thick] (o1.south east) -- (o2.north west);
    	\node[red, very thick] [above = 0 of o1] {\bf o1	};
    	\node[red, very thick] [above = 0 of o2] {\bf o2	};
    \end{tikzpicture}
    \end{document}
    Alles rote soll automatisch erzeugt werden, ohne es jedesmal (wie hier mit \draw geschehen) explizit schreiben zu müssen. Es wäre auch schon pratkisch, wenn Pfeile oder Labels funktionieren.

  3. #3
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,

    das mit dem Anzeigen der Nodennamen lässt sich noch halbwegs einfach machen. Bei den Pfeilen wirst du aber kaum ohne zusätzliches Schreiben auskommen.
    Eine Möglichkeit wäre
    Code:
    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{positioning}
    
    \newcommand\coordbez[2]{}
    
    \newcommand\showtikznodenames{%
      \tikzset{name/.append style={/tikz/label={[green]\textbf{##1}}}}%
      \renewcommand\coordbez[2]{\draw[->,red,very thick](##1)--(##2);}%
    }
    
    \begin{document}
    \begin{tikzpicture}
      \showtikznodenames
      \node[rectangle,draw] (o1) {Objekt 1};
      \node[rectangle,draw,below right = 2cm and 2cm of o1] (o2) {Objekt 2};\coordbez{o1}{o2}
    \end{tikzpicture}
    \hfill
    \begin{tikzpicture}
      \node[rectangle,draw] (o1) {Objekt 1};
      \node[rectangle,draw,below right = 2cm and 2cm of o1] (o2) {Objekt 2};\coordbez{o1}{o2}
    \end{tikzpicture}
    \end{document}
    
    \end{document}
    Eine andere bei der die Abhängigkeiten unter die Noden geschrieben werden:
    Code:
    \documentclass{article}
    
    \usepackage{tikz}
    \usetikzlibrary{positioning}
    
    \tikzset{depending on/.style={}}
    
    \newcommand\showtikznodenames{%
      \tikzset{
        name/.append style={/tikz/label={[green]\textbf{##1}}},
        depending on/.style={label={[red!40,label position=below]\textbf{(##1)}}}
    }}
    
    \begin{document}
    \begin{tikzpicture}\showtikznodenames
      \node[rectangle,draw,name=o1] {Objekt 1};
      \node[rectangle,draw,depending on=o1,below right = 2cm and 2cm of o1] (o2) {Objekt 2};
      \node[rectangle,draw,depending on=o2,below left = 1cm and 2cm of o2] (o3) {Objekt 3};
      \path(o1)--coordinate [depending on={o1,o2}](o4)(o2);
      \draw[dashed](o3)--(o4);
    \end{tikzpicture}
    \hfill
    \begin{tikzpicture}
      \node[rectangle,draw,name=o1] {Objekt 1};
      \node[rectangle,draw,depending on=o1,below right = 2cm and 2cm of o1] (o2) {Objekt 2};
      \node[rectangle,draw,depending on=o2,below left = 1cm and 2cm of o2] (o3) {Objekt 3};
      \path(o1)--coordinate [depending on={o1,o2}](o4)(o2);
      \draw[dashed](o3)--(o4);
    \end{tikzpicture}
    \end{document}
    Gruß
    Elke

  4. #4
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    59

    Vielen Dank!

    Das Problem mit den Labels ist damit gelöst! Das ist schon mal sehr gut.

    Eine Frage dazu: Ich habe 300 Labels die oft Einen Untenstrich _ enthalten. Das akpzeptiert deine Methode nict.

    Soll ich das ersetzen, oder gibt es eine Möglichkeit das zu umgehen?

    Wäre es weiterhin möglich, die Abhängigkeiten genauso einzubinden wie die Labels? Das würde dann eigentlich auch die Pfeile ersetzen. Alternativ würde ich das mit mit regular expression versuchen einzufügen.

  5. #5
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,

    da die Nodennamen ja nur eine Orientierungshilfe während der Bearbeitung sein sollen und in der fertigen Zeichnung nicht mehr angezeigt werden, wäre eine Möglichkeit die Nodennamen einfach im Mathemodus auszugeben:
    Code:
    \tikzset{name/.append style={/tikz/label={[green]\textbf{$##1$}}}}%
    Die Unterstriche werden dann allerdings nicht mit ausgegeben, sondern führen zu einer Tiefstellung des nächsten Zeichens.

    Eine andere Möglichkeit, die zu funktionieren scheint, habe ich hier gefunden:
    Code:
    \documentclass{article}
    
    \usepackage[T1]{fontenc}
    \usepackage{tikz}
    \usetikzlibrary{positioning}
    
    \tikzset{depending on/.style={}}
    
    \newcommand\showtikznodenames{%
      \tikzset{
        name/.append style={/tikz/label={[green] \textbf{\scantokens{\catcode`_=11 \relax ##1}}}},
        depending on/.style={label={[red!40,label position=below]\textbf{\scantokens{\catcode`_=11 \relax (##1)}}}}
    }}
    
    \begin{document}
    
    \begin{tikzpicture}\showtikznodenames
      \node[rectangle,draw,name=o_1] {Objekt 1};
      \node[rectangle,draw,depending on=o_1,below right = 2cm and 2cm of o_1] (o_2) {Objekt 2};
      \node[rectangle,draw,depending on=o_2,below left = 1cm and 2cm of o_2] (o3) {Objekt 3};
      \path(o_1)--coordinate [depending on={o1,o2}](o4)(o_2);
      \draw[dashed](o3)--(o4);
    \end{tikzpicture}
    \hfill
    \begin{tikzpicture}
      \node[rectangle,draw,name=o1] {Objekt 1};
      \node[rectangle,draw,depending on=o1,below right = 2cm and 2cm of o1] (o_2) {Objekt 2};
      \node[rectangle,draw,depending on=o_2,below left = 1cm and 2cm of o_2] (o3) {Objekt 3};
      \path(o1)--coordinate [depending on={o1,o_2}](o4)(o_2);
      \draw[dashed](o3)--(o4);
    \end{tikzpicture}
    \end{document}
    Die Abhängigkeiten sind wesentlich komplexer als die Namen der Noden. Die Platzierung einer Node kann ja auch von mehr als einer anderen abhängen und das auch noch auf unterschiedlich komplizierte Weise.
    Gruß
    Elke

  6. #6
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    59
    Super, nochmal vielen Dank. Dei zweite Lösung funktioniert, bei der ersten habe ich ein doppeltest Subscript. Das ist ja nicht erlaubt.
    Dass die Abhängigkeiten nicht anzeigbar sind, damit muss ich wohl leben. Oder ich bastel mal eine Lösung, die die Pfeile in eine ausgelagerte Datei schreibt.

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •