Latex에서 TikZ를 사용하여 블록 다이어그램을 만드는 중 문제 발생

Latex에서 TikZ를 사용하여 블록 다이어그램을 만드는 중 문제 발생

나는 어리석은 문제에 직면하고 있습니다. 마지막 두 상자를 연결할 수 없는 것 같습니다. 그리고 나도 갖고 싶어 |.| 상자 중 하나에 있지만 어떻게 완료되었는지 모르겠습니다. 누군가 나를 도와줄 수 있나요?

\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로 표시된 마지막 블록에는 이름이 있으며 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는 나에게 매우 친숙합니다 :-)
  • MWE에서 사용하는 코드를 분석해야 합니다. 그러면 마지막 노드의 이름이 A-9( A-8mwe에 언급한 것과는 다릅니다)
  • 예를 들어 가장 일반적인 크기의 경우 기본 크기로 선택해야 하며 block/.default=22mm나머지 경우에만 원하는 텍스트 너비를 작성해야 합니다(정말 다른 노드 크기가 필요합니까? 저는 18mmnad 만 사용하겠습니다 9mm. 아래 mwe 참조).
  • 텍스트로 노드에 작성할 수 있는 수학 표현식(예: $|\cdot|$)
  • *사용하지 마세요 \resizebox{16cm}{.... 이미지의 모든 크기를 조정하고 이미지를 보기 흉하게 만듭니다. 오히려 노드 너비와 노드 거리의 합이 16cm가 되도록 다시 계산합니다.

    14mm + 12mm + 22mm + 15mm + 22mm + 22mm +12mm +24mm +24mm + 9x2x(내부 간격) +8*(노드 거리)=318 mm

    거의 두 배 정도 긴 것입니다. 모든 이미지 요소 길이를 절반으로 줄이고(아래 mwe 참조) 더 작은 글꼴 크기를 사용하는 것이 좋습니다 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}

여기에 이미지 설명을 입력하세요

이미지를 그리는 데는 많은 인내심과 정확성, 시간이 필요합니다.

관련 정보