
Ich verwende die Dekorationsbibliothek, um Text entlang eines Pfads zu platzieren. Aber der Text erscheint nicht auf dem Pfad, sondern im Knoten. Wie kann ich das korrigieren? Außerdem ist der gepunktete Pfad nicht symmetrisch. Gibt es eine Möglichkeit, ihn sauber und symmetrisch aussehen zu lassen? Wie erstelle ich durchgezogene Linien gleicher Länge?
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}
\usetikzlibrary{positioning}
\usetikzlibrary{calc,shapes.multipart,chains}
\begin{document}
\tikzstyle{block} = [rectangle, draw, fill=blue!20,
text width=5em, text centered, rounded corners, minimum height=4em]
\tikzstyle{line} = [draw, -latex']
\tikzstyle{cloud} = [draw, ellipse,fill=red!20, node distance=3cm,
minimum height=2em]
\begin{tikzpicture}[node distance = 2cm, auto]
% Place nodes
\node [block] (init) {model};
\node [cloud, left of=init] (expert) {$\mathbf{\Lambda}$ };
\node [cloud, right of=init] (system) {Predict};
\path [line,dashed] ([yshift=3ex]{init}) to[out=-90,in=-90,looseness=2.2] ([yshift=-.5ex]{expert}) node [midway, above, sloped] (TextNode) {path text};
\path [line] (init) -- (system);
\path [line] (expert) -- (init);
\end{tikzpicture}
\end{document}
Antwort1
Mehrere Änderungen.
- Sie sollten
\tikzset
anstelle von verwenden\tikzstyle
. Die Syntax finden Sie im folgenden Code. - Wird verwendet
anchor=
, um den Abstand vom Rand des Knotens statt von der Mitte zu messen. - Nutzen Sie die
decorations.text
Bibliothek. - Um einen symmetrischen Textpfad zu erhalten, zeichnen Sie ihn auf die gleiche Höhe wie die Unterseite des Rechtecks und verlängern Sie ihn dann bis zum Kreis.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning, shapes.geometric, arrows, decorations.text}
\tikzset{block/.style={rectangle, draw, fill=blue!20, text width=5em,
text centered, rounded corners, minimum height=4em},
cloud/.style={draw, ellipse,fill=red!20, node distance=3cm, minimum height=2em},
line/.style={draw, -latex'}
}
\begin{document}
\begin{tikzpicture}[node distance = 2cm, auto]
% Place nodes
\node [block] (init) {model};
\node [cloud, left of=init, anchor=east] (expert) {$\mathbf{\Lambda}$ };
\node [cloud, right of=init, anchor=west] (system) {Predict};
\path [line] (init) -- (system);
\path [line] (expert) -- (init);
\draw [line, dashed]
[postaction={decoration={text along path, reverse path, text align=center, text={path text}}, decorate}]
(init) to[out=-90, in=-90, looseness=2.2] ([yshift=-2em]expert) to (expert);
\end{tikzpicture}
\end{document}
Antwort2
Es ist nicht ganz klar, wonach Sie suchen. Ich vermute, dass es so etwas wie das hier ist:
d. h. der Text befindet sich auf dem ersten geraden durchgezogenen Pfeil und nicht auf der gestrichelten Kurve.
\documentclass[margin=3mm]{standalone}%{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
calc, chains,
positioning,
quotes,
shapes, shapes.multipart}
\begin{document}
\begin{tikzpicture}[auto,
node distance = 22mm,
start chain = going right,
arr/.style = {-Stealth},
base/.style = {draw, semithick, minimum size=2.2em, font=\sffamily},
block/.style = {base, text width=5em, align=center, rounded corners, fill=blue!20},
cloud/.style = {base, ellipse, fill=red!20}
]
\begin{scope}[nodes={on chain, join=by arr}]
\node [cloud] (expert) {$\mathbf{\Lambda}$};
\node [block] (init) {model};
\node [cloud] (system) {Predict};
\end{scope}
\path (expert) to ["path text"] (init);
\draw[arr, dashed] (init) to [out=240, in=300] (expert);
\end{tikzpicture}
\end{document}
Für Beschriftungen über dem Pfeil wird \quotes
die Bibliothek verwendet, für gestrichelte Linien die Option für Kanten bend left=60
. Verwendet wird chains
die Bibliothek, die in die Dokumentpräambel geladen wird. Knotenstile werden als Optionen in definiert tikzpicture
. Dadurch werden veraltete \tikzstyle
Definitionen entfernt, die in Ihrem MWE verwendet werden.