我想使用该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
Amatrix
是node
,因此,它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}