在两个 tcolorboxes 之间添加箭头

在两个 tcolorboxes 之间添加箭头

我是 tikz 的新手。我正在尝试创建类似这样的内容: 在此处输入图片描述

这两个 tcolorbox 除了作为节点之外,工作得很好。在谷歌搜索和阅读 tikz 文档后,我仍然不知道如何绘制箭头!这是我的 MWE,它很伤心,目前需要超出我能力的智慧。

\documentclass[12pt,fleqn,twoside]{report}
\usepackage{tcolorbox}
\usepackage{tikz}

\tcbset{%
    boxrule=4pt, 
    colback=white, %background color
    colframe=blue, % frame colour
    halign=center,
    valign=center, 
    halign lower=center,
    align lower =center,
    sharp corners=all,
    center title,
    lower separated=false,
    fonttitle=\sffamily\bfseries\large,
    }

\begin{document}

\begin{tikzpicture}[node distance=2cm,baseline=-0.5ex,  arrow/.style = {thick,-stealth}]
    \node(NodeName1){
        \begin{tcolorbox}[title=Box1Title]
        Blah box1 text
        \end{tcolorbox}
    };
\node(NodeName2){
    \begin{tcolorbox}[title=Box2Title]
        Blah box2 text
        \end{tcolorbox}
        };
\draw(NodeName1);   
\draw[->] (NodeName1) -- (NodeName2);
\draw(NodeName2);
\end{tikzpicture}

\end{document}

答案1

箭头不是问题(实际上它出现了),但是你的节点重叠(没有一个相对于另一个发生位移)并且因此它的长度为零 pt。另外你的代码中有错误(未定义的选项)并且由于没有定义框的宽度,它使用默认宽度,例如文本宽度...

\documentclass[12pt,fleqn,twoside]{report}
\usepackage[many]{tcolorbox}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, % for arrows style
                positioning  % for positioning of boxes
               }
\tcbset{%
    boxrule=4pt,
    colback=white, % background color
    colframe=cyan, % frame colour
        halign=center,
        valign=center,
    sharp corners=all,
    center title,
    lower separated=false,
    fonttitle=\sffamily\bfseries\large,
    width=4cm % added
    }
% for show only picture
\usepackage[tightpage, active]{preview}
\setlength\PreviewBorder{3mm}
\PreviewEnvironment{tikzpicture}

    \begin{document}
\begin{tikzpicture}[node distance=2cm]
    \node(NodeName1){
        \begin{tcolorbox}[title=Box 1 Title]
        Box 1 text
        \end{tcolorbox}
    };
\node(NodeName2) [right=of NodeName1] {  % added position of second box
    \begin{tcolorbox}[title=Box 2 Title]
        Box 2 longer text text text text text
        \end{tcolorbox}
        };
\draw[blue, line width=2mm,-{Triangle[angle=60:1pt 3]}] (NodeName1) -- (NodeName2);
\end{tikzpicture}
    \end{document}

看看获得的图像是否是您想要的:

在此处输入图片描述

编辑: 代码和解释略有改进

答案2

您不必在 a 内包含tcolorboxesas 来在它们之间绘制箭头。事实上 a或多或少就是。tikznodestikzpicturetcolorboxtikzpicture

使用enhancedtcolorboxes,您可以使用remember as= ...选项为每个框分配一个名称,并在 中使用这些名称作为引用tikzpicture。这就是以下示例中显示的内容。

enhanced选项已添加到tcbset声明中(tcolorbox使用most选项加载)。然后nobeforeafter在每个框中使用一个选项以使其保持在同一行,并remember as使用选项来命名它们。

已使用外部图片绘制这些框之间的箭头:

\documentclass[12pt,fleqn,twoside]{report}
\usepackage[most]{tcolorbox}
\usepackage{tikz}

\tcbset{%
    enhanced,
    boxrule=4pt, 
    colback=white, %background color
    colframe=blue, % frame colour
    halign=center,
    valign=center, 
    halign lower=center,
    valign lower =center,
    sharp corners=all,
    center title,
    lower separated=false,
    fonttitle=\sffamily\bfseries\large,
    }

\begin{document}

\begin{tcolorbox}[title=Box1Title, width=.4\linewidth, nobeforeafter, remember as=NodeName1]
        Blah box1 text
\end{tcolorbox}
\hfill
\begin{tcolorbox}[title=Box2Title, width=.4\linewidth, nobeforeafter, remember as=NodeName2]
        Blah box2 text
\end{tcolorbox}

\tikz[overlay, remember picture] \draw[->, line width=4pt, blue] (NodeName1)--(NodeName2);

\end{document}

在此处输入图片描述

相关内容