TikZ:如何在一侧(例如在矩形的右侧)定义具有自定义内部分离的节点?

TikZ:如何在一侧(例如在矩形的右侧)定义具有自定义内部分离的节点?

以下 MWE 构建某种自定义节点(两个节点的组合)以获得所需的结果:

\documentclass{article}

\usepackage{tikz}

\tikzset{
    every node/.style={fill=blue!30,draw,rectangle,inner sep=0pt,outer sep=0pt},
    innerRectangle/.style={minimum height=2cm, minimum width=2cm},
    outerRectangle/.style={fill=red!50,minimum height=3cm, minimum width=2.5cm},
}

\begin{document}
    \begin{tikzpicture}
        \node[outerRectangle] (o) {};
        \node[innerRectangle,anchor=east] (i) at (o.east) {};
    \end{tikzpicture}
\end{document}

输出为:

在此处输入图片描述

问:有没有更简单的方法,例如为一侧或每一侧定义一个具有自定义内部 sep 的单节点定义?

更新 1(由 Ignasi 的回答引发):

我没有提到我想将文本插入内部节点,并且此文本应遵守自定义内部分隔符。以下 MWE(基于 Ignasi 的回答,我只是添加了包lipsum并替换minimum widthtext width)演示了该问题:

\documentclass{article}

\usepackage{lipsum}
\usepackage{tikz}
\usetikzlibrary{positioning}

\tikzset{
    every node/.style={
        fill=blue!30,
        draw,
        rectangle,
        inner sep=0pt,outer sep=0pt
    },
    outerRectangle/.style={%
        fill=red!50,
        minimum height=3cm,
        text width=5cm,
    },%
    innerRectangle/.style={%
        path picture={%
            \draw[fill=blue!30] ([yshift=-#1]path picture bounding box.north east)
                -|([xshift=#1]path picture bounding box.west)
               |-([yshift=#1]path picture bounding box.south east)
               --cycle;}},
    innerRectangle/.default=5mm%<- when called without parameter
}

\begin{document}

    \begin{tikzpicture}
        \node[outerRectangle, innerRectangle] (x) {\lipsum[1]};
   \end{tikzpicture}
\end{document}

更新产生的框的屏幕截图:

在此处输入图片描述

答案1

您可以使用path picture选项向您的节点添加内部填充区域:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning}

\tikzset{
    every node/.style={fill=blue!30,draw,rectangle,inner sep=0pt,outer sep=0pt},
    outerRectangle/.style={fill=red!50,minimum height=3cm, minimum width=2.5cm},
    innerRectangle/.style={%
        path picture={%
            \draw[fill=blue!30] ([yshift=-#1]path picture bounding box.north east)
                -|([xshift=#1]path picture bounding box.west)
               |-([yshift=#1]path picture bounding box.south east)
               --cycle;}},
    innerRectangle/.default=3mm
}

\begin{document}

    \begin{tikzpicture}
        \node[outerRectangle] (o) {A};

        \node[outerRectangle,anchor=east, 
        innerRectangle=5mm, right=of o] (o1) {ABC};

        \node[outerRectangle, innerRectangle=2mm, below= of o] (o2) {text};

        \node[outerRectangle,anchor=east, innerRectangle, right=of o2] (o3) {12345};
   \end{tikzpicture}
   \end{document}

在此处输入图片描述

更新:

这是一个替代解决方案,我希望它能解决文本使用哪个区域的问题。以前的解决方案使用了一个节点,在其上inner border绘制了一个。在这种情况下,一个inner node用于文本,并添加了一个额外的路径作为外边框。这个外边框是用一个fit节点定义的。虽然这个外节点有自己的名称供参考,但我不知道如何使用它进行定位,所以定位只能用内部节点完成。

\documentclass{article}

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

\tikzset{
    myborder/.style={%
        append after command={%
            \pgfextra
                \node[fit={([yshift=-#1]\tikzlastnode.south east) 
                ([shift={(-#1,#1)}]\tikzlastnode.north west)}, 
                fill=red!30, draw, inner sep=0pt]  (\tikzlastnode-b) {};\endpgfextra}},
    myborder/.default=3mm
    }
\begin{document}
    \begin{tikzpicture}
    \node[draw, fill=blue!30, text width=4cm,
        myborder] (A) {\lipsum[2]};

    \node[draw, fill=green!30,
        myborder=2mm, right= 0pt of A] (B) {ABC};

    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容