如何修复两个标签框之间的碰撞箭头

如何修复两个标签框之间的碰撞箭头

大家好,感谢阅读我的帖子。

在 TikZ 绘图中,我使用\node[draw]type 命令定义了两个上下叠放的框。我还在每个框上方添加了带框标签。问题是,在两个框之间绘制箭头时,仅考虑基本框的坐标,因此箭头会穿过标签,而不是停在标签前面。

我理解 TikZ 为什么会这样做,但我该如何修复它?我试图指向一个(A2.label)节点,但它似乎不存在...

以下是我的最小工作示例及其目前提供的内容。感谢您的帮助!

\documentclass[10pt]{standalone}
\usepackage[english]{babel}

\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}

    % BOX 1
    \node[draw,text width=7cm,
            label={[text width=7cm,fill=black!10,draw,minimum height=12pt]{\bfseries box 1}}
            ] (A1) at (0,0) {
                some text for box 1
        } ; 

    % BOX 2
    \node[draw,text width=5cm,
            label={[text width=5cm,fill=black!10,draw,minimum height=12pt]{\bfseries box 2}}    
            ] (A2) [below of=A1,yshift=-4cm] {
                some other text for box 2
            } ; 

    % ARROW
    \draw[->,>=latex] (A1) -- node[right] {test} (A2) ; 


\end{tikzpicture}
\end{document}

箭头相撞的结果

答案1

标签也是节点。因此,一种可能性是给它起一个名字或别名,然后绘制指向标签节点的箭头。

\documentclass[10pt]{standalone}
\usepackage[english]{babel}

\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}

    % BOX 1
    \node[draw,text width=7cm,
            label={[text width=7cm,fill=black!10,draw,minimum height=12pt]{\bfseries box 1}}
            ] (A1) at (0,0) {
                some text for box 1
        } ; 

    % BOX 2
    \node[draw,text width=5cm,
            label={[text width=5cm,fill=black!10,draw,minimum
            height=12pt,alias=stop here]{\bfseries box 2}}    
            ] (A2) [below of=A1,yshift=-4cm] {
                some other text for box 2
            } ; 

    % ARROW
    \draw[->,>=latex] (A1) -- node[right] {test} (stop here) ; 


\end{tikzpicture}
\end{document}

在此处输入图片描述

实现此输出的另一种方法是A2使用库构建和标签节点的复合体fit

\documentclass[10pt]{standalone}
\usepackage[english]{babel}

\usepackage{tikz}
\usetikzlibrary{positioning,fit}

\begin{document}
\begin{tikzpicture}

    % BOX 1
    \node[draw,text width=7cm,
            label={[text width=7cm,fill=black!10,draw,minimum height=12pt]{\bfseries box 1}}
            ] (A1) at (0,0) {
                some text for box 1
        } ; 

    % BOX 2
    \node[draw,text width=5cm,
            label={[text width=5cm,fill=black!10,draw,minimum
            height=12pt,alias=include me]{\bfseries box 2}}    
            ] (A2) [below of=A1,yshift=-4cm] {
                some other text for box 2
            } ; 
    \node[inner sep=0pt,fit=(A2) (include me)] (A2compound){};
    % ARROW
    \draw[->,>=latex] (A1) -- node[right] {test} (A2compound) ; 


\end{tikzpicture}
\end{document}

相关内容