Latex で TikZ を使用してブロック ダイアグラムを作成する際の問題

Latex で TikZ を使用してブロック ダイアグラムを作成する際の問題

馬鹿げた問題に遭遇しています。最後の 2 つのボックスを接続できないようです。また、ボックスの 1 つに |.| を入れたいのですが、方法がわかりません。誰か助けてくれませんか?

\documentclass{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                fit,
                quotes}
\begin{document}

\resizebox{16cm}{2cm}{%
    \begin{tikzpicture}[auto,
    node distance = 12mm,
        start chain = A going right,
     block/.style = {draw, fill=white,
                     text width=#1, minimum height=10mm, align=center,
                     outer sep=0pt, on chain},
     block/.default = 18mm,
 container/.style = {draw, fill=gray!50,
                     inner xsep=2mm, inner ysep=7mm},
                        ]
\node   [block=14mm] {a};    % block name is A-1
\node   [block=12mm] {b};
\node   [block=22mm] {c};
\node   [block=15mm] {d};
\node   [block=22mm] {e};    % block name is A-4
\node   [block=22mm] {f};    % block name is A-6
\node   [block=12mm] {g};
\node   [block=24mm] {h};    % block name is A-8
\node   [block=24mm] {i};    % block name is A-8
%
\scoped[on background layer]
    \node [container, label={[anchor=north]joined},
           fit= (A-5) (A-6)] (container) {};
\draw [-Stealth]
    (A-1) edge  (A-2)    % text on arrow is between " and "
    (A-2) edge  (A-3)
    (A-3) edge  (A-4)
    (A-4) edge  (A-5)
    (A-5) edge  (A-6)
    (A-6) edge  (A-7);
    (A-7) edge (A-8);
    (A-8) edge (A-8);
    \end{tikzpicture}
    }
\end{document}

答え1

i でラベル付けされた最後のブロックには name がありA-9、セミコロンを入力する場合は、新しい描画コマンドを追加する必要があります。モジュロ バーのリクエストを正しく理解できたと思います。

\documentclass{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                fit,
                quotes}
\begin{document}

\resizebox{16cm}{2cm}{%
    \begin{tikzpicture}[auto,
    node distance = 12mm,
        start chain = A going right,
     block/.style = {draw, fill=white,
                     text width=#1, minimum height=10mm, align=center,
                     outer sep=0pt, on chain},
     block/.default = 18mm,
 container/.style = {draw, fill=gray!50,
                     inner xsep=2mm, inner ysep=7mm},
                        ]
\node   [block=14mm] {a};    % block name is A-1
\node   [block=12mm] {b};
\node   [block=22mm] {c};
\node   [block=15mm] {d};
\node   [block=22mm] {e~$|.|$};    % block name is A-4
\node   [block=22mm] {f};    % block name is A-6
\node   [block=12mm] {g};
\node   [block=24mm] {h};    % block name is A-8
\node   [block=24mm] {i};    % block name is A-9
%
\scoped[on background layer]
    \node [container, label={[anchor=north]joined},
           fit= (A-5) (A-6)] (container) {};
\draw [-Stealth]
    (A-1) edge  (A-2)    % text on arrow is between " and "
    (A-2) edge  (A-3)
    (A-3) edge  (A-4)
    (A-4) edge  (A-5)
    (A-5) edge  (A-6)
    (A-6) edge  (A-7)
    (A-7) edge (A-8)
    (A-8) edge (A-9);
    \end{tikzpicture}
    }
\end{document}

答え2

  • 問題の mwe は私にとって非常に馴染み深いものです :-)
  • A-9mwe で使用するコードを分析する必要があります。そうすると、最後のノードの名前が( A-8mwe でメモしたとおりではない) であることがわかります。
  • 最も一般的なサイズについては、たとえば、デフォルト サイズとして選択し、残りの部分についてのみ、希望するテキスト幅を記述する必要があります (本当にこれほど異なるノード サイズが必要ですか? 私はnadblock/.default=22mmのみを使用します。以下を参照してください)18mm9mm
  • ノード内にテキストと同じように記述できる数式、例: $|\cdot|$
  • * は使用しないでください\resizebox{16cm}{...。画像内のすべてのサイズが変更され、見苦しくなります。代わりに、ノードの幅とノードの距離を再計算して、それらの合計が 16 cm になるようにします。

    14mm + 12mm + 22mm + 15mm + 22mm + 22mm +12mm +24mm +24mm + 9x2x(内間隔) +8*(ノード距離)=318 mm

    ほぼ 2 倍の長さです。すべての画像要素の長さを半分にし (以下の例を参照)、フォント サイズを小さくすることをお勧めします。例footnotesize:

mwe では、ノード間の矢印にテキストを追加することは行われません。この場合、ライブラリjoinのマクロを使用してそれらを描画できます。chains

上記のコメントと提案を考慮すると、次のようになります。

\documentclass[margin=3mm]{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usetikzlibrary{arrows.meta,
                backgrounds,
                chains,
                fit,
                quotes}
\begin{document}

    \begin{tikzpicture}[
    node distance = 7mm,
        start chain = A going right,
     block/.style = {draw, fill=white,
                     text width=#1, minimum height=10mm, align=center,
                     font=\footnotesize, inner sep=1mm, outer sep=0pt,
                     on chain, join=by -Stealth},
     block/.default = 12mm,
 container/.style = {draw, fill=gray!50,
                     inner xsep=2mm, inner ysep=7mm},
                        ]
\node   [block=6mm] {a};    % block name is A-1
\node   [block=6mm] {b};
\node   [block]     {$|\cdot|$};
\node   [block=6mm] {d};
\node   [block]     {e};    % block name is A-4
\node   [block]     {f};    % block name is A-6
\node   [block=6mm] {g};
\node   [block]     {h};
\node   [block]     {i};    % block name is A-9
%
\scoped[on background layer]
    \node [container, label={[anchor=north]joined},
           fit= (A-5) (A-6)] (container) {};
    \end{tikzpicture}
\end{document}

注記: ノード間の矢印にラベルを付けたい場合は、joinブロック スタイル定義からオプションを削除し、画像に以下を追加する必要があります。

\draw [-Stealth]
    (A-1) edge ["$\alpha$"]    (A-2) 
    (A-2) edge ["$\beta$"]     (A-3)
    (A-3) edge ["$\gamma$"]    (A-4)
    (A-4) edge ["$\epsilon$"]  (A-5)
    (A-5) edge ["$\zeta$"]     (A-6)
    (A-6) edge ["$\theta$"]    (A-7)
    (A-7) edge ["$\iota$"]     (A-8)
    (A-8) edge ["$\kappa$"]    (A-9);

画像オプションに以下を追加します:

every edge quote/.append style = {font=\footnotesize}

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

画像を描くには、多くの忍耐、正確さ、そして時間が必要です...

関連情報