Mit TikZ Lücken zu Zeilen hinzufügen

Mit TikZ Lücken zu Zeilen hinzufügen

Ich zeichne einige Blockdiagramme mit TikZ. Manchmal muss ich mehrere Blöcke zu einer großen Gruppe zusammenfassen, indem ich einen Rahmen um die entsprechenden Blöcke füge. Es gibt jedoch einige Pfeile, die den Rahmen überqueren, wie in diesem Bild gezeigt.

Blockschaltbild ohne Lücken

Der Pfeil „zur ALC-Schleife“ und der Pfeil direkt darunter sehen hässlich aus. Was ich gerne machen würde, ist Folgendes (beachten Sie die kleinen Lücken um die Pfeile herum, wo sie den dicken Rand überqueren):

Bildbeschreibung hier eingeben

Wie ist das mit TikZ möglich? Die Pfeile sind nur normale Pfeile, die mit dem \draw[->] (from) -- (to);Makro gezeichnet wurden, und der dicke Rand ist auch nur eine normale Linie.

Antwort1

Mit @AboAmmar MWE preactionkann im einfachen Fall Folgendes verwendet werden:

\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: Es gibt dennoch ein Problem – die Pfeilspitze ändert die Pfadbiegung abhängig von der Größe dieser Pfeilspitze. Die Idee ist also keine gute Lösung. Bildbeschreibung hier eingeben

\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: Im obigen Fall verläuft die gebogene schwarze Pfeillinie nicht in der Mitte der gelben Linie – abhängig von der Pfeilgröße. Ich habe diese @cfr-Antwort gefunden (Pfeilspitzengröße unabhängig von der Linienbreite) kann hier ein wenig nützlich sein. Der folgende Code funktioniert nur, wenn die Pfeilspitzeneinstellungen my arrowüber ein optionales Argument übergeben werden.

Bildbeschreibung hier eingeben

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

Ich habe auch die Verwendung der @Qrrbrbirlbel-Lösung in Betracht gezogen (Speichern Sie einen Pfad und rufen Sie ihn zum Streichen auf), aber shortendie Option hat nicht funktioniert. Auch @Paul Gaborit-Lösung (umgebener Pfeil) schließt shortenOption (?) aus.

Antwort2

Diese Lücken an Linienkreuzungen können mit einer dicken weißen Linie erreicht werden, die in derselben Richtung gezeichnet wird wie Ihre Kreuzungslinie. Hier ist ein Beispiel:

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

Bildbeschreibung hier eingeben

verwandte Informationen