两个标签,一个边缘

两个标签,一个边缘

假设我有一个类似下图的图形。我该如何在边上放置两个标签?例如,在这里我想命名边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}

在此处输入图片描述

相关内容