Tikz를 사용하여 다음 회로도를 그리는 방법은 무엇입니까?

Tikz를 사용하여 다음 회로도를 그리는 방법은 무엇입니까?
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\begin{document}
\tikzstyle{block} = [draw, fill=white, rectangle, 
    minimum height=3em, minimum width=6em]
\tikzstyle{sum} = [draw, fill=white, rectangle, node distance=1cm]
\tikzstyle{input} = [coordinate]
\tikzstyle{output} = [coordinate]

\begin{tikzpicture}[auto, node distance=2cm,>=latex']
\node [input, name=input] {};
\node [sum, right of=input] (sum) {S};
\node [block, right of=S] (E) {E};
\node [block, right of=E] (I) {I};
\node [block, above of=I] (J) {J};
\node [block, below of=J] (T) {T};

\node [output, below of=S] (output) {};
\node [output, below of=E] (output) {};
\node [output, below of=I] (output) {};
\node [output, right of=J] (output) {};
\node [output, right of=T] (output) {};

\draw [draw,->] (input) -- node {$A$} (S);
\draw [draw,->] (input) -- node {$\Lambda$} (S);
\draw [->] (S) -- node[name=$m \beta \left( \frac{I+l J}{N}  \right)$] {$m \beta \left( \frac{I+l J}{N}  \right)$} (E);
\draw [->] (S) -- node[name=$(1-m) \beta \left( \frac{I+l J}{N}  \right)$] {$m \beta \left( \frac{I+l J}{N}  \right)$} (I);
\draw [->] (E) -- node[name=k] {$k$} (I);
\draw [->] (I) -- node[name=n] {$k$} (J);
\draw [->] (I) -- node[name=$r_1$] {$r_1$} (T);
\draw [->] (J) -- node[name=$r_2$] {$r_2$} (T);
\draw [->] (T) -- node[name=$q\delta$] {$q\delta$} (E);
\draw [->] (T) -- node[name=$(1-q)\delta$] {$q\delta$} (S);

\draw [->] (s) -- node [name=$\mu$] {$\mu$}(output);
\draw [->] (E) -- node [name=$\mu$] {$\mu$}(output);
\draw [->] (I) -- node [name=$\mu+d_1$] {$\mu$}(output);
\draw [->] (J) -- node [name=$\mu+d_2$] {$\mu$}(output);
\draw [->] (T) -- node [name=$\mu$] {$\mu$}(output);

\end{tikzpicture}
\end{document}

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

답변1

약간의 잡초 제거 후 도착

\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{positioning}
\begin{document}

\begin{tikzpicture}[auto, node distance=2cm,>=latex,block/.style={draw, fill=white, rectangle, 
    minimum height=3em, minimum width=6em}]
 \node[block] (S) {S};
 \node[block, right=of S] (E) {E};
 \node[block, right=of E] (I) {I};
 \node[block, above right=of I] (J) {J};
 \node[block, below right=of I] (T) {T};
 %
 \draw[->] (S) -- ++ (0,2) -| node[pos=0.25,above]{$(1-m) \beta \left( \frac{I+l J}{N}  \right)$} (I); 
 \draw[->] (S) -- node[pos=0.5,below]{$m \beta \left( \frac{I+l J}{N}\right)$}(E);
 \draw[->] (E) -- node[pos=0.5,above]{$k$} (I);
 \draw[->] (E.90) -- ++ (0,0.5) node[right] {$\mu$};
 \draw[->] (I.20) -- node[pos=0.5,above,sloped] {$n$} (J.180);
 \draw[->] (I.-20) -- node[pos=0.5,below,sloped] {$r_1$} (T.180);
 \draw[->] (J) -- node[pos=0.5,right] {$r_2$} (T);
 \draw[->] (T.-135) -- ++ (0,-1) -| node[pos=0.25] {$q\delta$} (E);
 \draw[->] (T.-45) -- ++ (0,-2) -| node[pos=0.25] {$(1-q)\delta$} (S.-45);
 \draw[->] (S.-135) -- ++ (0,-1) node[below]{$\mu$};
 \draw[<-] (S.160) -- ++ (-1,0) node[left] {$\Lambda$};
 \draw[<-] (S.200) -- ++ (-1,0) node[left] {$A$};
 \draw[->] (T.0) -- ++ (1,0) node[right]{$\mu$};
 \draw[->] (J.0) -- ++ (1,0) node[right]{$\mu+d_2$};
\end{tikzpicture}
\end{document}

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

메모:

  1. \tikzstyle더 이상 사용되지 않습니다.
  2. 화살표 라이브러리도 마찬가지입니다.
  3. 그리고 사용하고 있던 위치 지정 구문.
  4. 노드에게이름그것은 공식입니다.
  5. 서로 다른 노드에 동일한 이름을 지정하는 것은 특별히 유용하지 않습니다.
  6. 이 코드는 더욱 최적화될 수 있습니다. 이는 우아함과 매우 명시적이어서 더 이해하기 쉬운 것 사이의 절충안을 시도한 것입니다.

관련 정보