图表中引用节点上使用引号的节点标签问题

图表中引用节点上使用引号的节点标签问题

下列:

\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}
    };

这是解决问题的另一种方法,但我关于引用节点的问题仍然存在。

相关内容