PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Relativkoordinaten und labels in Tikz zeigen



BTFYA
10-10-2012, 19:23
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!

BTFYA
11-10-2012, 11:01
Hallo,

vielleicht macht dieses Beispiel das Problem klarer (kompiliertes PDF-Dokument im Anhang):


\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.

esdd
12-10-2012, 02:46
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

\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:

\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

BTFYA
12-10-2012, 10:56
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.

esdd
12-10-2012, 15:48
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:

\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 (http://tex.stackexchange.com/questions/33465/changing-the-catcode-of-in-one-command) gefunden:

\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

BTFYA
12-10-2012, 16:23
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.