Estoy dibujando algunos diagramas de bloques con TikZ. A veces, necesito combinar varios bloques para formar un grupo grande agregando un borde alrededor de los bloques correspondientes. Sin embargo, hay algunas flechas que cruzan el borde, como se muestra en esta imagen.
La flecha "al bucle ALC" y la flecha justo debajo se ven feas. Lo que me gustaría hacer es lo siguiente (tenga en cuenta los pequeños espacios alrededor de las flechas donde cruzan el borde grueso):
¿Cómo es eso posible con TikZ? Las flechas son simplemente flechas ordinarias dibujadas con la \draw[->] (from) -- (to);
macro, y el borde grueso también es solo una línea ordinaria.
Respuesta1
Usando @AboAmmar MWE, preaction
se puede usar en el caso simple:
\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[> = latex]
\node [draw, thick, minimum size=5em] (rec) {};
\node [draw] (div) {$\div$};
\draw [preaction={draw, line width=3pt, white}][<->] (div) -- ++(5em,0);
\end{tikzpicture}
\end{document}
EDITAR: sin embargo, hay algún problema: la punta de la flecha cambia la curvatura de la ruta dependiendo del tamaño de la punta de la flecha. Entonces la idea no es una buena solución.
\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\tikzset{
outlined arrow/.style={
preaction={{}-{},draw,line width=3pt,yellow}
}
}
\begin{document}
\begin{tikzpicture}[> = latex]
\node [draw,thick,minimum size=5em] (rec) {};
\node [draw] (div) {$\div$};
\draw [outlined arrow][<->] (div) -- ++(5em,0);
\draw [outlined arrow][<->,shorten <=2pt] (div) .. controls +(-90:15mm) and +(180:15mm) .. ++(5em,-5em);
\end{tikzpicture}
\end{document}
EDITAR 2: En el caso anterior, la línea doblada de la flecha negra no va en el medio de la línea amarilla, dependiendo del tamaño de la flecha. Encontré esa respuesta @cfr (Tamaño de la punta de la flecha independiente del ancho de la línea.) puede ser un poco útil aquí. El siguiente código funciona solo cuando la configuración de la punta de la flecha my arrow
se pasa a través de un argumento opcional.
\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[
outlined arrow/.style={preaction={double=yellow,double distance=2pt,draw=red}},
my arrow/.style={>={LaTeX[length=2mm]}},
yscale=0.6
]
\node [draw,thick,minimum size=5em] (rec) {};
\node [draw] (div) {$\div$};
\draw [outlined arrow][<->,my arrow] (div) -- ++(5em,0);
\draw [outlined arrow][<->,shorten <=2pt,my arrow]
(div) .. controls +(-90:15mm) and +(180:15mm) .. ++(5em,-5em);
\end{tikzpicture}
\end{document}
También consideré el uso de la solución @Qrrbrbirlbel (guarda un camino y llámalo para acariciarlo), pero shorten
la opción no funcionó. También la solución @Paul Gaborit (flecha rodeada) excluye shorten
la opción (?).
Respuesta2
Estos espacios en los cruces de líneas se pueden lograr con una línea gruesa de color blanco dibujada de la misma manera que la línea de cruce. Aquí hay un ejemplo:
\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[> = latex]
\node [draw, thick, minimum size=5em] (rec) {};
\node [draw] (div) {$\div$};
\draw [<->, line width=3pt, white](div) -- ++(5em,0);
\draw [<->] (div) -- ++(5em,0);
\end{tikzpicture}
\end{document}