我正在尝试使用 tikz 绘制状态转换,并将这些转换的原因放在状态之间的箭头上。问题是文本没有与箭头对齐,虽然这本身并不可怕,但会发生以下情况(确实如此)。
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{automata,positioning,arrows}
\begin{document}
\begin{tikzpicture}[shorten >=2pt,node distance=4cm,on grid,auto]
\node[state] (Rd) {Ready};
\node[state] (Rn) [above right =of Rd] {Run};
\node[state] (Bl) [below right =of Rd] {Blocked};
\node[state] (Nr) [below right =of Rn] {Dead};
\path[->]
(Rd) edge node {Given a timeslice} (Rn)
(Rd) edge node {Asks for I/O} (Bl)
(Rd) edge node {Gets killed by kernel} (Nr)
(Bl) edge node {Out of memory} (Nr);
\end{tikzpicture}
\end{document}
将选项添加[midway,sloped]
到路径选项中会出现以下内容,因此更接近,但仍然是错误的:
我怎样才能让文本自动旋转到箭头“上”(就在箭头的上方或下方和平行,如果重要的话,就不会出现循环)。
我在看使用 tikz 在弯曲箭头内绘制弯曲文本(多行),但在某些情况下无法让它发挥作用。
答案1
您可以使用选项sloped, anchor=center
:
代码:
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{automata,positioning,arrows}
\begin{document}
\begin{tikzpicture}[shorten >=2pt,node distance=4cm,on grid,auto]
\node[state] (Rd) {Ready};
\node[state] (Rn) [above right =of Rd] {Run};
\node[state] (Bl) [below right =of Rd] {Blocked};
\node[state] (Nr) [below right =of Rn] {Dead};
\path[->]
(Rd) edge node[sloped, anchor=center, above, text width=2.0cm] { Given a timeslice} (Rn)
(Rd) edge node[sloped, anchor=center, below] {Asks for I/O} (Bl)
(Rd) edge node {Gets killed by kernel} (Nr)
(Bl) edge node {Out of memory} (Nr);
\end{tikzpicture}
\end{document}