Seite 1 von 1
TikZ - einen Pfeil parallel zu einer Linie zeichen
Verfasst: Mi 4. Mai 2011, 10:43
von Igeloeffnung
Hallo,
ich suche schon einige Zeit nach einer Möglichkeit, einen Pfeil parallel zu einer Linie zu Zeichen. Etwas genauer:
Ich möchte einen Graphen zeichnen, also Nodes und die untereinander mit, z.B. \draw (a) -- (b); verbinden.
Jetzt möchte ich an einigen Verbindungen zwischen den Nodes, einen Pfeil zeichnen, parallel zur Verbindung.
Ich habe schon einiges versucht, aber nichts hat geklappt.
Kann mir da vielleicht jemand helfen ?
Gruß Igel
Verfasst: Mi 4. Mai 2011, 17:02
von esdd
Hallo,
bitte erstelle möglichst immer ein Minimalbeispiel. Vielleicht passt der Vorschlag:
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[draw](a) at (0,0){Node a};
\node[draw](b) at (0,-2){Node b};
\path (a)edge(b);
\draw[-latex] ([xshift=1mm]a.south)--([xshift=1mm]b.north);
\end{tikzpicture}
\end{document}
Gruß
Elke
Verfasst: Mi 4. Mai 2011, 17:32
von Igeloeffnung
Hallo,
danke für den Tip. Das ist auch schon sehr nah an dem was ich haben möchte. Wenn die Nodes jetzt aber nicht direkt übereinander oder nebeneinander liegen, müsste ich den xshift ja auch wieder per Hand anpassen.
Beispielsweise habe ich hier node (b) etwas verschoben und da klappt sieht es nicht mehr gut aus.
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[draw](a) at (0,0){Node a};
\node[draw](b) at (3,-2){Node b};
\path (a)edge(b);
\draw[-latex] ([xshift=1mm]a.south)--([xshift=1mm]b.north);
\end{tikzpicture}
\end{document}
Verfasst: Mi 4. Mai 2011, 18:09
von esdd
Hallo,
anderer Vorschlag für rechteckige Noden:
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node[draw](a) at (0,0){Node a};
\node[draw](b) at (3,-2){Node b};
\path (a)edge(b);
\path[transform canvas={xshift=2mm},-latex] (a)edge(b);
\end{tikzpicture}
\end{document}
Gruß
Elke
Verfasst: Mi 4. Mai 2011, 18:20
von Igeloeffnung
Hi,
das sieht ja schon ganz gut aus, aber ich hätte dann doch ganz gerne runde nodes. Um ganz genau zu werden, habe ich mal ein Bild angehängt, von dem graph den ich tikz'en möchte.
Gruß Igel
Verfasst: Mi 4. Mai 2011, 20:45
von esdd
Hallo,
bitte mach das nächste Mal wirklich ein Minimalbeispiel, dann hätte man sofort gewußt, dass die Noden nicht unter- bzw. nebeneinander liegen und Kreise sind.
Hier ist nun noch ein Vorschlag, bei dem du die Länge der Pfeile von Hand anpassen musst:
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{calc}
\colorlet{NGray}{black!20}
\newcommand\Parallele[6][]{%
\coordinate(Mitte)at($(#2)!0.5!(#4)$);%
\draw[#1]($($(Mitte)!#3!(#2)$)!#6!270:(#2)$)--($($(Mitte)!#5!(#4)$)!#6!90:(#4)$);%
}
% Syntax:\Parallele[<Optionen wie Pfeilspitze etc.>]%
% {<Punkt1>}{<Abstand Parallenmitte bis -ende Richtung Punkt1}%
% {<Punkt2>}{<Abstand Parallenmitte bis -ende Richtung Punkt2}%
% {<Abstand der Parallele>}
% werden Punkt1 und Punkt2 vertauscht, dann liegt die Parallele auf der anderen Seite
\begin{document}
\begin{tikzpicture}[every node/.style={draw,circle}]
\node(A) at (0,0){A};
\node[fill=NGray](B) at (2.5,-0.5){B};
\node[fill=NGray](D) at (2,-2){D};
\path(A)edge(B)%
edge(D);
\Parallele[latex-]{A}{0.8cm}{B}{0.8cm}{2mm}
\Parallele[-latex]{D}{0.9cm}{A}{0.9cm}{2mm}
\end{tikzpicture}
\end{document}
Gruß
Elke
PS: Damit die Parallele auf der anderen Seite liegt, kann man auch einfach ein Minus vor den Abstand setzen (statt die Punkte zu vertauschen).
\Parallele[-latex]{D}{0.9cm}{A}{0.9cm}{2mm} liefert das gleiche wie \Parallele[latex-]{A}{0.9cm}{D}{0.9cm}{-2mm}
Verfasst: Mi 4. Mai 2011, 21:11
von Igeloeffnung
Hi,
vielen dank, das sieht perfekt aus. und ich verspreche, dass ich das nächste mal ein Minimalbeispiel angebe.
Gruß igel