![绘制带有顶点/边的多行标签的图形?](https://linux22.com/image/235065/%E7%BB%98%E5%88%B6%E5%B8%A6%E6%9C%89%E9%A1%B6%E7%82%B9%2F%E8%BE%B9%E7%9A%84%E5%A4%9A%E8%A1%8C%E6%A0%87%E7%AD%BE%E7%9A%84%E5%9B%BE%E5%BD%A2%EF%BC%9F.png)
我一直在使用 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}。