Создать узел разделенного прямоугольника с частями разной высоты

Создать узел разделенного прямоугольника с частями разной высоты

Я пытаюсь найти элегантное решение, чтобы сделать несколько таких фигур.разделенный прямоугольник с присоединенным узлом

Лучшее, что я придумал, — это нарисовать разделенный прямоугольник в стиле

\tikzset{
entry/.style={
    draw,
    rectangle split,
    rectangle split parts=2,
}

(взято изздесь). Но я не могу придумать элегантный способ добавить третью часть, кроме как создавать каждый раз дополнительный узел и правильно его позиционировать. Я хочу иметь возможность создавать узлы с помощью однострочного кода, например \node [entry] (A) {1001 \nodepart{second} 1010 \nodepart{third} 2};, но я не уверен, как это сделать.

решение1

Ну, если вы открыты для небольших изменений в синтаксисе и некоторого хакерства, вы можете создать узлы Франкенштейна, злоупотребляя опциями TikZ label, pinи .append after command

Форма rectangle splitуже близка к тому, что вам нужно. Однако она не позволяет использовать другой стиль линии для разделителя. Однако мы можем вообще запретить рисование разделителя и указать свой собственный путь. Это делается с помощью операции с ребром в append after command.

Прикрепленный прямоугольник можно нарисовать с помощью опции label. Правильное позиционирование включает сдвиг, чтобы границы перекрывали друг друга, что делается с помощью опции outer xsep. Чтобы разрешить ссылки на якоря этого нового узла, мы также даем ему имя, которое формируется из имени основного узла.

Вот MWE:

\documentclass[border=1mm,tikz]{standalone}
\usetikzlibrary{shapes.multipart}

\tikzset{entry/.style={
    % appearance settings for the main node
    draw,
    rectangle split,
    rectangle split parts=2,
    rectangle split draw splits=false,
    % draw the small attached node
    label={[name=label of \tikzlastnode,anchor=north west,draw,outer xsep=-.5\pgflinewidth]north east:#1},
    % draw the split using a dashed line
    append after command={(\tikzlastnode.text split west) edge[draw,dashed] (\tikzlastnode.text split east)},
}}

\begin{document}
    \begin{tikzpicture}
        \node[entry=2] (myentry) at (0,0) {1001 \nodepart{second} 1010};

        % examples of how we can refer to coordinates of this monster
        \node[coordinate,pin=4:a] at (label of myentry.south east) {};
        \node[coordinate,pin=4:b] at (myentry.south east) {};
    \end{tikzpicture}
\end{document}

выход

Предостережение в том, что вы не можете использовать якоря дополнительного узла во время размещения конструкции. Кроме того, содержимое этого узла является опцией стиля, а не реальной частью узла.

Связанный контент