Crie um nó retângulo dividido com partes de altura diferentes

Crie um nó retângulo dividido com partes de altura diferentes

Estou tentando encontrar uma solução elegante para fazer várias formas como estadividir retângulo com nó anexado

O melhor que consegui foi desenhar um retângulo dividido, com um estilo como

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

(Tirado deaqui). Mas não consigo descobrir uma maneira elegante de adicionar uma terceira parte além de criar um nó extra sempre e posicioná-lo corretamente. Quero poder criar os nós com um liner como \node [entry] (A) {1001 \nodepart{second} 1010 \nodepart{third} 2};, mas não tenho certeza de como fazer isso.

Responder1

Bem, se você está aberto a uma ligeira mudança na sintaxe e a alguns hackeamentos, você pode criar nós frankenstein abusando das labelopções pine do TikZ append after command.

O rectangle splitformato já está próximo do que você deseja. Porém, não permite usar um estilo de linha diferente para o separador. Podemos, no entanto, impedir que o separador seja desenhado e fornecer o nosso próprio caminho. Isso é feito usando uma operação de borda no arquivo append after command.

O retângulo anexado pode ser desenhado usando a labelopção. O posicionamento adequado envolve um deslocamento para que as bordas se sobreponham, o que é feito com a outer xsepopção. Para permitir referências às âncoras deste novo nó, também damos a ele um nome que é construído a partir do nome do nó principal.

Aqui está um 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}

saída

Uma ressalva é que você não pode usar as âncoras do nó extra enquanto a construção está sendo colocada. Além disso, o conteúdo deste nó é uma opção para o estilo em vez de uma parte real do nó.

informação relacionada