Tikz:设置节点样式以在点的右侧显示文本

Tikz:设置节点样式以在点的右侧显示文本

我正在尝试使用 Tikz 库创建 LaTeX 文档,更具体地说是 E/R 图。我已经下载了tikz-er2附加库,但在属性显示方面遇到了问题。

在我的课堂上,我们一直使用不同的符号,将属性名称放在点的右边,并将实体链接到这个点。

我如何使用 tikz 样式来实现这一点?

编辑:这是我的代码的一个(非常)简化版本,可以很好地编译:

\documentclass[a4paper,12pt,landscape]{article}

\usepackage[landscape]{geometry}
\usepackage{graphicx}

\usepackage{tikz-er2}
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}

\begin{document}

\thispagestyle{empty}

\usetikzlibrary{positioning}
\usetikzlibrary{shadows}

\tikzstyle{every entity} = [top color=white, bottom color=blue!40, 
                            draw=blue!20!black!70, drop shadow, thin, rounded corners=2pt]
\tikzstyle{every attribute} = [shading=radial, inner color=white, outer color=yellow!50!gray!20!white, 
                               draw=yellow, node distance=1cm, drop shadow, thin,align=center]

\centering
\begin{tikzpicture}[node distance=1.5cm]

  \node[entity] (ent1) {Entity1};
  \node[attribute] (attr1) [right=of ent1] {\key{Attr1}} edge (ent1);

\end{tikzpicture}

\end{document}

上面的代码产生了这个图表:

在此处输入图片描述

但我正在尝试完成这样的事情:

在此处输入图片描述

答案1

最简单的方法是从属性节点中删除所有绘制样式,而对从属性到实体的边使用一种新样式,即在开头绘制一个小圆圈。一种方法是简单地使用“带圆圈的箭头” edge[O-]。另一种更可定制的方法如下。

我定义了一个名为的装饰draw circle,它在线的开头绘制一个圆圈。您可以根据需要设置圆圈的样式,也可以选择其大小:

\tikzset{
 draw circle/.style = {
   decoration = {show path construction,
     lineto code = {
       \filldraw[black,fill=white] (\tikzinputsegmentfirst) circle(4pt);
       }
    }, decorate,
 }
}

然后,您可以使用上述样式作为postaction边的样式。为了简化语法,我定义了一种新样式来执行此操作:

\tikzset{
   attr/.style = { postaction = {draw circle} }
}

您还需要删除属性节点的所有绘图样式:

\tikzset{
   every attribute/.style = {draw=none,node distance=1cm }
}

然后,在图表中简单使用:

  \node[attribute] (attr1) [right=of ent1] {\key{Attr1}} edge[attr] (ent1);

要得到:

结果

综合起来:

\documentclass[a4paper,12pt,landscape]{article}
\usepackage[landscape]{geometry}
\usepackage{graphicx}
\usepackage{tikz-er2}
\usepackage{verbatim}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{5pt}
\usetikzlibrary{positioning}
\usetikzlibrary{shadows,decorations.pathreplacing}

\begin{document}
\tikzset{
 draw circle/.style = {
   decoration = {show path construction,
     lineto code = {
       \filldraw[black,fill=white] (\tikzinputsegmentfirst) circle(4pt);
       }
    }, decorate,
 },
 attr/.style = { postaction = {draw circle} },
 every entity/.style = { top color=white, bottom color=blue!40,
                         draw=blue!20!black!70, drop shadow, thin, rounded corners=2pt },
 every attribute/.style =  { draw=none,node distance=1cm }
}
\begin{tikzpicture}

  \node[entity] (ent1) {Entity1};
  \node[attribute] (attr1) [right=of ent1] {\key{Attr1}} edge[attr] (ent1);

\end{tikzpicture}

\end{document}

相关内容