
Estoy usando la biblioteca de decoraciones para colocar texto a lo largo de un camino. Pero el texto no aparece en la ruta, sino que aparece en el nodo, ¿cómo debo corregirlo? Además, el camino de puntos no es simétrico, ¿hay alguna manera de hacerlo limpio y parecer simétrico? ¿Cómo hago líneas sólidas de igual longitud?
\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}
Respuesta1
Varios cambios.
- Deberías usar
\tikzset
en lugar de\tikzstyle
. Consulte el código a continuación para conocer la sintaxis. - Úselo
anchor=
para medir el espacio desde el borde del nodo en lugar del centro. - Utilice la
decorations.text
biblioteca. - Para que la ruta del texto sea simétrica, dibújela a la misma altura que la parte inferior del rectángulo y luego extiéndala hasta el círculo.
\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}
Respuesta2
No está del todo claro lo que estás buscando. Supongo que para algo como esto:
es decir, el texto está en la primera flecha recta y sólida y no en la curva discontinua.
\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}
Para las etiquetas de encima de la flecha se utiliza \quotes
la biblioteca, para la línea discontinua la opción de borde bend left=60
. La biblioteca explotada chains
está cargada en el preámbulo del documento. Los estilos de nodos se definen como opciones en tikzpicture
. De este modo se eliminan \tikzstyle
las definiciones obsoletas utilizadas en su MWE.