Adicione lacunas às linhas com TikZ

Adicione lacunas às linhas com TikZ

Estou desenhando alguns diagramas de blocos com TikZ. Às vezes, preciso combinar vários blocos para formar um grande grupo, adicionando uma borda ao redor dos blocos correspondentes. No entanto, existem algumas setas que atravessam a fronteira, como mostra esta imagem.

Diagrama de blocos sem lacunas

A seta "para loop ALC" e a seta logo abaixo parecem feias. O que eu gostaria de fazer é o seguinte (observe as pequenas lacunas ao redor das setas onde elas cruzam a borda grossa):

insira a descrição da imagem aqui

Como isso é possível com o TikZ? As setas são apenas setas comuns desenhadas com a \draw[->] (from) -- (to);macro, e a borda grossa também é apenas uma linha comum.

Responder1

Usando @AboAmmar MWE, preactionpode ser usado no caso simples:

\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: no entanto, há algum problema - a ponta da seta muda a curvatura do caminho dependendo do tamanho da ponta da seta. Portanto, a ideia não é uma boa solução. insira a descrição da imagem aqui

\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}

EDIT 2: No caso acima, a linha dobrada da seta preta não fica no meio da linha amarela - dependendo do tamanho da seta. Descobri que a resposta @cfr (tamanho da ponta da seta independente da largura da linha) pode ser um pouco útil aqui. O código abaixo funciona apenas quando a configuração da ponta da seta my arrowé passada por argumento opcional.

insira a descrição da imagem aqui

\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}

Considerei também o uso da solução @Qrrbrbirlbel (salve um caminho e chame-o para acariciar), mas shortena opção não funcionou. Também solução @Paul Gaborit (seta cercada) exclui shortena opção (?).

Responder2

Essas lacunas nos cruzamentos de linhas podem ser obtidas com uma linha grossa de cor branca desenhada da mesma forma que a linha de cruzamento. Aqui está um exemplo:

\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}

insira a descrição da imagem aqui

informação relacionada