如何绘制 tikz 初始箭头,如大于号

如何绘制 tikz 初始箭头,如大于号

我目前正在使用该tikz库在 Latex 中绘制一些自动机的状态图,并且我目前正在努力自定义我的起始箭头。默认的起始箭头虽然很清晰,但不是我想要的。我希望能够使用基本上大的大于号 (>) 来指示初始节点而不是箭头。我知道有办法做到这一点,因为我的教科书(语言和机器,Sudkamp 第 3 版)有这些漂亮的乳胶图纸,具有这个确切的功能:

在此处输入图片描述

这与我的绘图类似,但没有相同的起始箭头:

在此处输入图片描述

我可以意识到他可能用 的某种变体更改了循环的箭头>=latex,但我不知道如何initial像他那样自定义箭头。有没有简单的方法可以像这样用 自定义起始箭头tikz,尤其是用,tikzset这样就不必在每次绘图中都重新做一次?我的代码(用于生成第二幅图像)目前

\documentclass[12pt]{article}

\usepackage[left=1in, right=1in, top=1in, bottom=1in]{geometry}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{bm}
\usepackage{tikz}
\usepackage{mathtools}
\usetikzlibrary{automata,positioning,arrows,calc}

% (failed attempts to replicate Sudkamp's arrow commented out below)
%\tikzset{initial text={}}
%\tikzset{initial distance=0.01cm}

\begin{document}

  \begin{center}
    \begin{tikzpicture}[shorten >=1pt, node distance=3cm,auto,]
      \node[state,initial] (q0) {$q_0$};
      \node[state] (q1) [right of=q0] {$q_1$};
      \node[state,accepting] (q2) [below of=q1] {$q_2$};
      \path[->] (q0) edge [loop above] node {a} ()
                (q0) edge node {b} (q1)
                (q1) edge node {a} (q2)
                (q1) edge [loop above] node {b} (q1)
                (q2) edge [loop right] node {a} ()
                (q2) edge node {b} (q0);
     \end{tikzpicture}
     \end{center}
   \end{document}

答案1

请告诉我这是否是您想要的(我不确定我是否理解了您的问题)。

我在手册中搜索了一下tikz,最接近第一张图片中第一个箭头的箭头似乎是Classical TikZ Rightarrow

如果您想要像第一张图片中那样的其他箭头,请使用-Stealth

arrows已被弃用,请改用arrows.meta

\documentclass[12pt]{article}

\usepackage[left=1in, right=1in, top=1in, bottom=1in]{geometry}
\usepackage{mathtools, amssymb}
\usepackage{bm}
\usepackage{tikz}
\usetikzlibrary{automata,positioning,arrows.meta,calc,decorations.markings}

\begin{document}
    \begin{center}
        \begin{tikzpicture}[shorten >=1pt, node distance=3cm,auto,]
        \node[state] (q0) {$q_0$};
        \path[decoration={markings,mark=at position 1 with \arrow{Classical TikZ Rightarrow[length=2mm]}}, decorate] (q0.west);
        \node[state] (q1) [right of=q0] {$q_1$};
        \node[state,accepting] (q2) [below of=q1] {$q_2$};
        \path[->] (q0) edge [loop above] node {a} ()
        (q0) edge node {b} (q1)
        (q1) edge node {a} (q2)
        (q1) edge [loop above] node {b} (q1)
        (q2) edge [loop right] node {a} ()
        (q2) edge node {b} (q0);
        \end{tikzpicture}
    \end{center}
\end{document}

在此处输入图片描述

否则,画两条简单的线,我也在Stealth这里使用了技巧,向您展示区别:

\documentclass[12pt]{article}

\usepackage[left=1in, right=1in, top=1in, bottom=1in]{geometry}
\usepackage{mathtools, amssymb}
\usepackage{bm}
\usepackage{tikz}
\usetikzlibrary{automata,positioning,arrows.meta}

\begin{document}
    \begin{center}
        \begin{tikzpicture}[shorten >=1pt, node distance=3cm,auto]
        \node[state] (q0) {$q_0$};
        \draw (q0.west) -- ++(-2mm,2mm);
        \draw (q0.west) -- ++(-2mm,-2mm);
        \node[state] (q1) [right of=q0] {$q_1$};
        \node[state,accepting] (q2) [below of=q1] {$q_2$};
        \path[-Stealth] (q0) edge [loop above, >=Stealth] node {a} ()
        (q0) edge node {b} (q1)
        (q1) edge node {a} (q2)
        (q1) edge [loop above, >=Stealth] node {b} (q1)
        (q2) edge [loop right, >=Stealth] node {a} ()
        (q2) edge node {b} (q0);
        \end{tikzpicture}
    \end{center}
\end{document}

在此处输入图片描述

PS = Zarko 提醒我mathtools已加载amsmath,我已将后者从我的 MWE 中删除。

答案2

简单使用符号$>$怎么样?

\documentclass[12pt]{article}
\usepackage[left=1in, right=1in, top=1in, bottom=1in]{geometry}
\usepackage{mathtools, amssymb}
\usepackage{bm}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, automata, positioning, quotes}

\begin{document}
    \begin{center}
        \begin{tikzpicture}[auto,
            shorten > = 1pt, 
        node distance = 3cm and 3cm]
        \node[state] (q0) {$q_0$};
        \node[inner sep=0pt,outer sep=-1pt,left=0pt of q0.west]{$>$};
        \node[state] (q1) [right of=q0] {$q_1$};
        \node[state,accepting] (q2) [below of=q1] {$q_2$};
        \path[->] (q0) edge [loop above] node {a} ()
        (q0) edge ["b"] (q1)
        (q1) edge ["a"] (q2)
        (q1) edge [loop above, "b"] (q1)
        (q2) edge [loop right, "a"] ()
        (q2) edge ["b"] (q0);
        \end{tikzpicture}
    \end{center}
\end{document}

在此处输入图片描述

离题:\mathtools取代了amsmath,因此仅加载就足够了mathtools

相关内容