下列:
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{graphs, graphs.standard, quotes}
\begin{document}
\begin{tikzpicture}
\graph[grid placement, n = 4, chain shift = {(2,0)}, group shift = {(0,-2)},
math nodes, nodes = {circle, draw, thick}, edges={very thick}] {
%subgraph I_n[V={s_1, s_2, s_3, s_4}],
s_1["$P,Q$" left],
s_2["$P, \neg Q$" right],
s_3["$\neg P, Q$" left],
s_4["$\neg P, \neg Q$" right],
s_1 -> s_3,
s_4 -> s_2,
s_3 -> {s_3[>loop below], s_4},
s_2 -> {s_2[>loop above], s_1}
};
\end{tikzpicture}
\end{document}
可以正常工作。但是,如果我取消注释subgraph I_n
,就会出现许多错误,如下所示:
Missing \endcsname inserted. }
虽然无论如何都会产生相同的视觉输出。因此,无论出于何种原因,使用引号指定节点标签引用节点导致问题。
但我可以进一步追溯原因。以下是:
\graph[grid placement, n = 4, chain shift = {(2,0)}, group shift = {(0,-2)},
math nodes, nodes = {circle, draw, thick}, edges={very thick}] {
subgraph I_n[V={s_1, s_2, s_3, s_4}],
s_1["$P,Q$" left],
s_2["Some Label" right],
s_3["Label" left],
s_4["$0^0$" right],
s_1 -> s_3,
s_4 -> s_2,
s_3 -> {s_3[>loop below], s_4},
s_2 -> {s_2[>loop above], s_1}
};
确实有效。
问题似乎只发生在引用节点上的引号标签内使用命令时。是的,即使使用非数学命令,我也检查了这一点。
在进一步阅读文档后,我意识到我所做的事情根本不应该起作用,因为我,
在引号中已经这样做了,它必须被包围{}
。而且,如果像这样正常使用,它不起作用\node
。这本身就很奇怪,因为明显错误的东西至少部分起作用了。
然而,这:
\graph[grid placement, n = 4, chain shift = {(2,0)}, group shift = {(0,-2)},
math nodes, nodes = {circle, draw, thick}, edges={very thick}] {
subgraph I_n[V={s_1, s_2, s_3, s_4}],
s_1["{$P,Q$}" left],
s_2["{$P, \neg Q$}" right],
s_3["{$\neg P, Q$}" left],
s_4["{$\neg P, \neg Q$}" right],
s_1 -> s_3,
s_4 -> s_2,
s_3 -> {s_3[>loop below], s_4},
s_2 -> {s_2[>loop above], s_1}
};
仍然不起作用。
您可能想知道为什么这是个问题,因为我的第一个示例展示了解决方案。但是,这不是真正的解决方案。想象一下,您正在创建一个大型图表,然后您可能想要使用类似的东西subgraph I_n
,然后只标记其中一个节点。但你不能这样做,因为它不起作用。
实际的解决方案应该是这样的:
\node["{$P, \neg Q$}" right] at (s_2) {};
或者
\node[circle, "{$P, \neg Q$}" right] at (s_2) {};
但对于这个例子,在两种情况下,标签都太近了。因此,如下所示:
\node[anchor=west, xshift=12pt] at (s_2) {$P, \neg Q$};
看起来这是更好的方法。
现在我说了很多绕弯子的话。我的问题是:有人能解释为什么会发生这种奇怪的行为吗?我想原因可能与图解析有关。并且:它真的能以某种方式解决吗,而无需任何解决方法(因此,实际上在图中和引用的节点上使用引号标签语法)?
编辑:
\graph[grid placement, n = 4, chain shift = {(2,0)}, group shift = {(0,-2)},
math nodes, nodes = {circle, draw, thick}, edges={very thick}] {
s_1["{$P,Q$}" left],
s_2["{$P, \neg Q$}" right],
s_3["{$\neg P, Q$}" left],
s_4["{$\neg P, \neg Q$}" right],
subgraph I_n[V={s_1, s_2, s_3, s_4}],
s_1 -> s_3,
s_4 -> s_2,
s_3 -> {s_3[>loop below], s_4},
s_2 -> {s_2[>loop above], s_1}
};
这是解决问题的另一种方法,但我关于引用节点的问题仍然存在。