Como melhorar meu diagrama modal?

Como melhorar meu diagrama modal?

Estou escrevendo um artigo sobre lógica modal no qual muitas vezes precisarei desenhar um diagrama de 'mundos'. Cada mundo é representado por um ponto, que possui dois rótulos: o nome do mundo de um lado do ponto e algumas fórmulas proposicionais do outro lado. As setas conectam mundos diferentes e alguns mundos podem estar conectados a si mesmos.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}

\begin{document}
  \begin{tikzpicture}[scale=2]
    \coordinate (1) at (0,0);
    \coordinate (2) at (1,0);
    \coordinate (3) at (-60:1);
    \foreach\x in {1,2,3}{
      \node[fill,circle,inner sep=1pt, label=left:$w_\x$] (world\x) at (\x) {};
    }
    \node[right] at (1) {$\neg p, q$};
    \node[right] at (2) {$p, q$};
    \node[right] at (3) {$p, q$};
    \draw[->] (world2) to (world3);
    \draw[->] (world3) to (world1);
    \draw[->,min distance=10,in=60,out=120] (world2) to (world2);
  \end{tikzpicture}
\end{document}

Diagrama

Como novato no TikZ, não acho que minha primeira tentativa seja muito ruim, mas certamente pode ser melhorada. Por exemplo, acho que os rótulos estão muito próximos das setas e deve haver uma pequena 'lacuna' entre os pontos e o ponto inicial/final das setas.

Existem alguns truques para resolver as deficiências do meu diagrama? A configuração do meu código é boa o suficiente para ser usada em diagramas semelhantes futuros?

Responder1

Na verdadeéjá existe uma lacuna entre mundos e setas porque, eu acho, você está preenchendo, mas não desenhando os nós e, portanto, a largura da linha ainda está lá, mas não preenchida. Se você não quiser a lacuna, isso pode ser facilmente remediado adicionando drawnós.

Se, por outro lado, você quiser ummaiorlacuna, então você pode usar shorten >e/ou shorten <para a imagem (ou setas específicas, mas provavelmente você deseja consistência aqui).

Por exemplo, poderíamos tentar

\begin{tikzpicture}[scale=2, shorten >=.5pt, shorten <=.5pt]

para adicionar .5ptdistância entre os mundos e cada extremidade das setas.

Para as distâncias dos rótulos, eu estaria inclinado a criar todos os rótulos como rótulos e depois controlar sua distância globalmente usando label distancepara a imagem. Dessa forma, você garante consistência e flexibilidade, pois é fácil de alterar, se necessário.

Para fazer isso, poderíamos criar os nós e rótulos em uma única etapa usando duas variáveis ​​no loop: uma para a posição e outra para o rótulo. Podemos contar os mundos usando counte usar isso para criar o rótulo mundial padrão.

Por exemplo:

  \foreach \x/\j [count=\xno] in {(0,0)/{$\lnot p, q$},(1,0)/{$p, q$},(-60:1)/{$p, q$}}{
    \node [fill, circle, inner sep=1pt, label=left:$w_\xno$, label=right:\j] (world\xno) at \x {};
  };

Aqui \xestá a posição ( (0,0)para o primeiro mundo) e \jé o conjunto de fbfs ( $\lnot p, q$para o primeiro mundo). \xnomantém a contagem dos mundos ( 1para o primeiro mundo). Em seguida, o \node...comando cria o mundo, nomeia-o apropriadamente ( world1para o primeiro mundo) e coloca o nome do mundo à esquerda ( $w_1$para o primeiro mundo) e o conjunto de wffs à direita ( $\lnot p, q$).

Podemos definir a distância dos rótulos dos mundos modificando a configuração de tikzpicture:

\begin{tikzpicture}[scale=2, label distance=2pt, shorten >=.5pt, shorten <=.5pt]

ou poderíamos fazer isso para uma parte específica da imagem usando um, scopese necessário

\begin{scope}[label distance=5pt]
   ...
\end{scope}

Então o resultado fica assim:

mundos melhores

Código completo:

\documentclass[tikz,multi,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}[scale=2, label distance=2pt, shorten >=.5pt, shorten <=.5pt]
  \foreach \x/\j [count=\xno] in {(0,0)/{$\lnot p, q$},(1,0)/{$p, q$},(-60:1)/{$p, q$}}{
    \node [fill, circle, inner sep=1pt, label=left:$w_\xno$, label=right:\j] (world\xno) at \x {};
  };
  \draw [->] (world2) to (world3);
  \draw [->] (world3) to (world1);
  \draw [->, min distance=10,in=60,out=120] (world2) to (world2);
\end{tikzpicture}
\end{document}

informação relacionada