Hallo,

ich würde gerne zwei Elemente (bspw. Rechtecke) durch einen Pfeil miteinander verbinden, der jeweils von beiden Elementen im 90° Winkel abgeht. Im unten angegebenen MB soll der Pfeil vom oberen Rechteck nicht am unteren zentralen Rand starten, sondern eben ein wenig weiter links, sodass der Pfeil von dort aus im rechten Winkel auf den oberen zentralen Rand des zweiten Rechtecks fällt. Die Koordinaten sollen -- wenn möglich -- nicht von Hand berechnet werden.

\documentclass{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern} 
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
% Grid
%   \draw[step=0.5cm,very thin,gray] (0,0) grid(14,10);

\node (rechteck1)[rectangle,draw,anchor=west,inner xsep=3cm,inner ysep=1cm] at (1,8){};
\node (rechteck2)[rectangle,draw,anchor=west,inner xsep=2cm,inner ysep=1cm] at (1,3){};

\draw [->] (rechteck1) to (rechteck2);
\end{tikzpicture}
\end{document}

Danke für die Hilfe.

gefragt 12 Aug '13, 20:50

josephine's gravatar image

josephine
944253035
Akzeptiert-Rate: 0%

bearbeitet 13 Aug '13, 11:59

cgnieder's gravatar image

cgnieder
22.1k253463


Code

\documentclass[tikz,convert=false]{standalone}
\makeatletter
\newif\iftikz@ortho@preflush
\tikz@ortho@preflushtrue
\let\tikz@origtotarget\pgfutil@empty
\tikzset{
  |-/.style={to path={|- (\tikztotarget) \tikztonodes}},
  -|/.style={to path={-| (\tikztotarget) \tikztonodes}},
  *|/.style={to path={%
    \pgfextra
      \iftikz@shapeborder
        \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
        \ifdim\pgf@y>\tikz@lasty\relax
          \edef\tikztostart{\tikztostart.north}%
        \else
          \edef\tikztostart{\tikztostart.south}%
        \fi
      \fi
    \endpgfextra
    (\tikztostart-|\tikztotarget) -- (\tikztotarget) \tikztonodes
  }},
  *-/.style={to path={%
    \pgfextra
      \iftikz@shapeborder
        \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
        \ifdim\pgf@x>\tikz@lastx\relax
          \edef\tikztostart{\tikztostart.east}%
        \else
          \edef\tikztostart{\tikztostart.west}%
        \fi
      \fi
    \endpgfextra
    (\tikztostart|-\tikztotarget) -- (\tikztotarget) \tikztonodes
  }},
  |*/.style={to path={%
    \pgfextra
      \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
      \iftikz@shapeborder
        \let\tikz@origtotarget\tikztotarget
        \ifdim\pgf@y>\tikz@lasty\relax
          \edef\tikztotarget{\tikztotarget.south}%
        \else
          \edef\tikztotarget{\tikztotarget.north}%
        \fi
      \fi
    \endpgfextra
    (\tikztostart) -- (\tikztostart|-\tikztotarget) \tikztonodes \ifx\tikz@origtotarget\pgfutil@empty\else\iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi
  }},
  -*/.style={to path={%
    \pgfextra
      \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
      \iftikz@shapeborder
        \let\tikz@origtotarget\tikztotarget
        \ifdim\pgf@x>\tikz@lastx\relax
          \edef\tikztotarget{\tikztotarget.west}%
        \else
          \edef\tikztotarget{\tikztotarget.east}%
        \fi
      \fi
    \endpgfextra
    (\tikztostart) -- (\tikztostart-|\tikztotarget) \tikztonodes \ifx\tikz@origtotarget\pgfutil@empty\else\iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi
  }},
  node as new start/.is if=tikz@ortho@preflush
  }
\makeatother
\begin{document}
\begin{tikzpicture}
\begin{scope}[nodes={shape=rectangle, draw, minimum width=+1.5cm, minimum height=+1cm}]
  \node (a)                {A};
  \node (b) at (  .5, 2  ) {B};
  \node (c) at ( 2.5,- .2) {C};
  \node (d) at (- .5,-2  ) {D};
  \node (e) at (-2.5,  .2) {E};
\end{scope}
\tikzset{nodes={auto,font=\small\ttfamily}}
\path[->] (a) edge[*|]                 (b)
          (b) edge[*|] node {*|}       (a)
          (a) edge[*-]                 (c)
          (c) edge[*-] node[swap] {*-} (a)
          (a) edge[|*]                 (d)
          (d) edge[|*] node[swap] {|*} (a)
          (a) edge[-*]                 (e)
          (e) edge[-*] node       {-*} (a)
          %
          {[every edge/.append style=blue]
            {[|-]
              (e) edge (b)
                  edge (d)}
            {[-|]
              (b) edge (c)
              (d) edge (c)}}
;
\end{tikzpicture}
\begin{tikzpicture}[nodes={shape=rectangle, draw, minimum width=+1cm, minimum height=+1cm}]
  \node (a)              {A};
  \node (b) at ( .25, 2) {B};
  \node (c) at (1.25,-0) {C};
  \draw (a) to [|*] (b) to (c);

  \begin{scope}[xshift=3cm, node as new start=false]
    \node (a)              {A};
    \node (b) at ( .25, 2) {B};
    \node (c) at (1.25,-0) {C};
    \draw (a) to [|*] (b) to (c);
  \end{scope}
\end{tikzpicture}
\begin{tikzpicture}[nodes={rectangle,draw,anchor=west,minimum height=+1cm}]
\node (rechteck1)[minimum width=+3cm] at (1,5){};
\node (rechteck2)[minimum width=+2cm] at (1,3){};

\draw [->] (rechteck1) to[*|] (rechteck2);
\end{tikzpicture}
\end{document}

Resultat

alt text alt text alt text

Permanenter link

beantwortet 13 Aug '13, 07:48

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k3815
Akzeptiert-Rate: 53%

bearbeitet 15 Aug '13, 01:06

@Qrrbrbirlbel Wow, mehr kann man dazu nicht sagen. Vielen Dank.

(13 Aug '13, 10:11) josephine
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×730
×35
×19

gestellte Frage: 12 Aug '13, 20:50

Frage wurde gesehen: 13,343 Mal

zuletzt geändert: 15 Aug '13, 01:06