假设我有一个类似下图的图形。我该如何在边上放置两个标签?例如,在这里我想命名边a
并保留一些与边相关的辅助信息。
\begin{figure}[b]
\centering
\begin{tikzpicture}
\SetUpEdge[lw = 1pt,
color = black,
labelcolor = white]
\SetVertexNoLabel
\GraphInit[vstyle=Normal]
\SetGraphUnit{3}
\tikzset{VertexStyle/.append style={fill}}
\Vertex{s}
\NO(s){a} \EA(a){b} \SO(b){c}
%\Edge[label={$a$}](s)(a) and the next line
\Edge[label={$\{g_1\}$}, labelstyle={left}](s)(a)
\Edge[label={$\{g_1\}$}, labelstyle={above}](a)(b)
\Edge[label={$\{g_1\}$}, labelstyle={right}](b)(c)
\end{tikzpicture}
\end{subfigure}
您需要软件包tkz-graph
来编译该文档。
答案1
我可以添加一些解释和其他解决方案。
首先,tkz-graph 是学校里用来画图的工具,一般一条边有一个标签,但我能理解有时需要使用两个标签。其次,我使用 xkeyval 作为键和选项,但做出实质性的东西时遇到了一些困难;你会发现语法有些不一致。在下一个版本中,我将使用 pgfkeys,我想我会得到更好的代码。
实际上,对于我的所有软件包,最简单的方法是使用 TikZ,当您遇到问题时,解决方案是添加:(如 Gonzalo 的代码)
\path (s)-- node [right]{$a$}(a);
最好的办法
抱歉,我忘记了我的个人密码:(
当你画一条边时,style
用于画出边,但labelstyle
会为标签添加额外的选项
\Edge[label={$\{g_1\}$}, labelstyle={left,label=right:$a$}](s)(a)
把主标签放进去后label=
,就可以在标签样式中添加另一个标签了!(我忘记了这种可能性!!
\documentclass{article}
\usepackage{tkz-graph}
\begin{document}
\begin{figure}[b]
\centering
\begin{tikzpicture}
\SetUpEdge[lw = 1pt,
color = black,
labelcolor = white]
\SetVertexNoLabel
\GraphInit[vstyle=Normal]
\SetGraphUnit{3}
\tikzset{VertexStyle/.append style={fill}}
\Vertex{s}
\NO(s){a} \EA(a){b} \SO(b){c}
\Edge[label={$\{g_1\}$}, labelstyle={left,label=right:$a$}](s)(a)
\Edge[label={$\{g_1\}$}, labelstyle={above}](a)(b)
\Edge[label={$\{g_1\}$}, labelstyle={right}](b)(c)
\end{tikzpicture}
\end{figure}
% or with a circle
\begin{tikzpicture}[rotate=-45]% needs another rotation here -45
\SetVertexNoLabel
\SetGraphUnit{3}
\GraphInit[vstyle=Normal]
\Vertices{circle}{c,b,a,s}
\Edge[label={left:$\{g_1\}$}, labelstyle={left,label=right:$a$,label=60:$b$}](s)(a)
\Edge[label={$\{g_1\}$}, labelstyle={above}](a)(b)
\Edge[label={$\{g_1\}$}, labelstyle={right}](b)(c)
\end{tikzpicture}
\end{document}
您可以添加多个标签,例如:
\Edge[label={left:$\{g_1\}$}, labelstyle={left,label=right:$a$,label=60:$b$}](s)(a)
更复杂的是使用LabelStyle
这样的
\documentclass{article}
\usepackage{tkz-graph}
\begin{document}
\begin{figure}[b]
\centering
\begin{tikzpicture}
\SetUpEdge[lw = 1pt,
color = black,
labelcolor = white]
\SetVertexNoLabel
\GraphInit[vstyle=Normal]
\SetGraphUnit{3}
\tikzset{VertexStyle/.append style={fill}}
\Vertex{s}
\NO(s){a} \EA(a){b} \SO(b){c}
{\tikzset{LabelStyle/.style={label=right:$a$}}%
\Edge[label={$\{g_1\}$}, labelstyle={left}](s)(a) }
%\path (s)-- node [right]{$a$}(a);
\Edge[label={$\{g_1\}$}, labelstyle={above}](a)(b)
\Edge[label={$\{g_1\}$}, labelstyle={right}](b)(c)
\end{tikzpicture}
\end{figure}
\end{document}
您可以看到我需要使用范围(TeX 的组)来限制样式的操作。
结果总是:
绘制图形的另一种方法
您可以\Vertices
与选项一起使用square
,该宏可以直接将顶点放置在一条线,一个三角形,一个正方形和一个圆形上。
\documentclass{article}
\usepackage{tkz-graph}
\begin{document}
\begin{tikzpicture}[rotate=45]
\SetVertexNoLabel
\SetGraphUnit{3}
\GraphInit[vstyle=Normal]
\Vertices{square}{c,b,a,s}
\Edge[label={left:$\{g_1\}$}, labelstyle={left,label=right:$a$,label=60:$b$}](s)(a)
\Edge[label={$\{g_1\}$}, labelstyle={above}](a)(b)
\Edge[label={$\{g_1\}$}, labelstyle={right}](b)(c)
\end{tikzpicture}
结论
1)请记住,tkz-graph 使用 TikZ,您可以使用 TikZ 的命令。
2)请记住,你可以使用 TeX 组本地修改每种样式
答案2
一种选择是使用两个\Edge
连接相同顶点的 s,每个顶点\Edge
可以包含自己的标签:
\documentclass{article}
\usepackage{tkz-graph}
\begin{document}
\begin{figure}[b]
\centering
\begin{tikzpicture}
\SetUpEdge[lw = 1pt,
color = black,
labelcolor = white]
\SetVertexNoLabel
\GraphInit[vstyle=Normal]
\SetGraphUnit{3}
\tikzset{VertexStyle/.append style={fill}}
\Vertex{s}
\NO(s){a} \EA(a){b} \SO(b){c}
\Edge[label={$\{g_1\}$}, labelstyle={left}](s)(a)
\Edge[label={$a$}, labelstyle={right}](s)(a)
\Edge[label={$\{g_1\}$}, labelstyle={above}](a)(b)
\Edge[label={$\{g_1\}$}, labelstyle={right}](b)(c)
\end{tikzpicture}
\end{figure}
\end{document}
或者您也可以使用任何有效的 TikZ 构造;例如:a 中的节点\path
:
\documentclass{article}
\usepackage{tkz-graph}
\begin{document}
\begin{figure}[b]
\centering
\begin{tikzpicture}
\SetUpEdge[lw = 1pt,
color = black,
labelcolor = white]
\SetVertexNoLabel
\GraphInit[vstyle=Normal]
\SetGraphUnit{3}
\tikzset{VertexStyle/.append style={fill}}
\Vertex{s}
\NO(s){a} \EA(a){b} \SO(b){c}
\Edge[label={$\{g_1\}$}, labelstyle={left}](s)(a)
\path (s) to node[label=right:$a$] {} (a);
\Edge[label={$\{g_1\}$}, labelstyle={above}](a)(b)
\Edge[label={$\{g_1\}$}, labelstyle={right}](b)(c)
\end{tikzpicture}
\end{figure}
\end{document}
或者简单地说\node
:
\documentclass{article}
\usepackage{tkz-graph}
\usetikzlibrary{calc}
\begin{document}
\begin{figure}[b]
\centering
\begin{tikzpicture}
\SetUpEdge[lw = 1pt,
color = black,
labelcolor = white]
\SetVertexNoLabel
\GraphInit[vstyle=Normal]
\SetGraphUnit{3}
\tikzset{VertexStyle/.append style={fill}}
\Vertex{s}
\NO(s){a} \EA(a){b} \SO(b){c}
\Edge[label={$\{g_1\}$}, labelstyle={left}](s)(a)
\node[xshift=3mm] at ($ (s)!0.5!(a) $) {$a$};
\Edge[label={$\{g_1\}$}, labelstyle={above}](a)(b)
\Edge[label={$\{g_1\}$}, labelstyle={right}](b)(c)
\end{tikzpicture}
\end{figure}
\end{document}