如何将节点文本向上移动一行?

如何将节点文本向上移动一行?

我有两种类型的矩形节点,每个节点里面有两行文本。

  • 第一类节点必须有 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}

两个节点,分别包含两行 tex 和一个空行

编辑:风格上相同的东西:

\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}

在此处输入图片描述

相关内容