CS ストリング ダイアグラムを描くにはどうすればよいでしょうか?

CS ストリング ダイアグラムを描くにはどうすればよいでしょうか?

下の図のようなストリング ダイアグラム (物理学のストリングではなく、CS のストリング) をレンダリングするための特定のパッケージは存在しますか?

ストリングダイアグラム

あるいは、そのような図をどのように作成しますか? (非常に) 最小限の例を挙げていただけますか?

答え1

これを行う方法は次の通りですTikz

基本的な考え方:

  • 線を引く
  • \node下のラベルにsをいくつか入れてください
  • \draw上には装飾された小道がいくつかある
  • coordinateこれらのアクションをサポートするために関連するsを覚えておいてください
  • /.styleコードを簡素化し、パラメータの変更を1か所だけで行えるように、define を使用します。
  • 初心者でも難しくないバランスの取れたアプローチを試み、より良いコードのためにパス機能を使用する

結果

行:

最初のものを消化してみましょう。

    \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

2 番目は、私が行った方法でノードを配置することによって多少の複雑さが生じていることを除けば、非常に似ています$a$。したがって、位置を修正する 1 つの方法は、 を使用し(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$};

decorateこれは、tikz ライブラリによって提供される を使用しながら、上記の概念を組み合わせます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
 ]

少なくとも私の場合、この部分は進むにつれて次のように発展していきます。

  • 上記の行部分を思い出してください
  • 便利なスタイルオプションを直接入力しdrawnode
  • 長すぎますか? それとも少なくとも 2 回必要になりますか?
  • 便利な名前を付けてここに移動してください
  • 後でラベルのシフトなどを簡単に調整できます

コード:

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

関連情報