来自内部 tcolorbox 的箭头

来自内部 tcolorbox 的箭头

我正在尝试用箭头连接两个内部 tcolorbox。我也见过这个答案,不幸的是,它对我的​​问题没有帮助。下面是一个最小示例。我很感激任何帮助。需要注意的是,我想找到一种不需要手动设置坐标的解决方案,因为目标图很复杂。每个节点都有自己的高度,只有节点的宽度是恒定的在此处输入图片描述

\documentclass[tikz]{standalone}
\usepackage[most]{tcolorbox}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,positioning}

\newtcolorbox{rosnode}[1]{
    colback=white!85!gray,
    colframe=gray,
    coltitle=white,
    boxrule=2pt,
    halign=center,
    valign=center,
    sharp corners=all,
    center title,
    % lower separated=false,
    width=5cm,
    title={#1}
}

\newtcolorbox{rosservice}[1]{
    colback=white!85!gray,
    colframe=gray,
    coltitle=white,
    boxrule=2pt,
    halign=center,
    valign=center,
    arc=0.4mm,
    center title,
    % lower separated=false,
    left skip=-0.3cm,
    right skip=-0.3cm,
    title={#1}
}

\begin{document}
\begin{tikzpicture}[node distance=1cm, every node/.style={inner sep=0,outer sep=0}]
    \node(Node1) {
        \begin{rosnode}{Node1}
            Box 1 longer text text text text text
            \begin{rosservice}{InnerBox1}
                Box text
            \end{rosservice}
        \end{rosnode}
    };
    \node(Node2) [right=of Node1] {
        \begin{rosnode}{Node2}
            Box 2 text 
            \begin{rosservice}{InnerBox2}
                Box text
            \end{rosservice}
        \end{rosnode}
    };
    \draw[gray,line width=0.8mm,-{Triangle[angle=60:1pt 3]}] (Node1) -- (Node2);
\end{tikzpicture}
\end{document}

答案1

欢迎来到 TeX.SX!我不确定将tcolorboxes 放在 Ti 中是否复杂Z 节点确实是需要的,但我会保留您的设置,因为我不知道您想用它实现什么。

tcolorbox为了引用使用 Ti的外框Z 宏,例如\draw,您可以使用remember as相关选项。您还需要为此tcolorbox添加选项。完成此操作后,您可以使用带有选项的引用此框。enhancedtcolorboxtikzpictureremember picture, overlay

请参阅对原始代码的以下调整:

\documentclass{standalone}
\usepackage[most]{tcolorbox}
\usetikzlibrary{arrows.meta, positioning}

\newtcolorbox{rosnode}[1]{
    colback=white!85!gray,
    colframe=gray,
    coltitle=white,
    boxrule=2pt,
    halign=center,
    valign=center,
    sharp corners=all,
    center title,
    % lower separated=false,
    width=5cm,
    title={#1}
}

\newtcolorbox{rosservice}[2][]{
    enhanced,
    colback=white!85!gray,
    colframe=gray,
    coltitle=white,
    boxrule=2pt,
    halign=center,
    valign=center,
    arc=0.4mm,
    center title,
    % lower separated=false,
    left skip=-0.3cm,
    right skip=-0.3cm,
    title={#2},
    #1
}

\begin{document}

\begin{tikzpicture}[node distance=1cm, every node/.style={inner sep=0,outer sep=0}]
    \node(Node1) {
        \begin{rosnode}{Node1}
            Box 1 longer text text text text text
            \begin{rosservice}[remember as=InnerBox1]{InnerBox1}
                Box text
            \end{rosservice}
        \end{rosnode}
    };
    \node(Node2) [right=of Node1] {
        \begin{rosnode}{Node2}
            Box 2 text 
            \begin{rosservice}[remember as=InnerBox2]{InnerBox2}
                Box text
            \end{rosservice}
        \end{rosnode}
    };
\end{tikzpicture}

\begin{tikzpicture}[remember picture, overlay]
    \draw[gray, line width=0.8mm, -{Triangle[angle=60:1pt 3]}] (InnerBox1.east) -- (InnerBox2.west);
\end{tikzpicture}

\end{document}

在此处输入图片描述

在这种情况下,改变箭头的颜色使其更明显可能是一个好主意。

相关内容