이 다이어그램을 더 좋게 만드는 방법은 무엇입니까?

이 다이어그램을 더 좋게 만드는 방법은 무엇입니까?

다양한 반응의 상호 관계를 시각화하는 이 다이어그램은 반응기 R101 및 R102의 임무에 대한 Xi를 확장하여 결과적으로 재활용 비율 R, 퍼지 및 보충 흐름을 지시합니다. 몇 시간 동안 첫 번째 초안을 가지고 놀아본 후에도 여전히 결과에 만족하지 않습니다.

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

그게 내 코드야. 개선에 대한 제안을 높이 평가합니다.

\begin{figure}[!ht]
\centering
\scalebox{1.2}[1.2]{
\begin{tikzpicture}[node distance=2cm,>=stealth',bend angle=45,auto]
\tikzstyle{place}=[circle,thick,draw=blue!75,fill=blue!20,minimum size=6mm]
\tikzstyle{red place}=[place,draw=red!75,fill=red!20]
\tikzstyle{transition}=[rectangle,thick,draw=black!75,
          fill=black!10,minimum size=13mm]

\tikzstyle{every label}=[red]

\begin{scope}[xshift=0cm]

\node[] 
at (-4, -2)   (start) {};
\node[] 
at (4, -2)   (end) {};

\node [red place,tokens=0]
                  (w1')                                                {};
\node [place]     (c1') [below of=w1']                                 {};
\node [red place] (s1') [below of=c1',xshift=-15mm,label=left:$\xi_1$]      {};
\node [red place,tokens=0]
                  (s2') [below of=c1',xshift=15mm,label=right:$\xi_2$] {};


\node [transition] (e1') [left of=c1'] {}
  edge [post,bend left]                  (w1')
  edge [post]                            (s1')
  edge [pre]                             (s2')
  edge [pre]                             (c1')
  edge [pre,dotted]                      (start);


\node [transition] (l1') [right of=c1'] {}
  edge [post]                            (c1')
  edge [pre]                             (s1')
  edge [post]                            (s2')
  edge [pre,bend right] node[swap] {}    (w1')
  edge[post,dotted] (end);

\node[] 
at (-2, -2)   (c)  {R101};
\node[] 
at (2, -2)    (c2) {R102};
\node[red] 
at (0, +0.65) (c2) {$\xi_3$};
\node[blue] 
at (0, -1.35) (c2) {$R$};
\node[black] 
at (-5, -2)   (c2) {make-up};
\node[black] 
at (4.5, -2)  (c2) {purge};

\end{scope}

\end{tikzpicture}
 }
\end{figure}

답변1

단지 그것을 보여주기 위해메타포스트다른 레이아웃의 버전도 있습니다. 이게 더 마음에 드나요? 이것이 당신에게 필요한 것이 무엇인지 보여줍니까?

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

\documentclass[border=5mm]{standalone}
\usepackage{luatex85}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);

    path R, X[], reactor[];

    R  = fullcircle scaled 20 shifted 84 down;
    X1 = fullcircle scaled 20 shifted 42 up;
    X2 = fullcircle scaled 20 shifted 42 down;
    X3 = fullcircle scaled 20 shifted 84 up;

    reactor0 = unitsquare shifted -(1/2, 1/2) scaled 42;
    reactor1 = reactor0 shifted 63 left;
    reactor2 = reactor0 shifted 63 right;

    forsuffixes $=1,2:
        fill reactor$ withcolor 7/8 white;
        draw reactor$;
        label("R10" & decimal $, center reactor$);
    endfor

    fill R withcolor 3/4[blue, white];
    draw R withcolor 1/2 blue;
    label.top("$R$", point 2 of R) withcolor 1/2 blue;

    forsuffixes $=1,2,3:
        fill X$ withcolor 3/4[red, white];
        draw X$ withcolor 1/2 red;
        label.top("$\xi_{" & decimal $ & "}$", point 2 of X$) withcolor 1/2 red;
    endfor

    z1 = point -1/2 of reactor1 shifted 42 left;
    z2 = point  3/2 of reactor2 shifted 42 right;

    label.lft("make up", z1); drawarrow z1 -- point -1/2 of reactor1 dashed withdots scaled 1/2;
    label.rt ("purge", z2); drawarrow point 3/2 of reactor2 -- z2 dashed withdots scaled 1/2;

    forsuffixes $=X1,X3:
        drawarrow center reactor1 {up} .. {right} center $
            cutbefore reactor1 cutafter fullcircle scaled 22 shifted center $;
        drawarrow center $ {right} .. {down} center reactor2
            cutbefore $ cutafter reactor2 shifted 1 up;
    endfor

    forsuffixes $=R, X2:
        drawarrow center reactor2 {down} .. {left} center $
            cutbefore reactor2 cutafter fullcircle scaled 22 shifted center $;
        drawarrow center $ {left} .. {up} center reactor1
            cutbefore $ cutafter reactor1 shifted 1 down;
    endfor

endfig;
\end{mplibcode}
\end{document}

이것을 lualatex.

답변2

코드 개선을 요청하시면서 몇 가지 제안을 드립니다.

  1. \tikzset대신 사용해야 합니다 \tikzstyle. 더 읽어보세요여기.
  2. 케이Z는 이미 옵션을 제공 scale하므로 사용하는 것은 \scalebox그다지 Ti가 아닙니다.케이Z-ish.
  3. scope어디에 두는 것은 xshift=0cm불필요합니다.
  4. "메이크업"과 화살표 사이의 거리는 "퍼지"와 화살표의 차이와 동일하지 않습니다. 사소하지만 고쳐야 합니다.
  5. "R101"의 곡선 화살표는 도달하기 전에 약간 아래로 내려가는 것처럼 보입니다.ξ . "R102"로 향하는 곡선 화살표는 약간 올라가다가 내려가는 것 같습니다.

그런데 그 그림에 대한 내 코드를 보여드리고 싶습니다. 나는 모든 를 사용하지 않습니다 \node. 즉, 명령이 더 이해하기 쉬워야 합니다( \draw뭔가를 그리는 것을 의미하고 \node삽입할 일부 노드가 있다는 것을 의미합니다). 또한 이는 데카르트/극좌표를 사용하지 않습니다.Ti는 다르다케이다른 그래픽 도구의 Z.

\documentclass[tikz]{standalone}
\usetikzlibrary{positioning,arrows.meta}
\begin{document}
\begin{tikzpicture}[scale=1.2,-stealth]
\tikzset{
    reactor/.style={rectangle,thick,draw=black!75,fill=black!10,minimum size=13mm},
    place/.style={circle,thick,draw=blue!75,fill=blue!20,minimum size=6mm},
    red place/.style={place,draw=red!75,fill=red!20}
}
\node[place] (r) {} node[above=1em,blue!75] {$R$};
\node[reactor,left=1.5 cm of r] (101) {R101};
\node[reactor,right=1.5 cm of r] (102) {R102};
\node[red place,above=2 cm of r] (3) {};
    \draw (3) node[above=1em,red] {$\xi_3$};
\node[red place,below=1.5cm of 101.south east] (1) {};
    \draw (1) node[left=1em,red] {$\xi_1$};
\node[red place,below=1.5cm of 102.south west] (2) {};
    \draw (2) node[right=1em,red] {$\xi_2$};
\node[left=2cm of 101] (start) {make-up};
\node[right=2cm of 102] (end) {purge};
\draw (101)--(1);
\draw (1)--(102);
\draw (102)--(r);
\draw (r)--(101);
\draw (101) to[out=90,in=180] (3);
\draw (3) to[out=0,in=90] (102);
\draw (102)--(2);
\draw (2)--(101);
\draw[dotted] (start)--(101);
\draw[dotted] (102)--(end);
\end{tikzpicture}
\end{document}

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

관련 정보