使用 Latex 添加连接关系中外键的箭头

使用 Latex 添加连接关系中外键的箭头

如何在 LaTeX 中创建将外键连接到相应主键的箭头?

我想要实现的最终结果是:

在 LaTeX 中执行此操作的最佳方法是什么(我对这个主题还不熟悉。是否有一些实用的方法,或者最好在另一个程序中创建它并将其导入为图像(或 PDF?)

答案1

TikZ不幸的是,没有自动路由功能……因此,如果您希望这些箭头在文本周围移动,则必须手动执行。幸运的是,这并不难。我能想到的最简单的方法是将要链接的单词更改为TikZ节点,然后绘制连接它们的弧。您可以按照以下方式为您的示例执行此操作:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
        \noindent
    relation1(\tikz[remember picture]\node[inner sep=0pt] (1id) {\textbf{id}};, \tikz[remember picture]\node[inner sep=0pt] (1r2) {relation2\_id};, \tikz[remember picture]\node[inner sep=0pt] (1r3) {relation3\_id};, attribute1)\\[.5cm]
    relation2(\tikz[remember picture]\node[inner sep=0pt] (2id) {\textbf{id}};, \tikz[remember picture]\node[inner sep=0pt] (2r3) {relation3\_id};, attribute2)\\[.5cm]
    relation3(\tikz[remember picture]\node[inner sep=0pt] (3id) {\textbf{id}};, attribute3)
    \begin{tikzpicture}[overlay, remember picture]
        \path[draw,->] (1r2.south) ++(0,-.1) -- ++(0,-.2) -| ($(2id.north) + (0,.1)$);
        \path[draw,->] (1r3.south) ++(0,-.1) -- ++(0,-.2) -- ++(1,0) -- ++(0,-1) -| ($(3id.60) + (0,.1)$);
        \path[draw,->] (2r3.south) ++(0,-.1) -- ++(0,-.2) -| ($(3id.120) + (0,.1)$);
    \end{tikzpicture}
\end{document}

结果如下:

TikZ 关系

更新:为了完整性,我做了一个小补充。您可以通过将路径选项更改为 来接近图片中的样式(线条/箭头方向)[draw, thick, -latex]。再加上稍微修改线条位置,就会得到以下结果:

修改的 TikZ 关系

更新 2:回应您的评论,下划线和 等字母j使文本周围的框变大。为了解决这个问题,我们可以使用text height和的组合text depth。代码如下所示:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
        \noindent
        \tikzset{
            text depth=0ex,
            text height=1ex,
            inner sep=0pt,
        }%
    relation1(\tikz[remember picture]\node (1id) {\underline{id}};, \tikz[remember picture]\node (1r2) {relatjon2\_id};, \tikz[remember picture]\node (1r3) {relation3\_id};, attribute1)\\[.5cm]
    relation2(\tikz[remember picture]\node (2id) {\textbf{id}};, \tikz[remember picture]\node (2r3) {relation3\_id};, attribute2)\\[.5cm]
    relation3(\tikz[remember picture]\node (3id) {\textbf{id}};, attribute3)
    \begin{tikzpicture}[overlay, remember picture]
        \path[draw,thick,-latex] (1r2.south) ++(0,-.1) -- ++(0,-.2) -| ($(2id.north) + (0,.1)$);
        \path[draw,thick,-latex] (1r3.south) ++(0,-.1) -- ++(0,-.2) -- ++(1,0) -- ++(0,-.97) -| ($(3id.60) + (0,.1)$);
        \path[draw,thick,-latex] (2r3.south) ++(0,-.1) -- ++(0,-.2) -| ($(3id.120) + (0,.1)$);
    \end{tikzpicture}
\end{document}

还请注意此处的使用tikzset,可一次性设置所有节点的节点属性。生成的图像带有下划线idrelatjon

进一步修改 TikZ 关系

答案2

无需知道任何坐标。使用以下命令运行xelatex

\documentclass{article}
\usepackage{pst-node}
\parindent=0pt
\begin{document}

relation1(\textbf{id}, \rnode{t2}{relation2\_id}, \rnode{t3}{relation3\_id}, attribute1)\\[.7cm]
relation2(\rnode{mid}{\textbf{id}}, \rnode{mr3}{relation3\_id}, \rnode[r]{ma2}{attribute2) }\\[.7cm]
relation3(\rnode{bid}{\textbf{id}}, attribute3)
\psset{linecolor=red,linewidth=1.5pt,arrowscale=1.5,angleA=-90,angleB=90}
\ncangle{->}{t2}{mid}
\ncangle[nodesepB=0]{t3}{ma2}
\ncangle[angleA=90,angleB=90,nodesepA=0,armB=4mm,offsetB=1mm]{->}{ma2}{bid}
\ncangles[armA=3mm,offsetB=-1mm]{->}{mr3}{bid}
\end{document}

在此处输入图片描述

相关内容