使用 xypic 绘制循环状态机

使用 xypic 绘制循环状态机

我想要绘制下图:

在此处输入图片描述

\documentclass[11pt,twoside,a4paper]{book}
\usepackage[margin=0.45in]{geometry}
\usepackage[all]{xy}


\begin{document}

\begin{figure}[ht]
 \[\xymatrix{&&&&& n+1 \ar[r]^{\sigma} & \dots \ar@{..}[dd]\\
0 \ar[r]_{\sigma} & 1 \ar[r]_{\sigma} & 2 \ar[r]_{\sigma}  \cdots &  n-1     \ar[r]_{\sigma} & n \ar[ru]^{\sigma} & &\\
&&&&&   n+m-1\ar[lu]^{\sigma}  & \ar[l]^{\sigma}\dots 
}\]
\caption{Cyclic State Machine}
\end{figure}

\end{document}    

得出的结果为:
在此处输入图片描述

这不是我想要的。我怎样才能画出我想要的图形?

答案1

我已经解决了我的问题:

\documentclass[11pt,twoside,a4paper]{book}
 \usepackage[margin=0.45in]{geometry}
\usepackage[all]{xy}


\begin{document}

\begin{figure}[ht]
 \[\xymatrix{&&&&& n+1 \ar[rr]^{\sigma} && \ar@{..}[dd]\\
0 \ar[r]_{\sigma} & 1 \ar[r]_{\sigma} & 2 \ar[r]_{\sigma}  \cdots &  n-1     \ar[r]_{\sigma} & n \ar[ru]^{\sigma} & &\\
&&&&&   **[r]n+m-1\ar[lu]^{\sigma}  & &\ar[l]^{\sigma}
}\]
\caption{Cyclic State Machine}
\end{figure}


\end{document}  

生产:

在此处输入图片描述

答案2

这是一个 TikZ 解决方案。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}
\begin{tikzpicture}[x=1mm,y=1mm]
\node (0) at (0,0) {0};
\node[right=of 0] (1) {1};
\draw[->,>=stealth] (0) -- node[auto, swap] {$\sigma$} (1);
\node[right=of 1] (2) {2};
\draw[->,>=stealth] (1) -- node[auto, swap] {$\sigma$} (2);
\node[right=of 2] (dots) {$\dots$};
\draw[->,>=stealth] (2) -- node[auto, swap] {$\sigma$} (dots);
\node[right=of dots] (predn) {$n-1$};
\draw[->,>=stealth] (dots) -- node[auto, swap] {$\sigma$} (predn);
\node[right=of predn] (n) {$n$};
\draw[->,>=stealth] (predn) -- node[auto, swap] {$\sigma$} (n);
\node[above right=5 of n] (sucn) {$n+1$};
\draw[->,>=stealth] (n) -- node[auto] {$\sigma$} (sucn.south west);
\node[below right=5 of n] (nm) {$n+m-1$};
\draw[<-,>=stealth] (n) -- node[auto, swap] {$\sigma$} (nm.north west);
\node[right=of nm] (offbot) {};
\draw[<-,>=stealth] (nm) -- node[auto, swap] {$\sigma$} (offbot);
\node at (offbot |- sucn) (offtop) {};
\draw[->,>=stealth] (sucn) -- node[auto] {$\sigma$} (offtop);
\draw[dotted,line width=1,shorten <=5, shorten >=5] (offbot) -- (offtop);
\end{tikzpicture}
\end{document}

一些解释性评论。

  • 加载该positioning库以便节点可以相对于彼此定位。

  • >=stealth键设置箭头尖的样式。

  • 关键auto是将 σ 标签与箭头保持“适当”的距离;否则,它们会位于箭头之上。

  • swap将 σ 标签放在箭头的另一侧(适当的位置)。

  • shorten >shorten <使给定线的两端稍微变短一些。

  • x |- y构造将新节点定位在节点的水平位置x和节点的垂直位置y

  • 括号中的诸如(0)(predn)(nm)只是名称,用于指代节点。

相关内容