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.
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):
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 preaction
kann 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.
\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.
\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 shorten
die Option hat nicht funktioniert. Auch @Paul Gaborit-Lösung (umgebener Pfeil) schließt shorten
Option (?) 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}