我正在尝试LaTeX
使用包automata
中的库来绘制 DFA 的状态图tikz
,但在绘制某些边时遇到了问题:每当边在两个节点之间对角线移动时,箭头似乎就会拒绝出现!
例如,此代码
\documentclass[12pt]{article}
\usepackage[left=1in, right=1in, top=1in, bottom=1in]{geometry}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{tikz}
\usepackage{mathtools}
\usetikzlibrary{automata,positioning,arrows}
\begin{center}
\begin{tikzpicture}[shorten >=1pt, node distance=2cm,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}
生产
除了节点 q2 和 q0 之间的边缺少指示路径从 q2 到 q0 的箭头之外,其他都很好。
事实上,如果我调整 q2 的位置,使其位于 q0 下方:
\node[state,accepting] (q2) [below of=q1] {$q_2$};
-> \node[state,accepting] (q2) [below of=q0] {$q_2$};
现在这条边的箭头画得很好,但是从 q1 到 q2 的边却缺少箭头!
我不确定这是否仅仅是 tikz 或我的编辑器的限制(我在 中使用 AuCTeX emacs
,在 中显示 pdf evince
),或者我只是没有正确绘制 tikzpicture。
有一个简单的解决办法吗?
答案1
我使用了以下测试:
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{automata,positioning,arrows,calc}
\begin{document}
\begin{center}
\begin{tikzpicture}[shorten >=1pt, node distance=2cm,auto]
\draw[->](0,0)--(7,7);
\draw[->] (0,0)--(7,0);
\draw[->] (0,0)--(7,2);
\draw[->] (0,0)--(7,3);
\draw[->] (0,0)--(7,4);
\draw[->] (0,0)--(7,5);
\draw[->] (0,0)--(7,5.5);
\draw[->] (0,0)--(7,6);
\draw[->](0,0)--(7,7);
\draw[->] (0,0)--(6,7);
\draw[->] (0,0)--(5,7);
\draw[->] (0,0)--(4,7);
\draw[->] (0,0)--(3.5,7);
\draw[->] (0,0)--(3,7);
\draw[->] (0,0)--(2,7);
\draw[->] (0,0)--(1,7);
\draw[->] (0,0)--(0,7);
\draw[->](0,0)--(-7,7);
\draw[->] (0,0)--(-7,0);
\draw[->] (0,0)--(-7,2);
\draw[->] (0,0)--(-7,3);
\draw[->] (0,0)--(-7,4);
\draw[->] (0,0)--(-7,5);
\draw[->] (0,0)--(-7,5.5);
\draw[->] (0,0)--(-7,6);
\draw[->](0,0)--(-7,7);
\draw[->] (0,0)--(-6,7);
\draw[->] (0,0)--(-5,7);
\draw[->] (0,0)--(-4,7);
\draw[->] (0,0)--(-3.5,7);
\draw[->] (0,0)--(-3,7);
\draw[->] (0,0)--(-2,7);
\draw[->] (0,0)--(-1,7);
\draw[->](0,0)--(-7,-7);
\draw[->] (0,0)--(-7,-2);
\draw[->] (0,0)--(-7,-3);
\draw[->] (0,0)--(-7,-4);
\draw[->] (0,0)--(-7,-5);
\draw[->] (0,0)--(-7,-5.5);
\draw[->] (0,0)--(-7,-6);
\draw[->](0,0)--(-7,-7);
\draw[->] (0,0)--(-6,-7);
\draw[->] (0,0)--(-5,-7);
\draw[->] (0,0)--(-4,-7);
\draw[->] (0,0)--(-3.5,-7);
\draw[->] (0,0)--(-3,-7);
\draw[->] (0,0)--(-2,-7);
\draw[->] (0,0)--(-1,-7);
\draw[->](0,0)--(7,-7);
\draw[->] (0,0)--(7,-2);
\draw[->] (0,0)--(7,-3);
\draw[->] (0,0)--(7,-4);
\draw[->] (0,0)--(7,-5);
\draw[->] (0,0)--(7,-5.5);
\draw[->] (0,0)--(7,-6);
\draw[->](0,0)--(7,-7);
\draw[->] (0,0)--(6,-7);
\draw[->] (0,0)--(5,-7);
\draw[->] (0,0)--(4,-7);
\draw[->] (0,0)--(3.5,-7);
\draw[->] (0,0)--(3,-7);
\draw[->] (0,0)--(2,-7);
\draw[->] (0,0)--(1,-7);
\end{tikzpicture}
\end{center}
\end{document}
zoom=125% 的结果是:
但缩放=175%:
其他经过测试的 pdf 查看器按预期工作。因此,这是一个与 TeX-LaTeX 无关的问题,并且是特定于查看器的问题,但我认为答案对于查看发生了什么以及何时发生很有用,因为 evince 是许多 Linux 发行版中的默认 pdf 查看器,并且许多 latex 用户使用 Linux。
另一个有同样问题的问题是:使用 TikZ 箭头指示两张图片之间的循环--缺少箭头
因此,当前是第一个的重复,我会将其标记为之前提到的重复。
我建议更改第一个标题,即使我们必须将其标记为离题(早期的),但不要删除它,因为许多 Linux 用户都会需要它。
我的示例显示的问题是,当缩放比例小于 175% 并且方向接近任何对角线方向时,箭头尖会消失。
离题:我将尝试使用这个答案来填补 evince 的一个错误,并且我将在下面添加链接,以便任何想说它影响他的人都可以说。