Añade espacios a las líneas con TikZ

Añade espacios a las líneas con TikZ

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.

Diagrama de bloques sin espacios.

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):

ingrese la descripción de la imagen aquí

¿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, preactionse 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. ingrese la descripción de la imagen aquí

\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 arrowse pasa a través de un argumento opcional.

ingrese la descripción de la imagen aquí

\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 shortenla opción no funcionó. También la solución @Paul Gaborit (flecha rodeada) excluye shortenla 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}

ingrese la descripción de la imagen aquí

información relacionada