划掉自动机的过渡

划掉自动机的过渡

我有以下自动机。

在此处输入图片描述

\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 ysepminimum widthminimum 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}

输出

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

相关内容