我有两种类型的矩形节点,每个节点里面有两行文本。
- 第一类节点必须有 3 行高,其中 2 行文本是前两行(主要约束实际上是第二行必须在节点内垂直居中);
- 第二种类型的节点必须只有 2 行高,并且文本照常垂直居中。
由于一些模糊的代码库管理模式,我只能通过改变节点样式来做到这一点。
以下是我想要获得的草图:
First type of node: Second type of node:
┌─────────────┐ ┌─────────────┐
│ First line │ │ First line │
│ Second line │ │ Second line │
│ │ └─────────────┘
└─────────────┘
第二种类型的节点很容易创建,使用双反斜杠作为换行符;然后文本会按预期自动垂直居中。
另一方面,我正在努力构建一个看起来像第一个节点的节点。
我努力了使用标签但我不知道该怎么把它们放进去里面节点,而且它们不会像节点文本那样使节点扩展以承载完整标签。
我想到了将节点文本向上移动,但我没有成功。我只找到了
shift
移动整个节点(文本和矩形形状)的选项,这不是我想要的。最后,我尝试了使用在结束节点执行,像这样:
execute at end node=\\
但是这也不起作用(我已经检查过它execute at end node=foobar
实际上按预期工作,以确保不会错过任何与语法相关的内容)。
您知道如何实现这个目标吗?
答案1
我不确定我是否理解了你想要什么。你写的两行节点就是你想要的,所以我不明白这里的问题。
\documentclass[tikz, 11pt, border=1cm]{standalone}
\begin{document}
\begin{tikzpicture}
\node[draw, align=left] (A) at (0,0) {First line\\Second line\\}; %Empty third line
\node[draw, align=left, text depth=\baselineskip] (B) at (3,0) {First line\\Second line}; %Only two lines
\draw[red, dashed] (A.north west) -- (B.north east);
\draw[red, dashed] (A.south west) -- (B.south east);
\end{tikzpicture}
\end{document}
编辑:风格上相同的东西:
\documentclass[tikz, 11pt, border=1cm]{standalone}
\tikzset{
twoline/.style={draw, align=left},
threeline/.style={draw, align=left, text depth=\baselineskip},
}
\begin{document}
\begin{tikzpicture}
\node[threeline] (A) at (0,0) {First line\\Second line};
\node[twoline] (B) at (3,0) {First line\\Second line};
\draw[red] (A) -- (B);
\end{tikzpicture}
\end{document}
答案2
我也不确定你想要什么。你在寻找类似的东西吗:
\documentclass[tikz, 11pt,
margin=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[
N/.style = {draw, align=left, anchor= north,
text depth=#1\baselineskip % number of empty lines after text
},
N/.default = 0
]
\node[N=1] (A) {First line\\Second line}; %Empty third line
\node[N] (B) at (3,0) {First line\\Second line};
\node[N] (C) at (6,0) {First line};
\node[N=3] (D) at (9,0) {First line};
\draw[red, dashed] (A.north west) -- (D.north east);
\end{tikzpicture}
\end{document}
编辑:
- 如果节点不需要在其顶部对齐,则删除节点的选项
anchor=north
。 - 如果节点的相对定位与其顶部对齐,则节点锚点应更改为,
anchor=north west
并且节点定位为\node[right=of <name i>.north east, N] (name j) {...};
:
\documentclass[tikz, 11pt,
margin=3mm]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[
N/.style = {draw, align=left, anchor=north west,
text depth=#1\baselineskip % number of empty lines after text
},
N/.default = 0
]
\node[N=1] (A) {First line\\Second line}; %Empty third line
\node[right=of A.north east,
N] (B) {First line\\Second line};
\node[right=of B.north east,
N] (C) {First line};
\node[right=of C.north east,
N=2] (B) {First line\\Second line};
\end{tikzpicture}
\begin{tikzpicture}[
N/.style = {draw, align=left,
text depth=#1\baselineskip % number of empty lines after text
},
N/.default = 0
]
\node[N=1] (A) {First line\\Second line}; %Empty third line
\node[right=of A,
N] (B) {First line\\Second line};
\node[right=of B,
N] (C) {First line};
\node[right=of C,
N=2] (B) {First line\\Second line};
\end{tikzpicture}
\end{document}