Добавьте пробелы в строки с помощью TikZ

Добавьте пробелы в строки с помощью TikZ

Я рисую несколько блок-схем с помощью TikZ. Иногда мне нужно объединить несколько блоков вместе, чтобы сформировать одну большую группу, добавив границу вокруг соответствующих блоков. Однако есть несколько стрелок, которые пересекают границу, как показано на этой картинке.

Блок-схема без пробелов

Стрелка "к петле ALC" и стрелка чуть ниже выглядят уродливо. Я бы хотел сделать следующее (обратите внимание на небольшие зазоры вокруг стрелок, где они пересекают толстую границу):

введите описание изображения здесь

Как это возможно с TikZ? Стрелки — это обычные стрелки, нарисованные макросом \draw[->] (from) -- (to);, а толстая граница — это тоже обычная линия.

решение1

Использование @AboAmmar MWE preactionможно использовать в простом случае:

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

EDIT: тем не менее есть некоторая проблема - наконечник стрелы меняет изгиб траектории в зависимости от размера этого наконечника стрелы. Так что эта идея не является хорошим решением. введите описание изображения здесь

\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: В приведенном выше случае черная изогнутая линия стрелки не проходит посередине желтой линии - в зависимости от размера стрелки. Я обнаружил, что ответ @cfr (размер наконечника стрелки не зависит от ширины линии) может быть немного полезен здесь. Код ниже работает только тогда, когда настройка наконечника стрелки my arrowпередается через необязательный аргумент.

введите описание изображения здесь

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

Я также рассмотрел возможность использования решения @Qrrbrbirlbel (сохранить путь и вызвать его для поглаживания), ноshorten вариант не сработал. Также решение @Paul Gaborit (окруженная стрелка) исключает shortenвариант (?).

решение2

Эти зазоры на пересечениях линий можно получить с помощью толстой белой линии, нарисованной так же, как ваша линия пересечения. Вот пример:

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

введите описание изображения здесь

Связанный контент