TikZ によるペンローズ グラフィカル表記

TikZ によるペンローズ グラフィカル表記

TikZ を使用してこのようなテンソル ネットワークを描画するにはどうすればよいですか? ここに画像の説明を入力してください

おそらく、それらにいくつかの言葉を追加します。

ここに画像の説明を入力してください

私は LaTeX には非常に慣れていますが、TikZ についてはまだ初心者です。この種の図形を広範囲に描画するつもりなので、そのテンプレートを知りたいと思っています。ありがとうございます!

編集

これまでやったことはこれです。指定された境界で線を接続する方法、ノードを配置する正しい方法 (相対位置または座標?)、指定された位置にトークンを配置する方法がわかりません。

\documentclass[tikz,multi,border=10pt]{standalone}
\usetikzlibrary{shapes.geometric,positioning}
\begin{document}
\begin{tikzpicture}
[
    triangle/.style = {regular polygon, regular polygon sides=3, draw=black, fill=green!60!black, inner sep=0pt, minimum size=2cm},
    border rotated/.style = {shape border rotate=180},
    rectangular/.style={fill=brown!80!black, rectangle, rounded corners = 5pt, draw=black, inner sep=0pt, minimum width=4.5cm, minimum height=1cm},
    square/.style={fill=blue!60!black, rectangle, draw=black, inner sep=0pt, minimum size = 1cm}
]

    \node[square] (1) {};
    \node[triangle, border rotated] (2) [below left = 1cm  of 1] {};
    \node[triangle, border rotated] (3) [below right = 1cm  of 1] {};
    \node[rectangular] (4) [below=3cm of 1] {};
    \node[square] (7) [below = 7cm of 1]{};
    \node[triangle] (5) [above left = 1cm  of 7] {};
    \node[triangle] (6) [above right = 1cm  of 7]{};

    \draw (2.35) -- +(0,0.2) -- (1);
    \draw (2.145) to [bend right=45] (5.215);
    \draw (3.145) -- +(0,0.2) -- (1);

\end{tikzpicture}
\end{document}

答え1

質問された 3 つのポイントをすべて理解できたかどうかはわかりません。たとえば、「トークン」が何を指すのかはわかりませんが、塗りつぶされた黒い円のことだと思います。

一般的に、相対的な配置を使用すると、後でコードを変更するのが簡単になります。たとえば、ダイアグラムに新しいものを追加したり、他のものを自動調整したりするのが簡単になります。ただし、これは実際には、特定のケースで何が最適に機能するかという問題です。多くの場合、たとえば 1 回限りの場合は絶対的な配置の方が迅速ですが、コードの柔軟性は低くなります。

図形が上書きされないようにtriangle名前を変更しました。triangulartriangle

以下のコードは、次の方法の 1 つを示しています。

  • 適切な点から三角形を結びます。
  • 適切な点から三角形を長方形に接続します。
  • 長方形に黒い円を追加します。
  • ラベル付きの曲線矢印を追加しますs'

うまくいけば、これにより、既存のものをさらに構築できるようになるはずです。

\documentclass[tikz,multi,border=10pt]{standalone}
\usetikzlibrary{shapes.geometric,positioning}
\begin{document}
\begin{tikzpicture}
[
    triangular/.style = {regular polygon, regular polygon sides=3, draw=black, fill=green!60!black, inner sep=0pt, minimum size=2cm},
    border rotated/.style = {shape border rotate=180},
    rectangular/.style={fill=brown!80!black, rectangle, rounded corners = 5pt, draw=black, inner sep=0pt, minimum width=4.5cm, minimum height=1cm},
    square/.style={fill=blue!60!black, rectangle, draw=black, inner sep=0pt, minimum size = 1cm}
]

    \node[square] (1) {};
    \node[triangular, border rotated] (2) [below left = 1cm  of 1] {};
    \node[triangular, border rotated] (3) [below right = 1cm  of 1] {};
    \node[rectangular] (4) [below=3cm of 1] {};
    \node[square] (7) [below = 7cm of 1]{};
    \node[triangular] (5) [above left = 1cm  of 7] {};
    \node[triangular] (6) [above right = 1cm  of 7]{};

    \draw (2.35) -- +(0,0.2) -- (1);
    \draw (2.145) .. controls +(-7.5mm,35mm) and +(-7.5mm,-35mm) .. (5.215);
    \draw (3.145) -- +(0,0.2) -- (1);
    \draw (5.-35) -- +(0,-0.2) -- (7);
    \draw (6.-145) -- +(0,-0.2) -- (7);
    \draw (3.35) .. controls +(7.5mm,35mm) and +(7.5mm,-35mm) .. (6.-35);
    \draw (2.south) -- (4.north -| 2.south) (3.south) -- (4.north -| 3.south) (4.south -| 5.north) -- (5.north) (4.south -| 6.north) -- (6.north);

    \path (2.south) -- node [fill, circle] {} (5.north);
    \path (3.south) -- node [fill, circle] {} (6.north);
    \draw [<-] (4.north west) [bend right] to ++(-10mm,10mm) node [anchor=south] {$s'$};

\end{tikzpicture}
\end{document}

接続

関連情報