Introduction
This answer provided a quick start to the kind of result you want, presenting some methods to organize your styles.
To organize our solution, let's divide it in 3 files:
- The main mew file:
mwe.tex; - The style file:
myTikzsetStyle.sty; - The TikZ draw file:
input_mwe_tikz.tex.
Please, save all of them in the same folder and compile the mwe.tex.
mwe.tex
The main file is simple, it calls the package tikz and its libraries; our own style file, and the chemfig package.
You may find more suitable packages for your chemicals, or draw them in another software and insert them as figures.
To make the insertion of the chemical figure more compact and easy to change in the future, I defined a command named \chemA. We just need to change its definition to change the result. This is the base concept, we will return to in the style file.
mwe.tex file
\documentclass{article} \usepackage{tikz} \usetikzlibrary{arrows} \usetikzlibrary{arrows.meta} \usetikzlibrary{calc} \usetikzlibrary{decorations} \usetikzlibrary{decorations.markings} \usetikzlibrary{shapes} \usetikzlibrary{shapes.misc} \usepackage{myTikzsetStyle} \usepackage{chemfig} \newcommand{\chemA}{ \chemfig{[:75]R-C(=[::+60]O)-[::-60]O-[::-60]C(=[::+60]O)-[::-60]R} } \begin{document} \input{input_mwe_tikz} \end{document}
myTikzsetStyle.sty
Style files are not only useful for organizing your code or text, but also for being reusable.
The last instruction of each tikzset defines the /.default style. The idea is always to define the /.default to be able to use the style without adding parameters all the time.
The tikzsets are:
addCross: adds an X on the figure you define for the node; addSum: same as addCross with a +; myBlock: defines the standard block, many variations are possible; mySimpleArrow: defines the standard arrow; myVecArrow: defines an arrow with different color at the edge and at the middle; myInnerColor: useful for keeping internal color of myVecArrow consistent under connections; myVecArrowColor: special case from myVecArrow to be used in special connections; myInnerNonWhite: used together with myVecArrowColor for connections; figNode: defines a way to insert external figures.
To insert the texts above, I chose to use newcommand as an alternative method to create one command for adding the texts:
myTikzsetStyle.sty file
\NeedsTeXFormat{LaTeX2e}[1994/06/01] \ProvidesPackage{myTikzStyle}[2023-12-03 Custom Package to draw my own styles with TikZ] \tikzset{addCross/.style n args={6}{ minimum size={#5 mm}, %minimum height=10mm, path picture={ \draw[#6] (path picture bounding box.south east) -- (path picture bounding box.north west) (path picture bounding box.south west) -- (path picture bounding box.north east); \node at ($(path picture bounding box.south)!0.4!(path picture bounding box.center)$) {#1}; \node at ($(path picture bounding box.west)!0.4!(path picture bounding box.center)$) {#2}; \node at ($(path picture bounding box.north)!0.4!(path picture bounding box.center)$) {#3}; \node at ($(path picture bounding box.east)!0.4!(path picture bounding box.center)$) {#4}; } }, addCross/.default={}{}{}{}{10}{} } \tikzset{addSum/.style n args={6}{ minimum size={#5 mm}, %minimum height=10mm, path picture={ \draw[#6] (path picture bounding box.south) -- (path picture bounding box.north) (path picture bounding box.west) -- (path picture bounding box.east); \node at ($(path picture bounding box.south west)!0.6!(path picture bounding box.center)$) {#1}; \node at ($(path picture bounding box.south east)!0.6!(path picture bounding box.center)$) {#2}; \node at ($(path picture bounding box.north west)!0.6!(path picture bounding box.center)$) {#3}; \node at ($(path picture bounding box.north east)!0.6!(path picture bounding box.center)$) {#4}; } }, addSum/.default={}{}{}{}{10}{black} } \tikzset{myBlock/.style n args={2}{ every node/.style={rectangle,draw, text=black, minimum width=#1, minimum height=#2,} }, myBlock/.default={1cm}{1cm} } \tikzset{mySimpleArrow/.style n args={2}{ >={latex[#1]}, every path/.style={draw=#2} }, mySimpleArrow/.default={black}{black} } \tikzset{myVecArrow/.style n args={4}{ thick, #1, decoration={markings, mark=at position 1 with {\arrow[semithick, #2]{triangle 60[fill=#3]}}}, % open triangle double distance=1.4pt, shorten >= 5.5pt, preaction = {decorate}, postaction = {draw,line width=1.4pt, #4, shorten >= 4.5pt} }, myVecArrow/.default={black}{black}{white}{white} } \tikzset{myInnerColor/.style={ semithick, #1, line width=1.4pt, shorten >= 4.5pt }, myInnerColor/.default={white} } \tikzset{myVecArrowColor/.style={ myVecArrow={red}{blue}{orange}{green}} } \tikzset{myInnerNonWhite/.style={ myInnerColor={cyan}} } \tikzset{figNode/.style={ path picture={ \node at (path picture bounding box.center) {#1};}} } \newcommand{\myTextTable}[5][]{ \begin{scope}[#1] \node[rectangle, fill=#2, text=#3, text centered, minimum width=80, minimum height=10] at (0,0.5) { \begin{tabular}{c} \textbf{#4} \end{tabular} }; \node[minimum width=20, minimum height=10, align=left, text width = 0.25\textwidth, anchor=north] at (0,0) { {#5} }; \end{scope} }
input_mwe_tikz.tex
The key idea is always to define the largest set of common features possible, it means, use the environment scope with parameters.
At the first block, there are some red dashed rectangles, one of the filled with green.
The second block are the circle nodes applying purple. Here I added the addCross and addSum from the own style. Notice where it became purple and where it didn't.
The third block is the set of nodes using the style myBlock. This is normally the first block to draw and to define the position of its elements. Here I inserted two nodes using figNode and another node with the chemical.
The fourth block contains the basic set of mySimpleArrow, followed by the fifth block in the foreach loop to insert the myVecArrow, this is a special arrow with a colored space in the middle.
In the sequence there is a myVecArrow with parameters followed by a foreach with myVecArrowColor and myInnerNonWhite. Notice how the arrows combine nicely at the bifurcation. Just ignore the unusual color scheme.
Finally, the last block are the text above using \myTextTable. As we would use the same style more than once, we defined a command able to change some features without repeating the whole code over and over. If any change is necessary, we just do them at the command definition.
input_mwe_tikz.tex file
\begin{tikzpicture}[very thick] \begin{scope}[dashed, red] \draw (-3,-2.25) rectangle ++(5,3.25); \draw[fill opacity=0.4,fill=green!50] (-4.5,2.25) rectangle ++(8,3.5); \end{scope} \begin{scope}[purple] \node[circle,draw,addCross={$+$}{$+$}{}{}{10}{black}] (N1) at (-2,0) {}; \node[addSum] (N2) at (5,0) {}; \node[circle,draw,addSum={1}{2}{3}{4}{10}{blue}] (N3) at (5,-2) {}; \end{scope} \begin{scope}[myBlock] \node (A) at (0,-1.5) {A}; \node (B) at (-4,0) {B}; \node[figNode={\includegraphics[width=1cm]{example-image-c}}] (C) at (3,0) {}; \node[figNode={\includegraphics[width=1cm]{example-image-duck}}] (D) at (-3,4) {}; \node (chemA) at (0.5,4) {\chemA}; \node (I) at (0,0) {$\displaystyle \int$}; \end{scope} \begin{scope}[mySimpleArrow] \path[->] ($(B)+(-1.5,0)$) node[above]{$u$} -- (B); \path[->] (B) -- (N1); \path[->] (N1) -- (I) node[midway, above] {$\dot{x}$}; \path[->] (I) -- ++(1.5,0) coordinate(x) node[above]{$x$} -- (C); \path[->] (x) |- (A) -| (N1); \path[->] (C) |- (N3) node[below,midway]{$\hat{z}$}; \path[->] (N3) -- ++(1.5,0) node[above]{$z$}; \end{scope} \foreach \f in {myVecArrow}{ \draw[\f] (B) |- (D); \draw[\f] (C) -- (N2) node[above,midway]{$\hat{y}$}; \draw[\f] (N2) -- ++(1.5,0) node[above]{$y$}; }; \draw[myVecArrow={cyan}{red}{violet}{violet}] (D) -- (chemA); \foreach \f in {myVecArrowColor,myInnerNonWhite}{ \draw[\f] (chemA) -| (C); \draw[\f] (chemA) -| (N2); }; \begin{scope}[shift={(-3,8)}] \myTextTable{blue}{white}{\Large{Title A}}{Text 1.} \myTextTable[shift={(3,0)}]{blue}{white}{\Large{Title B}}{Text 2.} \myTextTable[shift={(6,0)}]{green!50!black}{white}{\Large{Title C}}{This is a very long text, yet not so long.} \end{scope} \end{tikzpicture}
Result
The following image show our results.

tikz-pgf... but OP question is sort ofdo-this-for-me. So far he not show any of own effort to draw this. Maybe the best solution for him is insert this image by\includegraphics.