Hallo alle zusammen,

ich habe unten angehängten Code. Ich habe die Matrix OU und S. Beide möchte ich verbinden. Standardmäßig ist das ja jeweils OU.west und S.east. Allerdings würde ich beide gerne wesentlich tiefer verbinden, so dass noch genug Platz für eine weitere, beschriftete Transition besteht. Ich habe es bereits mit (S.337) und (OU.200) versucht, allerdings ist die Linie etwas schief und ich schaffe es nicht, eine gerade Linie zu zeichnen. Gibt es z.B. eine Linie im rechten Winkel zu einem der Matrizen zu zeichnen, so dass ich nur auf einer der beiden Seiten einen Wert angeben muss? Vielen Dank schonmal :-)

Open in writeLaTeX
    \documentclass[margin=5mm]{standalone}
    \usepackage[utf8]{inputenc}
    \usepackage{tikz}
    \usetikzlibrary{matrix,positioning}
    \tikzset{
  tab/.style={inner sep=0pt,
    nodes={inner sep=.333em,
      % notwendig für leere Zellen und Unterlängen:
      minimum height={\baselineskip+0.666em}
    }
  },
  vtab/.style={matrix of nodes,tab,
    row sep=-\pgflinewidth,column sep=-\pgflinewidth,
    nodes in empty cells,% leere Zellen werden ebenfalls gezeichnet
    row 1/.style={nodes={align=center}},
    nodes={draw,align=left,text width=#1}
  },
  vtab/.default=3cm,% voreingestellte Breite
  htab/.style={matrix of nodes,draw,tab,anchor=north west},
  every edge/.append style={font=\footnotesize\strut,inner ysep=.1em},
  pfeil/.style={out=270,in=90,->}
}

    \begin{document}
    \resizebox{\textwidth}{!}{%
    \begin{itshape}
    \begin{tikzpicture}[thick,
      % vertikaler und horizontaler Abstand zwischen den Tabellen:
      node distance=1cm and 3.5cm, % row 1/.style={},
    ]
    %Tabelle
    \matrix(S)[vtab]{Stelle\\{Nummer<<pk>>}\\\\};
    \matrix(OU)[right= of S,vtab=3.5cm]{Organisationseinheit\\{Nummer<<pk>>\newline Name\newline Art}\\\\};
    \path(S)edge
          node[pos=0,above right]{zugeordnet}node[pos=0,below right]{N}
          node[pos=1,above left]{beinhaltet}node[pos=1,below left]{1}
          (OU);
    \end{tikzpicture}
    \end{itshape}
    }
    \end{document}

gefragt 27 Mär '14, 21:54

tt33tt's gravatar image

tt33tt
256131925
Akzeptiert-Rate: 100%

bearbeitet 25 Apr '14, 20:49

esdd's gravatar image

esdd
17.7k254256


Das kann wie hier gemacht werden: Wie forciere ich waagerechte oder senkrechte Linien in TikZ? Die Linie geht dann von S.337 zum Schnitt von horizontaler Linie von S.337 und vertikaler Linie an OU.west Syntax für den Schnitt ist (S.337-|OU.west).

So angewendet auf diesen Fall:

Open in writeLaTeX
\path (S.337) edge
  node[pos=0,above right]{zugeordnet}node[pos=0,below right]{N}
  node[pos=1,above left]{beinhaltet}node[pos=1,below left]{1}
  (S.337-|OU.west);

Waagerechte Verbindung

Permanenter link

beantwortet 27 Mär '14, 22:20

stefan's gravatar image

stefan ♦♦
18.1k143048
Akzeptiert-Rate: 48%

Genial und danke!

(27 Mär '14, 22:36) tt33tt

Wie man eine horizontale Linie erhält, hat @Stefan ja schon erklärt. Deshalb sind hier nur zur Ergänzung noch zwei Alternativen für die Verschiebung selbst:

Zum einen kann man mittels yshift die Linie auch direkt um einen bestimmten Betrag verschieben. Die Verschiebung wird dabei in eckigen Klammern unmittelbar vor dem Nodennamen angegeben, also zum Beispiel ([yshift=-.5cm]S.east):

Open in writeLaTeX
\path ([yshift=-.5cm]S.east) edge
  node[pos=0,above right]{zugeordnet}node[pos=0,below right]{N}
  node[pos=1,above left]{beinhaltet}node[pos=1,below left]{1}
  ([yshift=-.5cm]S-|OU.west);

Zum anderen kann man auch eine der Tabellenzellen zur Ausrichtung verwenden, da diese ebenfalls Noden mit den üblichen Ankern sind. Zum Beispiel hat die 1.Spalte in der 3.Zeile der Matrix (S) automatisch den Namen (S-3-1):

Open in writeLaTeX
 \path (S-3-1) edge
    node[pos=0,above right]{zugeordnet}node[pos=0,below right]{N}
    node[pos=1,above left]{beinhaltet}node[pos=1,below left]{1}
    (S-3-1-|OU.west);
Permanenter link

beantwortet 27 Mär '14, 22:48

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

bearbeitet 27 Mär '14, 22:50

Genial, das mit den Tabellenzellen wusste ich noch nicht.
Ah, das mit yshift habe ich nun auch verstanden und ist auch richtig praktisch! Werde ich wohl beim Nächsten Mal auch nutzen :-)

(27 Mär '14, 23:18) tt33tt
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:

×728
×76
×58
×2

gestellte Frage: 27 Mär '14, 21:54

Frage wurde gesehen: 13,516 Mal

zuletzt geändert: 25 Apr '14, 20:49