绘制带有顶点/边的多行标签的图形?

绘制带有顶点/边的多行标签的图形?

我一直在使用 tikz-graph 绘制表示两部分协议的图形。现在我想向图形的某些节点添加注释(多行文本,在顶点的侧面)。我不确定该怎么做。我一直在向顶点添加标签并将它们放在外面LabelOut,但我无法使用多行文本。这是一个玩具/简约示例:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{arrows}
\usepackage{tkz-graph}

\usepackage{graphicx}  
\usepackage[T1]{fontenc}

\begin{document}

\begin{tikzpicture}
  \SetUpEdge[lw = 1.5pt,
             color=black,
             labelstyle = {sloped}]
  \SetVertexNoLabel
  \GraphInit[vstyle=Art]
  \tikzset{EdgeStyle/.style={post}}
  \tikzset{node distance = 6 cm}
  \SetVertexMath

  % Two top symbols, displayed as two invisible
  % vertices with visible labels:
  {\tikzset{VertexStyle/.style = {color=white,text=black}}
    \SetVertexLabel
    \Vertex[L=\alpha]{P}
    \SetVertexLabel
    \Vertex[position={right of=P}, L={\beta}]{X}}

  \tikzset{node distance = 1 cm}
  {\SetVertexLabel
   %%%
   %%% HERE: in the next line the label can't be split in two lines...
   \Vertex[LabelOut,Lpos=180,position={below of=P}, L={the protocol starts here}]{X1}
  }
  \tikzset{node distance = 2 cm}
  \SO(X1){X2}
  \SO(X2){X3}
  \tikzset{node distance = 6 cm}

  \EA(X1){A1}
  \EA(X2){A2}
  \Edge[label={220 ESMTP}](X1)(A1)
  \Edge[label={EHLO client-host}](A1)(X2)
  \Edge[label={250 DSN}](X2)(A2)
  \Edge[label={mail from: email-address}](A2)(X3)
\end{tikzpicture}
\end{document}

完成我想做的事情的通常且简单的方法是什么?

答案1

我是这个包的作者。好消息是 tkz-graph 和 tkz-berge 的新版本将于本周在 ctan 服务器上发布(实际上我正在编写文档),坏消息是我修改了一些宏。我不确定是否完全理解你想要什么,但答案是你可以把 TikZ 的代码放在你的代码中。

顶点是节点,因此您可以使用选项添加多个标签label=,如果要添加文本,可以使用选项text width

就像是 :

  \SO(P){X1}
  \node[text width=2cm,left=1cm] (X1){the protocol starts here};

另一种可能性:

\begin{tikzpicture}
{  \SetVertexNoLabel   
   \Vertex[style={label=60:A}]{A}}
 \SO[Lpos=180,
     LabelOut,
     L= {the protocol starts here},
     style={text width=2cm}](A){B}
 \end{tikzpicture}

但是还有其他方法可以做到这一点。您可以使用label。在您的代码中,您使用了“position”,这不是很好,因为使用“scale”有问题。

12 小时后,我将上传 tkz-graph 的新版本。新版本node distance已经过时,现在我添加了一个选项unit和一个宏\tkzGraphUnit=6来代替`\tikzset{node distance=6cm}。

相关内容