모달 다이어그램을 개선하는 방법은 무엇입니까?

모달 다이어그램을 개선하는 방법은 무엇입니까?

나는 '세계'의 다이어그램을 그려야 하는 모달 논리에 관한 논문을 쓰고 있습니다. 모든 세계는 점으로 표시되며 점의 한쪽에는 세계의 이름이, 다른 쪽에는 몇 가지 명제 공식이라는 두 개의 레이블이 있습니다. 화살표는 서로 다른 세계를 연결하며 일부 세계는 자신과 연결될 수 있습니다.

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

도표

TikZ 초보자로서 첫 시도가 아주 나쁘다고 생각하지는 않지만 확실히 개선될 수 있습니다. 예를 들어, 라벨이 화살표에 너무 가깝고 점과 화살표의 시작점/끝점 사이에 작은 '간격'이 있어야 한다고 생각합니다.

내 다이어그램의 단점을 해결할 수 있는 몇 가지 방법이 있나요? 내 코드 설정이 향후 유사한 다이어그램에 사용될 만큼 충분합니까?

답변1

실제로 거기~이다이미 세계와 화살표 사이에 간격이 있는 것 같습니다. 왜냐하면 채우고 있지만 노드를 그리지 않아서 선 너비는 그대로 있지만 채워지지 않았기 때문입니다. 간격을 원하지 않는 경우 draw노드에 추가하면 쉽게 해결할 수 있습니다.

반면에 원하는 경우더 큰간격이 있으면 그림(또는 특정 화살표, 그러나 여기서는 일관성을 원할 것임)에 shorten >및/또는를 사용할 수 있습니다 .shorten <

예를 들어, 다음을 시도해 볼 수 있습니다.

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

.5pt세계와 화살표의 각 끝 사이에 거리를 추가합니다 .

label distance레이블 거리의 경우 모든 레이블을 레이블로 만든 다음 그림을 사용하여 전역적으로 거리를 제어하고 싶습니다 . 이렇게 하면 필요한 경우 쉽게 변경할 수 있으므로 일관성과 유연성이 보장됩니다.

이를 위해 루프에서 두 개의 변수(위치용 변수와 레이블용 변수)를 사용하여 한 단계로 노드와 레이블을 생성할 수 있습니다. 우리는 이것을 사용하여 세계의 수를 유지 count하고 이를 사용하여 표준 세계 라벨을 만들 수 있습니다.

예를 들어:

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

여기에는 \x위치( (0,0)첫 번째 세계에 대한)와 \jwffs 집합( $\lnot p, q$첫 번째 세계에 대한)이 있습니다. \xno세계 수를 유지합니다( 1첫 번째 세계의 경우). 그런 다음 \node...명령은 세계를 생성하고 적절하게 이름을 지정 world1하고(첫 번째 세계의 경우) 세계의 이름을 왼쪽( $w_1$첫 번째 세계의 경우)에 배치하고 wff 세트를 오른쪽( $\lnot p, q$)에 배치합니다.

다음의 구성을 수정하여 세계와 레이블의 거리를 설정할 수 있습니다 tikzpicture.

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

scope또는 필요한 경우 를 사용하여 그림의 특정 부분에 대해 이 작업을 수행할 수 있습니다.

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

그러면 결과는 다음과 같습니다.

더 나은 세상

전체 코드:

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

관련 정보