TikZ 矩阵中文本周围有紧密边框且左对齐

TikZ 矩阵中文本周围有紧密边框且左对齐

我想使用该matrix库在 TikZ 中绘制 SQL 图表。但是,以下代码令人讨厌地在矩阵中的节点周围创建了不必要的空间。当我尝试在矩阵节点之间绘制箭头以显示表之间的关系时,箭头最终会位于矩阵边框内。以下代码和图片演示了这一点:

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{positioning,arrows,matrix,calc}

\tikzset{
  -|-/.style={
    to path={
      (\tikztostart) -| ($(\tikztostart)!#1!(\tikztotarget)$) |- (\tikztotarget)
      \tikztonodes
    }
  },
  -|-/.default=0.5,
  |-|/.style={
    to path={
      (\tikztostart) |- ($(\tikztostart)!#1!(\tikztotarget)$) -| (\tikztotarget)
      \tikztonodes
    }
  },
  |-|/.default=0.5,
}


\begin{document}

\begin{tikzpicture}[
  ->, >=stealth,
  thick,
  matstyle/.style={
      matrix of nodes,
      draw,
      nodes={draw=none, align= left, minimum width= 3cm}
    }
  ]

  \matrix (T1) [matstyle, column sep= 0pt] {
  Table 1 \\ \hline
  \ldots \\
  \ldots \\
  \ldots \\
  \ldots \\
  }; 
  \matrix (T2) [matstyle, right = of T1]{
    Table 2 \\ \hline
    \ldots \\
    \ldots \\
    \ldots \\
  };
  \draw (T1-3-1.east) to[-|-=.5] (T2-2-1.west);
\end{tikzpicture}

\end{document}

边界不必要的宽。

如何解决这个问题?边框应与矩阵中节点的边缘对齐,因此箭头的尾部和头部只会接触矩阵的边缘,而不会穿过边框。此外,节点中的文本需要左对齐。

另外,在 TikZ 矩阵中,标题行下划线的实际方法是什么?我的方法似乎有点笨拙。

答案1

Amatrixnode,因此,它inner sep在边界和内容之间引入了 。您可以修复inner sep=0pt,但在这种情况下,inner sep内部节点中也是0pt。因此,您应该在nodes声明中再次修复它。

matrix与矩阵内部分离的情况无关,您正在内部节点之间绘制箭头。如果使用(T1和) 作为参考,则可以避免这种不良影响T2

下面的代码解决了(我希望如此!)这两个问题:

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{positioning,arrows,matrix,calc}

\tikzset{
  -|-/.style={
    to path={
      (\tikztostart) -| ($(\tikztostart)!#1!(\tikztotarget)$) |- (\tikztotarget)
      \tikztonodes
    }
  },
  -|-/.default=0.5,
  |-|/.style={
    to path={
      (\tikztostart) |- ($(\tikztostart)!#1!(\tikztotarget)$) -| (\tikztotarget)
      \tikztonodes
    }
  },
  |-|/.default=0.5,
}


\begin{document}

\begin{tikzpicture}[
  ->, >=stealth,
  thick,
  matstyle/.style={
      matrix of nodes,
      draw,
      inner sep=0pt,
      nodes={draw=none, align= left, minimum width= 3cm, inner sep=.3333em}
    }
  ]

  \matrix (T1) [matstyle, column sep= 0pt] {
  Table 1 \\ \hline
  \ldots \\
  \ldots \\
  \ldots \\
  \ldots \\
  }; 
  \matrix (T2) [matstyle, right = of T1]{
    Table 2 \\ \hline
    \ldots \\
    \ldots \\
    \ldots \\
  };
  \draw ([yshift=-1mm]T1.east) to[-|-=.5] ([yshift=1mm]T2.west);
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容