我有以下自动机。
\begin{tikzpicture}[>=latex, >=stealth', auto, node distance=0.5cm and 1.5cm, semithick, initial text=]
\node[state, initial] (q0) {$q_{0}$};
\node[state] (q1) [above right = of q0] {$q_{1}$};
\node[state] (q2) [below right = of q0] {$q_{2}$};
\path[->, shorten >=1pt]
(q0) edge node {$a$} (q1)
(q0) edge [dashed] node {$a$} (q2)
;
\end{tikzpicture}
我想划掉一个过渡,这样它看起来就会像这样。
如何在过渡中间添加一个粗体红色十字?
答案1
您可以通过多种方式将某些内容添加到路径/直线(除了手动确定该点的位置)。
$a$
如您所知,您可以沿着边添加一个节点(如那些)。
你可以使用带有红色 X 的节点,即
\tikz\path[->, shorten >=1pt] (q0) edge node {$a$} (q1)
edge [dashed] node {$a$}
node[red, marking, sloped] {\Huge$\times$} (q2);
我已经将键设置marking
为相同,因为auto = false
您不希望将该节点放在线的左侧或右侧。
您还可以使用库cross out
的形状,可以通过使用通常的方法操纵节点的大小来shapes.misc
控制十字架的大小:inner xsep
,,,。inner ysep
minimum width
minimum height
\tikz\path[->, shorten >=1pt] (q0) edge node {$a$} (q1)
edge [dashed] node {$a$}
node[cross out, draw=red, marking, sloped, solid,
shorten >=0pt, inner ysep=.5em] {} (q2);
或者,如果用户界面方面可以多一点控制,pic
可以手动绘制十字线。在这里,我设置了一个名为的图片cross
,它接受一个可选参数,该参数指定线条的长度(一半),并使用键的值cross angle
来收紧该十字线的角度。
\tikz\path[->, shorten >=1pt] (q0) edge node {$a$} (q1)
edge [dashed] node {$a$}
pic[red, marking, sloped, cross angle=10] {cross} (q2);
由于您正在使用带有边缘的路径shorten >
,->
因此这些路径会传递给节点和图片,这就是为什么我必须对这些添加一些反向修正。
在你的实际文档中,你最好把所有这些都以一种漂亮的风格来表达,比如
\tikzset{
Cross/.style={
sloped, auto=false, shorten >=+0pt, shorten >=+0pt, arrows=-, solid, …}}
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{automata, positioning, arrows.meta, shapes.misc}
\tikzset{
marking/.style={auto=false},
cross angle/.initial=0,
cross/.pic={\draw[solid, arrows=-, shorten <=+0pt, shorten >=+0pt]
(225+\pgfkeysvalueof{/tikz/cross angle}:{#1})
--( 45+\pgfkeysvalueof{/tikz/cross angle}:{#1})
(135-\pgfkeysvalueof{/tikz/cross angle}:{#1})
--(315-\pgfkeysvalueof{/tikz/cross angle}:{#1});},
pics/cross/.default=2.5mm}
\tikzset{% just for this answer
every picture/.append style={
>=Stealth, auto, node distance=0.5cm and 1.5cm, semithick, initial text=},
every picture/.append code={
\node[state, initial] (q0) {$q_{0}$};
\node[state] (q1) [above right = of q0] {$q_{1}$};
\node[state] (q2) [below right = of q0] {$q_{2}$};}}
\begin{document}
\tikz\path[->, shorten >=1pt] (q0) edge node {$a$} (q1)
edge [dashed] node {$a$}
node[red, marking, sloped] {\Huge$\times$} (q2);
\tikz\path[->, shorten >=1pt] (q0) edge node {$a$} (q1)
edge [dashed] node {$a$}
node[cross out, draw=red, marking, sloped, solid,
shorten >=0pt, inner ysep=.5em] {} (q2);
\tikz\path[->, shorten >=1pt] (q0) edge node {$a$} (q1)
edge [dashed] node {$a$}
pic[red, marking, sloped, cross angle=10] {cross} (q2);
\end{document}