hrule в узел круга tikz

hrule в узел круга tikz

Я борюсь с внутренней компоновкой узла с помощью Tikz. По сути, я хочу добавить строку под первой текстовой строкой внутри узла, разделив ее неравномерно. Вот попытка:

Два узла tikz, один с глупо огромным пробелом в первой части, а другой не разделен

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{shapes}

\begin{document}
    \begin{tikzpicture}[auto, node distance=3cm,
        style1/.style={ellipse split, draw, align=center},
        style2/.style={ellipse, draw, , align=center},
    ]

        \node[style1] (1) {NODE1 \nodepart{lower} long name \\ foo \\ bar \\ baz};

        \node[style2] (2) [right of=1] {NODE2 \\ long name \\ foo \\ bar \\ baz};

    \end{tikzpicture}
\end{document}

Похоже, что опция splitможет разделить многоточие пополам, оставляя огромное пустое пространство над первой строкой текста (см. NODE1). Я хочу отобразить что-то вроде NODE2, но с линией, отделяющей первую строку от остальных. Вот пример желаемого вывода:

Желаемый результат

Я пытался добавить \hruleкоманду сразу после NODE2текста " ", но это, похоже, невозможно. Есть ли у вас какие-либо идеи, как это сделать?

Кстати, обратите внимание, что я виделэтот связанный вопроси его ответ принят, но я считаю, что он не решает мою проблему.

решение1

Что-то в этом роде?

\documentclass{standalone}

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

\begin{document}
    \begin{tikzpicture}[auto, node distance=3cm,
        style1/.style={ellipse split, draw, align=center},
        style2/.style={ellipse, draw, , align=center},
        lower elli/.style={align=center},
        fit elli/.style={ellipse,draw,inner sep=0pt,
        path picture={\draw ([xshift=-1cm]#1.south west)-- 
        ([xshift=1cm]#1.south east);}}
    ]

        \node[style1] (1) {NODE1 \nodepart{lower} long name \\ foo \\ bar \\ baz};

        \node[style2] (2) [right=1cm of 1] {NODE2 \\ long name \\ foo \\ bar \\ baz};

        \node (3a) [right=3.5cm of 2.north,anchor=north] {NODE3};
        \node[lower elli] (3b)[below=0pt of 3a] {long name \\ foo \\ bar \\ baz};
        \node[fit elli=3a,fit=(3a) (3b)]{};
    \end{tikzpicture}
\end{document}

введите описание изображения здесь

решение2

Вы можете просто нарисовать более длинное [h]правило и обрезать узел:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes}
\def\clap#1{\hbox to 0pt{\hss#1\hss}}
\begin{document}
\begin{tikzpicture}[auto, node distance=3cm,
    styleshess/.style={ellipse, draw, align=center,clip},
]
    \node[styleshess] (2) {NODE2\\\clap{\rule{\linewidth}{.4pt}}\\ long name \\ foo \\ bar \\ baz};
\end{tikzpicture}
\end{document}

введите описание изображения здесь

Вы можете поиграть с этой линией, как и с любой другой, \ruleчтобы изменить положение или ширину. Это \clapгарантирует, что (воображаемая) длина этой линии не увеличит размер узла. clipВ определении стиля это гарантирует, что только часть линии, которая попадает в узел, будет фактически нарисована.

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