TikZで線に隙間を追加する

TikZで線に隙間を追加する

TikZ でブロック図をいくつか描いています。 場合によっては、対応するブロックの周囲に境界線を追加して、複数のブロックを組み合わせて 1 つの大きなグループを形成する必要があります。 ただし、この図に示すように、境界線を横切る矢印がいくつかあります。

隙間のないブロック図

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

編集: それでも、いくつか問題があります。矢印の先端のサイズに応じて、矢印の先端のパスの曲がり具合が変わります。したがって、このアイデアは良い解決策ではありません。 ここに画像の説明を入力してください

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

編集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}

ここに画像の説明を入力してください

関連情報