
Tengo este diagrama que visualiza la interrelación de varias reacciones que extienden Xi a las tareas de los reactores R101 y R102, dictando en consecuencia la relación de reciclaje R, purga y flujo de reposición. Después de jugar con mi primer borrador durante unas horas, todavía no estoy del todo satisfecho con el resultado:
Ese es mi código. Se agradecen mucho las sugerencias de mejora.
\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}
Respuesta1
Sólo para mostrar esoMetapostTambién está disponible, aquí tienes una versión con un diseño diferente. ¿Te gusta más esto? ¿Esto muestra lo que necesitas?
\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}
Compila esto con lualatex
.
Respuesta2
Como solicita una mejora del código, tengo algunas sugerencias:
- Deberías usar
\tikzset
en lugar de\tikzstyle
. Leer másaquí. - TikZ ya te ofrece la opción
scale
, por lo que su uso\scalebox
no es muy TikZ-ish. - Poner un
scope
dóndexshift=0cm
es innecesario. - La distancia entre "maquillaje" y la flecha no es la misma que entre "purga" y la flecha. Es menor pero deberíamos solucionarlo.
- La flecha curva de "R101" parece bajar un poco antes de llegarξ3 . La flecha curva hacia "R102" parece subir un poco antes de descender.
Por cierto, me gustaría mostrarles mi código para esa figura. No uso todos \node
los s, es decir, los comandos deberían ser más comprensibles ( \draw
significa dibujar algo y \node
significa que hay algunos nodos en los que insertar). Además, esto no utiliza coordenadas cartesianas/polares.que difiere TikZ de otras herramientas gráficas.
\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}