我正在努力解決 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
中的 可確保僅實際繪製位於節點內的線條部分。