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, 14:50

josephine's gravatar image

josephine
94432434
Akzeptiert: 76%

bearbeitet 13 Aug '13, 05:59

Clemens's gravatar image

Clemens
19.0k112960


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, 01:48

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k1415

bearbeitet 14 Aug '13, 19:06

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

(13 Aug '13, 04:11) josephine
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×492
×27
×17

Frage gestellt: 12 Aug '13, 14:50

Frage wurde angeschaut: 3,700 Mal

Zuletzt aktualisiert: 14 Aug '13, 19:06