So fügen Sie in Tikz Zeilen zwischen Text ein

So fügen Sie in Tikz Zeilen zwischen Text ein

Ich bin neu bei Tikz. Ich habe heute erst angefangen, damit zu arbeiten, und bin auf einige Schwierigkeiten gestoßen, für die ich keine Lösung finden kann. Ich erstelle ein Blockdiagramm basierend auf dem Beispiel vonBeispiel: Leitsystemprinzipien. Ich habe versucht, es meinen Bedürfnissen entsprechend zu ändern, indem ich beispielsweise Text über den Blöcken hinzufüge \node [above of=controller, node distance=1.2cm] (MP:1) {$MP_1$};. Ich weiß nicht, ob das die richtige Vorgehensweise ist. Mein Idealszenario ist, diesen Text mit Pfeilen links und rechts mit den Pinstyles tinund zu verbinden tout/tin. Da tinund tout/tinich ihnen keinen Namen geben kann, kann ich den Befehl nicht verwenden, \draw [draw,->] (tin) -- node [name=line] {} (MP:1);er funktioniert nicht. Ich habe es durch Einfügen versucht, \draw [->, right of=MP:1, node distance=1.5cm] {};aber die Ausgabe ist wieder nicht korrekt. Ich habe das Tikz-Handbuch durchgesehen und irgendwie eine Lösung für mein Problem gefunden, indem ich Koordinaten wie verwendet habe \draw [<-] (20mm,10mm) -- (0mm,10mm);. Das Ergebnis ist wieder nicht korrekt.

Meine erste Frage ist also, ob der von mir eingefügte Text richtig ist, um dem Text einen Namen als Referenz zu geben, oder gibt es einen besseren Weg? Meine zweite Frage ist, ob es möglich ist, Referenznamen für die Pinstile zu erstellen, wenn ich den Text richtig einfüge. Wenn nicht, wie kann ich die Linien zeichnen? Unten finden Sie zu Testzwecken ein Beispiel meines Codes sowie ein Bild der Ausgabe.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}

\begin{document}

\tikzstyle{block} = [draw, rectangle, minimum height=2em, minimum width=5em] %fill=blue!20
\tikzstyle{sum} = [draw, circle, node distance=2.0cm, minimum size=6mm]
\tikzstyle{input} = [coordinate] 
\tikzstyle{output} = [coordinate]
\tikzstyle{pinstyle} = [pin edge={to-,thin,black}]

\begin{figure}[!ht]
\begin{center}
\makebox[\textwidth][c]{
\begin{tikzpicture}[auto, node distance=1.5cm,>=latex']
\node [input, name=input] {};
\node [sum, right of=input, pin={[pinstyle]above:$t_{in}$}, node distance=1.5cm] (sum) {MP};
\draw [draw,->] (input) -- node [name=begging] {UE} (sum);
\node [block, right of=sum, node distance=2.0cm] (controller) {Node B};
% Text above of GGSN (MP1)
\node [above of=controller, node distance=1.2cm] (MP:1) {$MP_1$};
\draw [<-] (20mm,10mm) -- (0mm,10mm);
%\draw [->, right of=MP:1, node distance=1.5cm] {};
\draw [->] (sum) -- node {} (controller);
\node [sum, right of=controller, pin={[pinstyle]above:$t_{out}/t_{in}$}, node distance=2.0cm] (sum_2) {MP};
\draw [->] (controller) -- node [name=u] {} (sum_2);
\node [block, right of=sum_2, node distance=2.0cm] (controller_2) {RNC};
% Text above of GGSN (MP2)
\node [above of=controller_2, node distance=1.2cm] (MP:2) {$MP_2$};
\draw [->] (sum_2) -- node [name=u2] {} (controller_2);
\node [sum, right of=controller_2, pin={[pinstyle]above:$t_{out}/t_{in}$}, node distance=2.0cm] (sum_3) {MP};
\draw [->] (controller_2) -- node [name=u3] {} (sum_3);
\node [block, right of=sum_3, node distance=2.0cm] (controller_3) {SGSN};
% Text above of GGSN (MP3)
\node [above of=controller_3, node distance=1.2cm] (MP:3) {$MP_3$};
\draw [->] (sum_3) -- node [name=u4] {} (controller_3);
\node [sum, right of=controller_3, pin={[pinstyle]above:$t_{out}/t_{in}$}, node distance=2.0cm] (sum_4) {MP};
\draw [->] (controller_3) -- node [name=u5] {} (sum_4);
\node [block, right of=sum_4, node distance=2.0cm] (controller_4) {GGSN};
% Text above of GGSN (MP4)
\node [above of=controller_4, node distance=1.2cm] (MP:4) {$MP_4$};
\draw [->] (sum_4) -- node [name=u6] {} (controller_4);
\node [sum, right of=controller_4, pin={[pinstyle]above:$t_{out}$}, node distance=2.0cm] (sum_5) {MP};
\draw [->] (controller_4) -- node [name=u8] {} (sum_5);
\node [output, right of=sum_5] (output) {};
\draw [->] (sum_5) -- node [name=end] {PDN}(output);
\node [block, above of=sum_3, node distance=2.5cm] (pipeline) {Pipeline};
\draw [->] (begging) |- (pipeline);
\draw [->] (pipeline) -| (end);
\end{tikzpicture} } % End of makebox
\caption{Test}
\label{fig:blockdiagram}
\end{center}
\end{figure}

\end{document}

Blockdiagramm-Ausgabe

Antwort1

Verbesserte Version:

  1. Ich habe die alte \tikzsetstylein eine passendere \tikzsetSyntax geändert.

  2. Ich würde Ihnen empfehlen, es nicht :im Namen eines Knotens zu verwenden, da der :Operator eine besondere Bedeutung hat, wenn er auf den Namen eines Knotens angewendet wird.

  3. Ich habe die positioningBibliothek geladen und die veraltete of=Syntax in die =ofSyntax geändert (beachten Sie die Einsparungen im resultierenden Code).

  4. Anstelle von Pins habe ich einen mytextStil für Knoten verwendet; das liefert bessere Ergebnisse.

  5. Raum für Verbesserungen: Vielleicht vereinfacht die Verwendung von Ketten hier den Code. Dies bleibt als Übung.

Der Code:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning}

\begin{document}

\tikzset{
block/.style={
  draw, 
  rectangle, 
  minimum height=2em, 
  minimum width=5em
  },
sum/.style={
  draw, 
  circle, 
  minimum size=6mm
  },
input/.style={coordinate}, 
output/.style={coordinate},
mytext/.style={
  draw,
  text depth=4pt,
  text height=10pt
  }
}
\begin{figure}[!ht]
\begin{center}
\makebox[\textwidth][c]{%
\begin{tikzpicture}[auto,node distance=1cm and 0.8cm,>=latex']
\node[
  input,
  name=input] {};
\node[
  sum, 
  right = of input
  ] 
  (sum) {MP};
\node[
  mytext,
  above=of sum.center,
  name=tin1
  ] 
  {$t_{in}$};  
\draw[->] 
  (input) -- node [name=begging] {UE} (sum);
\node[
  block, 
  right = of sum
  ] 
  (controller) {Node B};
% Text above of GGSN (MP1)
\node[
  mytext,
  above = of controller.center
  ] 
  (MP1) {$MP_1$};
%\draw [->, right = of MP:1, node distance=1.5cm] {};
\draw[->] 
  (sum) -- node {} (controller);
\node[
  sum,
  right = of controller
  ] 
  (sum_2) {MP};
\node[
  mytext,
  above=of sum_2.center,
  name=toti1
  ] 
  {$t_{out}/t_{in}$};  
\draw[->] 
  (controller) -- node [name=u] {} (sum_2);
\node[
  block, 
  right = of sum_2
  ] 
  (controller_2) {RNC};
% Text above of GGSN (MP2)
\node[
  mytext,
  above = of controller_2.center
  ] 
  (MP2) {$MP_2$};
\draw[->] 
  (sum_2) -- node [name=u2] {} (controller_2);
\node[
  sum, 
  right = of controller_2, 
  ] 
  (sum_3) {MP};
\node[
  mytext,
  above=of sum_3.center,
  name=toti2
  ] 
  {$t_{out}/t_{in}$};
\draw[->] 
  (controller_2) -- node [name=u3] {} (sum_3);
\node[
  block,
  right = of sum_3
  ] 
  (controller_3) {SGSN};
% Text above of GGSN (MP3)
\node[
  mytext,
  above = of controller_3.center
  ] 
  (MP3) {$MP_3$};
\draw[->] 
  (sum_3) -- node [name=u4] {} (controller_3);
\node[
  sum, 
  right = of controller_3, 
  ] 
  (sum_4) {MP};
\node[
  mytext,
  above=of sum_4.center,
  name=  toti3
  ] {$t_{out}/t_{in}$};
\draw[->] 
  (controller_3) -- node [name=u5] {} (sum_4);
\node[
  block, 
  right = of sum_4
  ] 
  (controller_4) {GGSN};
% Text above of GGSN (MP4)
\node[
  mytext,
  above = of controller_4.center
  ] 
  (MP4) {$MP_4$};
\draw[->] 
  (sum_4) -- node [name=u6] {} (controller_4);
\node[
  sum, 
  right = of controller_4
  ] 
  (sum_5) {MP};
\node[
  mytext,
  above=of sum_5.center,
  name=tout1
  ]
  {$t_{out}$}; 
\draw[->] 
  (controller_4) -- node [name=u8] {} (sum_5);
\node[
  output, 
  right = of sum_5
  ] 
  (output) {};
\draw[->] 
  (sum_5) -- node [name=end] {PDN}(output);
\node[
  block,
  above = 2cm of sum_3
  ] 
  (pipeline) {Pipeline};
\draw[->] 
  (begging) |- (pipeline);
\draw[->] 
  (pipeline) -| (end);
  
\draw[->]
  (tin1) -- (sum);
\draw[->]
  (toti1) -- (sum_2);
\draw[->]
  (toti2) -- (sum_3);
\draw[->]
  (toti3) -- (sum_4);
\draw[->]
  (tout1) -- (sum_5);

\draw[<->] 
  (tin1) -- (MP1);
\draw[<->] 
  (MP1.east) -- (toti1.west|-MP1.east);
\draw[<->] 
  (toti1.east) -- (MP2.west|-toti1.east);
\draw[<->] 
  (MP2.east) -- (toti2.west|-MP2.east);
\draw[<->] 
  (toti2.east) -- (MP3.west|-toti2.east);
\draw[<->] 
  (MP3.east) -- (toti3.west|-MP3.east);
\draw[<->] 
  (toti3.east) -- (MP4.west|-toti3.east);
\draw[<->] 
  (MP4.east) -- (tout1.west|-MP4.east);
\end{tikzpicture}} % End of makebox
\caption{Test}
\label{fig:blockdiagram}
\end{center}
\end{figure}

\end{document}

Bildbeschreibung hier eingeben

Löschen Sie die drawOption aus dem mytextStil.

Erste Version:

A pinist nur ein spezieller Knoten, Sie können name=<string>ihnen also einen Namen geben, der zum Verbinden verwendet wird:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}

\begin{document}

\tikzset{
block/.style={
  draw, 
  rectangle, 
  minimum height=2em, 
  minimum width=5em
  },
sum/.style={
  draw, 
  circle, 
  node distance=2.0cm, 
  minimum size=6mm
  },
input/.style={coordinate}, 
output/.style={coordinate},
pinstyle/.style={
  pin edge={to-,thin,black}
  }
}
\begin{figure}[!ht]
\begin{center}
\makebox[\textwidth][c]{
\begin{tikzpicture}[auto, node distance=1.5cm,>=latex']
\node [input, name=input] {};
\node [sum, right of=input, pin={[pinstyle,name={tin1}]above:$t_{in}$}, node distance=1.5cm] (sum) {MP};
\draw [draw,->] (input) -- node [name=begging] {UE} (sum);
\node [block, right of=sum, node distance=2.0cm] (controller) {Node B};
% Text above of GGSN (MP1)
\node [above of=controller, node distance=1.2cm] (MP1) {$MP_1$};
\draw [<-] (20mm,10mm) -- (0mm,10mm);
%\draw [->, right of=MP:1, node distance=1.5cm] {};
\draw [->] (sum) -- node {} (controller);
\node [sum, right of=controller, pin={[pinstyle,name=toti1]above:$t_{out}/t_{in}$}, node distance=2.0cm] (sum_2) {MP};
\draw [->] (controller) -- node [name=u] {} (sum_2);
\node [block, right of=sum_2, node distance=2.0cm] (controller_2) {RNC};
% Text above of GGSN (MP2)
\node [above of=controller_2, node distance=1.2cm] (MP2) {$MP_2$};
\draw [->] (sum_2) -- node [name=u2] {} (controller_2);
\node [sum, right of=controller_2, pin={[pinstyle,name=toti2]above:$t_{out}/t_{in}$}, node distance=2.0cm] (sum_3) {MP};
\draw [->] (controller_2) -- node [name=u3] {} (sum_3);
\node [block, right of=sum_3, node distance=2.0cm] (controller_3) {SGSN};
% Text above of GGSN (MP3)
\node [above of=controller_3, node distance=1.2cm] (MP3) {$MP_3$};
\draw [->] (sum_3) -- node [name=u4] {} (controller_3);
\node [sum, right of=controller_3, pin={[pinstyle,name=toti3]above:$t_{out}/t_{in}$}, node distance=2.0cm] (sum_4) {MP};
\draw [->] (controller_3) -- node [name=u5] {} (sum_4);
\node [block, right of=sum_4, node distance=2.0cm] (controller_4) {GGSN};
% Text above of GGSN (MP4)
\node [above of=controller_4, node distance=1.2cm] (MP4) {$MP_4$};
\draw [->] (sum_4) -- node [name=u6] {} (controller_4);
\node [sum, right of=controller_4, pin={[pinstyle,name=tout1]above:$t_{out}$}, node distance=2.0cm] (sum_5) {MP};
\draw [->] (controller_4) -- node [name=u8] {} (sum_5);
\node [output, right of=sum_5] (output) {};
\draw [->] (sum_5) -- node [name=end] {PDN}(output);
\node [block, above of=sum_3, node distance=2.5cm] (pipeline) {Pipeline};
\draw [->] (begging) |- (pipeline);
\draw [->] (pipeline) -| (end);

\draw[<->] (tin1.east) -- (MP1.west|-tin1.east);
\draw[<->] (MP1.east) -- (toti1.west|-MP1.east);
\draw[<->] (toti1.east) -- (MP2.west|-toti1.east);
\draw[<->] (MP2.east) -- (toti2.west|-MP2.east);
\draw[<->] (toti2.east) -- (MP3.west|-toti2.east);
\draw[<->] (MP3.east) -- (toti3.west|-MP3.east);
\draw[<->] (toti3.east) -- (MP4.west|-toti3.east);
\draw[<->] (MP4.east) -- (tout1.west|-MP4.east);
\end{tikzpicture} } % End of makebox
\caption{Test}
\label{fig:blockdiagram}
\end{center}
\end{figure}

\end{document}

Bildbeschreibung hier eingeben

Ich habe die alte Syntax \tikzsetstyledurch eine passendere ersetzt \tikzset. Außerdem würde ich Ihnen empfehlen, es nicht :im Namen eines Knotens zu verwenden, da der :Operator eine besondere Bedeutung hat, wenn er auf den Namen eines Knotens angewendet wird.

Ich würde Ihnen außerdem vorschlagen, die Positionierungsbibliothek zu laden und die veraltete of=Syntax in die =ofSyntax zu ändern.

Antwort2

Gonzalo hat bereits eine sehr gute Antwort gegeben, aber für solcheregulärSchemaknoten matrixsind eine gute Option. Sie müssen nicht jeden Knoten manuell positionieren und mit matrix of nodesder Option (Sie müssen matrixdie Bibliothek laden) können Sie viel Tipparbeit sparen.

\documentclass{article}
\usepackage{tikz}
\usepackage{adjustbox}
\usetikzlibrary{shapes,matrix,arrows}

\begin{document}

\tikzset{
block/.style={
  draw, 
  rectangle, 
  minimum height=2em, 
  minimum width=5em
  },
sum/.style={
  draw, 
  circle, 
  minimum size=6mm
  },
input/.style={coordinate}, 
output/.style={coordinate},
mytext/.style={
  text depth=4pt,
  text height=10pt
  }
}

\begin{figure}[!ht]
\centering
\adjustbox{width=\linewidth}{
\begin{tikzpicture}[>=latex']

\matrix (D) [matrix of nodes, 
                column sep=1cm, 
                row sep=0.8cm,
                row 1/.style={nodes={block,anchor=center}},
                row 3/.style={nodes={block,anchor=center}},
                row 2/.append style={nodes={mytext,anchor=center}},
                ]
{
& & & & & Pipeline \\
& $t_in$ & $MP_1$ & $t_{out}/t_{in}$ & $MP_2$ & $t_{out}/t_{in}$ & $MP_3$ & $t_{out}/t_{in}$ & $MP_4$ & $t_{out}$ & \\
|[input]| &|[sum]| MP & Node B &|[sum]| MP & RNC &|[sum]| MP & SGSN &|[sum]| MP & GGSN &|[sum]| MP & |[input]|\\
};

\foreach \i [remember=\i as \lasti (initially 1)] in {2,...,11}
\draw[->] (D-3-\lasti)--(D-3-\i);

\foreach \i [remember=\i as \lasti (initially 2)] in {3,...,10}
\draw[<->] (D-2-\lasti)--(D-2-\i);

\foreach \i in {2,4,6,8,10}
\draw[->] (D-2-\i)--(D-3-\i);

\path (D-3-1)--(D-3-2) node [above,midway] (UE) {UE};
\path (D-3-10)--(D-3-11) node [above,midway] (PDN) {PDN};
\draw[->] (UE) |- (D-1-6);
\draw[<-] (PDN) |- (D-1-6);

\end{tikzpicture}}
\caption{Test}
\label{fig:blockdiagram}
\end{figure}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen