如何解决 TikZ 与语法包之间的冲突?

如何解决 TikZ 与语法包之间的冲突?

如果我添加syntax包,编译器将产生错误:

最小示例

\documentclass[10pt,letterpaper]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}

\usepackage{tikz}
\usetikzlibrary{arrows,shapes,automata,backgrounds,petri,positioning}

\usepackage{syntax}

\begin{document}

    \begin{tikzpicture}[shorten >=1pt,node distance=2cm,on grid,auto]
        \node[state,initial]    (q_1)                           {$q_1$}; 
        \node[state,accepting]  (q_2)   [right=of q_1]          {$q_2$}; 
        \node[state]            (q_3)   [below right=of q_1]    {$q_3$}; 

        \path[->]
        (q_1) edge  [bend left]     node {a}            (q_2)
        (q_1) edge  [loop above]    node {b}            (q_1)
        (q_2) edge  [bend left]     node {a,b}          (q_3)
        (q_3) edge  [bend left]     node {a}            (q_2)
        (q_3) edge  [bend left]     node {b}            (q_1);

        \node [below=1cm, align=flush center,text width=8cm] at (q_3)
        {
            $M_1$
        };
    \end{tikzpicture}
\end{document}

但如果我删除\usepackage{syntax},它就会成功编译。我想知道有没有办法解决这个问题?谢谢。

答案1

出现此问题的原因是,该包为了改善带下划线的代码排版,syntax将下划线 ( ) 设为有效。这会弄乱您的节点名称,并导致错误。_q_1

有两种方法可以解决这个问题:

  1. 避免在节点名(和文件名)中使用下划线。
  2. syntax使用选项加载包。您仍然可以在代码示例中nounderscore使用来获得漂亮的下划线排版。\_

相关内容