goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

[Tikz] Block-Diagramm für Anfänger

 

olpo
Forum-Newbie
Forum-Newbie

Beiträge: 6
Anmeldedatum: 01.09.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2017, 19:16     Titel: [Tikz] Block-Diagramm für Anfänger
  Antworten mit Zitat      
Hallo,

das Maus-Geklicke bei MS Visio strapaziert meine Nerven sehr stark, deshalb wollte ich nochmal einen Versuch mit Tikz starten.
Leider bin ich schon etwas im Verzug, weshalb ich nicht groß Dokus studieren kann...

Ich würde gerne das Bild im Anhang als schöne Tikz Grafik bauen.

Ich dachte, ich fange mit der oberen Blöcken an. Ich habe die schon erstellt. Aber wie platziere ich die jetzt in gleichen Abstand nebeneinander?

Code • Öffne in Overleaf
\documentclass{article}
\usepackage[british]{babel}
\usepackage{tikz}


\begin{document}

 \begin{tikzpicture}[
  nodes=draw,
  block/.style={minimum height=6em, minimum width=9em}
]
    \node[block](c1){Client 1};
    \node[block](c2){Client 2};
    \node[block](s1){Server 2};
    \node[block](s2){Server 2};
    \node[block](s2){Database};
  \end{tikzpicture}

\end{document}


Danke.

tikz.pdf
 Beschreibung:

Download
 Dateiname:  tikz.pdf
 Dateigröße:  152.87 KB
 Heruntergeladen:  24 mal
Private Nachricht senden Benutzer-Profile anzeigen

Bartman
Forum-Meister
Forum-Meister


Beiträge: 934
Anmeldedatum: 16.07.09
Wohnort: Hessische Provinz
Version: Windows 7 64 Bit MiKTeX 2.9 32-Bit
     Beitrag Verfasst am: 01.09.2017, 19:33     Titel:
  Antworten mit Zitat      
Eine Möglichkeit wäre z. B. der Einsatz der positioning-Bibliothek.

Dafür gibt es schon am Anfang der Anleitung Beispiele in dem Tutorium über Petri-Netze.

In Deinem Beispiel könnte die Platzierung der beiden Clients so aussehen:

Code • Öffne in Overleaf
\documentclass[tikz, border=5pt]{standalone}
\usepackage[british]{babel}

\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}[
   nodes=draw,
   block/.style={minimum height=6em, minimum width=9em}
]
\node[block](c1){Client 1};
\node[block, right=of c1](c2){Client 2};
% \node[block](s1){Server 2};
% \node[block](s2){Server 2};
% \node[block](s2){Database};
\end{tikzpicture}
\end{document}
Private Nachricht senden Benutzer-Profile anzeigen

olpo
Forum-Newbie
Forum-Newbie

Beiträge: 6
Anmeldedatum: 01.09.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2017, 19:59     Titel:
  Antworten mit Zitat      
Ok, sieht auf dem ersten Blick ganz gut aus.

Aber bekomme ich den großen Block "OS" damit auch hin?
Der soll am besten so breit sein, daß er auf der gleichen X-Achse mit "Client 1" anfängt und auf Höhe der rechten Seite von "Server 2" aufhört.
Geht das?

Code • Öffne in Overleaf
\documentclass{article}
\usepackage[british]{babel}
\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}

 \begin{tikzpicture}[
  nodes=draw,
  block/.style={minimum height=6em, minimum width=9em}
]
    \node[block](c1){Client 1};
    \node[block, right=of c1] (c2) {Client 2};
    \node[block, right=of c2] (s1) {Server 2};
    \node[block, right=of s1] (s2) {Server 2};
%    \node[block](d){Database};
  \end{tikzpicture}

\end{document}
Private Nachricht senden Benutzer-Profile anzeigen

olpo
Forum-Newbie
Forum-Newbie

Beiträge: 6
Anmeldedatum: 01.09.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2017, 16:31     Titel:
  Antworten mit Zitat      
Kann ich denn nicht mit c1.west und s2.east, oder so, auf die Eckkoordinaten zugreifen?
Und dann meinen OS-Block von c1.west bis s2.east zeichnen?
Private Nachricht senden Benutzer-Profile anzeigen

Beinschuss
Forum-Meister
Forum-Meister

Beiträge: 741
Anmeldedatum: 02.10.12
Wohnort: NRW
Version: MiKTeX, Windows 10, TeXstudio
     Beitrag Verfasst am: 02.09.2017, 17:19     Titel:
  Antworten mit Zitat      
Eine Möglichkeit (es gibt bestimmt elegantere):
Code • Öffne in Overleaf
\documentclass{article}
\usepackage[british]{babel}
\usepackage{tikz}
\usetikzlibrary{positioning}

\tikzset{
  block/.style={minimum height=3em, minimum width=9em, draw=black
},
  breit/.style={minimum height=6em, minimum width=40em, draw=black},
  pfeil/.style={->, shorten >=1pt, thick}}

\begin{document}

 \begin{tikzpicture}
    \node[block](c1){Client 1};
    \node[block, right=of c1] (c2) {Client 2};
    \node[block, right=of c2] (s1) {Server 2};
    \node[block, right=of s1] (s2) {Server 2};
    \node[breit, below=of c2, xshift=6em] (os) {OS};
   
    \draw[pfeil] (c1.south) |- (3,-2.3) -|  (s1.south);
    \draw[pfeil] (c2.south) |- (5,-2) -|  ([xshift=1em]s1.south west);
   
   \node[block, below=5cm of s2](d){Database};
  \end{tikzpicture}

\end{document}

Ich habe Dir auch schon mal zwei Pfeile eingezeichnet ...
Private Nachricht senden Benutzer-Profile anzeigen

esdd
Forum-Meister
Forum-Meister

Beiträge: 2187
Anmeldedatum: 07.02.10
Wohnort: Stutensee
Version: MiKTeX 2.9
     Beitrag Verfasst am: 03.09.2017, 00:06     Titel:
  Antworten mit Zitat      
Und hier noch eine Möglichkeit, wie man die nötige Breite berechnen lassen kann:

Code • Öffne in Overleaf
\documentclass{article}
\usepackage[british]{babel}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{calc}

\tikzset{
  block/.style={minimum height=3em, minimum width=9em, draw=black
},
  breit/.style={minimum height=6em,
  minimum width=#1,
  draw=black
},
  pfeil/.style={->, shorten >=1pt, thick}}

\begin{document}

 \begin{tikzpicture}
    \node[block](c1){Client 1};
    \node[block, right=of c1] (c2) {Client 2};
    \node[block, right=of c2] (s1) {Server 2};
    \node[block, right=of s1] (s2) {Server 2};
    \path let \p1=(c1.west), \p2=(s2.east) in
      node[breit={\x2-\x1}, below=of c1.south west, anchor=north west] (os) {}
      (os.south west) node[above right,outer sep=1em] {OS
};
   
    \draw[pfeil] (c1.south) |- (3,-2.3) -|  (s1.south);
    \draw[pfeil] (c2.south) |- (5,-2) -|  ([xshift=1em]s1.south west);
   
   \node[block, below=5cm of s2](d){Database};
  \end{tikzpicture}

\end{document}
Private Nachricht senden Benutzer-Profile anzeigen

Bartman
Forum-Meister
Forum-Meister


Beiträge: 934
Anmeldedatum: 16.07.09
Wohnort: Hessische Provinz
Version: Windows 7 64 Bit MiKTeX 2.9 32-Bit
     Beitrag Verfasst am: 03.09.2017, 15:00     Titel:
  Antworten mit Zitat      
Mein Vorschlag enthält hauptsächlich nur Empfehlungen:

Code • Öffne in Overleaf
\documentclass[tikz, border=10pt]{standalone}
\usetikzlibrary{positioning}
\usetikzlibrary{calc}
\usetikzlibrary{arrows.meta}

\tikzset{
   nodes={font=\sffamily
},
   blockrand/.style={
      draw,
      rounded corners,
      thick
   
},
   block/.style={
      blockrand,
      minimum height=3em,
      minimum width=9em
   
},
   breit/.style={
      blockrand,
      minimum height=6em,
      minimum width=#1
   
},
   pfeil/.style={
      -{Stealth[length=2mm,width=3mm]
},
      shorten >=1pt,
      rounded corners,
      ultra thick
   }
}

\begin{document}
\begin{tikzpicture}
\node[block](c1){Client 1};
\node[block, right=of c1]     (c2) {Client 2};
\node[block, right=of c2]     (s1) {Server 1};
\node[block, right=of s1]     (s2) {Server 2};
\node[block, below=5cm of s2] (d)  {Database};

\path let \p1=(c1.west), \p2=(s2.east) in
   node[breit={\x2-\x1}, below=of c1.south west, anchor=north west] (os) {}
   (os.south west) node[above right,outer sep=1em] {OS
};
   
\draw[pfeil] (c1.south) -- ([yshift=-5em]c1.south) -| (s1.south);
\draw[pfeil] (c2.south) -- ([yshift=-4em]c2.south) -| ([xshift=-2em]s1.south);
\draw[pfeil] ([xshift=2em]s1.south) -- ([shift={(2em,-6em)}]s1.south) -| ([xshift=-1.5em]s2.south);
\draw[pfeil] ([xshift=1.5em]s2.south) -- ([xshift=1.5em]d.north);

\path (os) -- coordinate (halberweg) (d);
\draw[dashed]
   ([xshift=-2.5cm]current bounding box.west|-halberweg) --
   node [pos=.03, above=1em] {SW}
   node [pos=.03, below=1em] {HW}
   (current bounding box.east|-halberweg)
;
\end{tikzpicture}
\end{document}
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de goPCB.de


  Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2017 goLaTeX.de