CS 스트링 다이어그램을 어떻게 그릴 수 있나요?

CS 스트링 다이어그램을 어떻게 그릴 수 있나요?

아래 그림과 같이 문자열 다이어그램(물리학 문자열이 아닌 CS 문자열)을 렌더링하는 특정 패키지가 있습니까?

문자열 다이어그램

아니면 그런 그림을 어떻게 만들까요? (매우) 최소한의 예를 들어주실 수 있나요?

답변1

로 수행하는 방법은 다음과 같습니다 Tikz.

기본 아이디어:

  • 선을 좀 그어라
  • \node아래 라벨에 몇 가지를 입력하세요.
  • \draw위의 일부 장식된 경로
  • coordinate이러한 작업을 지원하기 위해 관련 항목을 기억하세요.
  • /.style코드를 단순화하고 한 곳에서만 매개변수를 변경할 때 s를 정의하세요 .
  • 초보자가 따라하기가 그리 어렵지 않은 균형 잡힌 접근 방식을 시도하고 더 좋은 코드를 위해 일부 경로 기능을 사용합니다.

결과

윤곽:

첫 번째를 소화해 봅시다.

    \draw[bar] (0,0) coordinate (A) -- (1.5,0)  coordinate (B) node[a]{$a$};

먼저 절대 좌표로 간단한 선을 그리는 것을 생각해 보십시오.

    \draw (0,0) -- (1.5,0);

Tikz세미콜론으로 끝나는 경로에 관한 것이므로 경로 가 끝나기 전에 ;노드를 삭제하면서 노드를 추가할 수 있습니다 . \따라서 이것은 (1.5,0)에 도착한 후 텍스트(레이블)가 있는 노드를 배치합니다. 이는 a수학 모드와 같은 일부 스타일의 텍스트를 허용합니다 $a$.

    \draw (0,0) -- (1.5,0) node[a]{$a$};

선 앞에 스타일 정보를 입력하고 여기에 무엇을 그릴지 자세히 지정하려면 시작 부분의 스타일 섹션에 남겨두세요.

    \draw[bar] (0,0) -- (1.5,0) node[a]{$a$};

마지막으로 \coordinate특정 위치를 기억하기 위해 경로에 명령문을 추가하고, \그릴 경로가 여전히 동일하므로 삭제합니다. 여기 있습니다:

    \draw[bar] (0,0) coordinate (A) -- (1.5,0)  coordinate (B) node[a]{$a$};

다른 경로는 상대 이동 --++(1.5,0), 절대 좌표의 혼합을 사용하고 여기서 5mm로 정의된 해당 노드의 최소 너비에 대한 지식을 사용하여 유사하게 만들어집니다. 확실히 이것은 더 체계적으로 수행될 수 있습니다.

아래 라벨:

    % ~~~ labels below ~~~~~~~~~~
    \node[mth] at                (A) {$1$};
    \node[mth] at ([xshift=-2.5mm]C) {$f(i) + 1$};

이것은 매우 간단합니다. 첫 번째 줄은 스타일을 사용하여 $1$기억된 위치에 텍스트를 배치하는데 , 이는 해당 텍스트를 y 방향으로 약간 아래쪽으로 이동시킵니다.(A)mth

$a$두 번째는 내가 했던 방식 으로 노드를 배치함으로써 발생하는 몇 가지 복잡함을 제외하면 매우 유사합니다 . 따라서 위치를 수정하는 한 가지 방법은 위치를 사용하여 (C)약간 뒤로 이동하는 것입니다(최소 너비의 절반).

([xshift=-2.5mm]C).

오버브레이스:

    % ~~~ labels above ~~~~
    \draw[decorate,blue] ([ys]A) -- ([ys]B) node[alf]{$\alpha$};
    \draw[decorate,blue] ([ys]D) -- ([ys]E) node[alf]{$\alpha$};

decoratetikz-library에서 제공하는 를 사용하면서 위의 개념을 결합합니다 decorations.pathreplacing.

  • 위(A)에서 위(B)까지 경로를 그립니다.
  • 버팀대로 대체합니다
  • 파란색으로
  • $\alpha$의 중간과 약간 위에 노드를 배치합니다.

스타일 블록:

 \begin{tikzpicture}[
    a/.style={anchor=west,minimum width=5mm},   % for the node containing "a"
    bar/.style={{Bar[]}-{Bar[]}},               % start- and end-tipps as Bars
    bar2/.style={-{Bar[]}},                     % only end-tipp as bar
    mth/.style={yshift=-5mm},                   % for placing the math-labels
    decoration=brace,                           % the overbrace
    alf/.style={midway,yshift=3mm},             % placing \alpha there
    ys/.style={yshift=5mm},                     % shortcut for these yshifts
 ]

적어도 나에게 있어 이 부분은 내가 진행하면서 발전한다. 예를 들면 다음과 같다:

  • 위에서 설명한 선 부분을 기억해 보세요.
  • 유용한 스타일 옵션을 직접 입력 draw하고node
  • 너무 길어요? 아니면 최소한 두 번은 필요합니까?
  • 그런 다음 유용한 이름을 지정하여 여기로 옮깁니다.
  • 나중에 여기에서 모든 라벨 이동 등을 쉽게 조정할 수 있습니다.

암호:

\documentclass[10pt,border=3mm,tikz]{standalone}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{decorations.pathreplacing}

\begin{document}
 \begin{tikzpicture}[
    a/.style={anchor=west,minimum width=5mm},   % for the node containing "a"
    bar/.style={{Bar[]}-{Bar[]}},               % start- and end-tipps as Bars
    bar2/.style={-{Bar[]}},                     % only end-tipp as bar
    mth/.style={yshift=-5mm},                   % for placing the math-labels
    decoration=brace,                           % the overbrace
    alf/.style={midway,yshift=3mm},             % placing \alpha there
    ys/.style={yshift=5mm},                     % shortcut for these yshifts
 ]
    % ~~~ lines ~~~~~~~~~~~~
    \draw[bar] (0,0) coordinate (A) -- (1.5,0)  coordinate (B) node[a]{$a$};
    \draw[bar] (2,0) coordinate (C) -- (3.5,0)  coordinate (D);
    \draw[bar2](3.5,0)              --++(1.5,0) coordinate (E) node[a]{$a$};
    \draw[bar] (5.5,0)              --++(1.5,0)                node[a]{$P$};
    
    % ~~~ labels below ~~~~~~~~~~
    \node[mth] at                (A) {$1$};
    \node[mth] at ([xshift=-2.5mm]C) {$f(i) + 1$};
    \node[mth] at                (D) {$i - f(i) + 1$};
    \node[mth] at ([xshift=+2.5mm]E) {$i + 1$};
    
    % ~~~ labels above ~~~~
    \draw[decorate,blue] ([ys]A) -- ([ys]B) node[alf]{$\alpha$};
    \draw[decorate,blue] ([ys]D) -- ([ys]E) node[alf]{$\alpha$};
    
 \end{tikzpicture}
\end{document}

관련 정보