Crear un nodo de rectángulo dividido con partes de diferentes alturas

Crear un nodo de rectángulo dividido con partes de diferentes alturas

Estoy tratando de encontrar una solución elegante para hacer un montón de formas como esta.rectángulo dividido con nodo adjunto

Lo mejor que se me ocurrió es dibujar un rectángulo dividido, con un estilo como

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

(tomado deaquí). Pero no puedo encontrar una manera elegante de agregar una tercera parte más que crear un nodo adicional cada vez y colocarlo correctamente. Quiero poder crear los nodos con una sola línea como \node [entry] (A) {1001 \nodepart{second} 1010 \nodepart{third} 2};, pero no estoy seguro de cómo hacerlo.

Respuesta1

Bueno, si estás abierto a un ligero cambio en la sintaxis y algo de piratería, puedes crear nodos frankenstein abusando de las labelopciones piny de TikZ append after command.

La rectangle splitforma ya se acerca a lo que deseas. Sin embargo, no permite utilizar un estilo de línea diferente para el separador. Sin embargo, podemos evitar que se dibuje el separador y proporcionar nuestro propio camino. Esto se hace usando una operación de borde en el archivo append after command.

El rectángulo adjunto se puede dibujar usando la labelopción. Colocarlo correctamente implica un desplazamiento para que los bordes se superpongan, lo que se hace con la outer xsepopción. Para permitir referencias a los anclajes de este nuevo nodo, también le damos un nombre que se construye a partir del nombre del nodo principal.

Aquí hay un 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}

producción

Una advertencia es que no puede utilizar los anclajes del nodo adicional mientras se coloca la construcción. Además, el contenido de este nodo es una opción para el estilo en lugar de una parte del nodo real.

información relacionada