
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 tin
und zu verbinden tout/tin
. Da tin
und tout/tin
ich 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}
Antwort1
Verbesserte Version:
Ich habe die alte
\tikzsetstyle
in eine passendere\tikzset
Syntax geändert.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.Ich habe die
positioning
Bibliothek geladen und die veralteteof=
Syntax in die=of
Syntax geändert (beachten Sie die Einsparungen im resultierenden Code).Anstelle von Pins habe ich einen
mytext
Stil für Knoten verwendet; das liefert bessere Ergebnisse.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}
Löschen Sie die draw
Option aus dem mytext
Stil.
Erste Version:
A pin
ist 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}
Ich habe die alte Syntax \tikzsetstyle
durch 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 =of
Syntax zu ändern.
Antwort2
Gonzalo hat bereits eine sehr gute Antwort gegeben, aber für solcheregulärSchemaknoten matrix
sind eine gute Option. Sie müssen nicht jeden Knoten manuell positionieren und mit matrix of nodes
der Option (Sie müssen matrix
die 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}