\documentclass[11pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage{tikz, stix2, inconsolata, ifthen, lipsum, array, xspace, listings, booktabs, adjustbox, longtable, enumitem, amsmath, siunitx}
\usepackage[hidelinks, colorlinks=true, linkcolor=red]{hyperref}
\usetikzlibrary{positioning, shapes, arrows.meta, matrix, calc, intersections, spath3, plotmarks, fit, decorations.pathmorphing, quotes}
\usepackage{pfdicons}

\definecolor{LightGray}{gray}{0.93}
\lstset{
	language=[LaTeX]TeX,
	texcsstyle=*\bfseries, 
	commentstyle=\color{gray}\ttfamily,
	emph={draw, node, path, coordinate}, emphstyle=\bfseries,
	tabsize=3,
	numbers=left,
	breaklines=true,
	backgroundcolor=\color{LightGray},
	basicstyle=\footnotesize\ttfamily,
	xleftmargin=5ex,
	xrightmargin=4ex}
\lstMakeShortInline|

% Attempt to improve copy/paste for code:
\usepackage{accsupp}
\lstset{numberstyle=\color{gray}\small\noncopynumber, columns=fullflexible} 
\newcommand{\noncopynumber}[1]{
	\BeginAccSupp{method=escape,ActualText={}}
	#1\hspace{-1em}
	\EndAccSupp{}
}

\newcommand\Tikz{Ti\textit{k}Z\xspace}
\newcommand\redtt[1]{{\color{red}\texttt{#1}}}
\newcommand\boldtt[1]{\textbf{\texttt{#1}}}

\def\markpolar{
	\foreach \theta in {0,10,20,...,350}{
		\fill[red] (f.\theta) circle (0.75pt);	
	}
}

\def\scalegrid{
	\draw[help lines, blue!5, step=1mm, ultra thin] (-10mm, -10mm) grid (10mm, 10mm);
	\draw[help lines, blue!10, step=5mm, ultra thin] (-10mm, -10mm) grid (10mm, 10mm);
	\draw[red!20, thin] (-10mm,0mm) to (10mm, 0mm);
	\draw[red!20, thin] (0mm, -10mm) to (0mm, 10mm);
	\node[left] at (-10mm,0mm) {\color{blue!20}0};
	\node[left] at (-10mm,5mm) {\color{blue!20}$+5$};
	\node[left] at (-10mm,-5mm) {\color{blue!20}$-5$};
	\node[left] at (-10mm,10mm) {\color{blue!20}$+10$};
	\node[left] at (-10mm,-10mm){\color{blue!20}$-10$};
	\node[anchor=north east] at (12mm,-10mm) {\color{blue!20}mm};
}

\newcommand\plainicon[1]{
	\node[#1] {};
}

\newcommand\scaleicon[1]{
	\scalegrid
	\node[#1] {};
}
	
\newcommand\anchoricon[2]{
	\node[#1, scale=#2, draw=lightgray, thick] (f) {};
	\node[red] at (f.center) {$\times$};
}

\def\markcardinal{
	\foreach \anchor/\pos in {
		n/above, 
		e/right, 
		w/left, 
		s/below}
	{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
		\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
}

\def\markoffcardinal{
	\foreach \anchor/\pos in {
		ne/right, 
		nw/left, 
		se/right, 
		sw/left}
	{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
		\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
}







\title{The \boldtt{pfdicons} Package: Documentation}
\author{\Large Aaron Drews\\ \texttt{adrews@ucsd.edu}}
\date{v1.1 from 2026/02/11}
\setcounter{tocdepth}{2}

\begin{document}
\maketitle

\tableofcontents

	
\section{Introduction}
This package provides \Tikz shapes and a few supporting functions to draw icons and streams for process flow diagrams (PFDs) in chemical engineering. Unit operations provided by this package are expected to cover--in Turton's estimate--about 90\% of fluid processing systems. Additional icons have been provided for solids processing, instrumentation, safety, and stream labeling and descriptions.

This package was developed to support students and faculty in undergraduate chemical engineering courses where excessive detail and customization are not necessary to convey meaning, as opposed to professionals who may require more customization than this package currently provides. Examples from several standard textbooks in undergraduate chemical engineering have been reproduced in the Examples section to illustrate the applicability of this package. A visual summary of all process units is provided at the end of this document as a quick reference.

\section{Usage}
To use this package simply provide
\begin{lstlisting}[numbers=none]
\usepackage{tikz}
\usepackage{pfdicons}
\end{lstlisting}
in your preamble. The |tikz| package must be loaded first. The |pfdicons| package automatically loads the |ifthen| package as well as the following \Tikz libraries: |positioning|, |shapes|, |arrows.meta|, and |spath3|. Most shapes provided by the package are drawn within a |tikzpicture| 
environment using the basic syntax
\begin{lstlisting}[numbers=none]
\begin{tikzpicture}
	\node[<shape>] {};
\end{tikzpicture}
\end{lstlisting}
where |<shape>| is the desired process unit. Like most \Tikz shapes the icons provided by |pfdicons| can be scaled, rotated, and colored in the usual ways:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\node[basic hx] at (0,0) {};
	\node[basic hx, draw=blue] at (1,0) {};
	\node[basic hx, draw=red, fill=yellow] at (0,-1) {};
	\node[basic hx, scale=0.75, rotate=90, anchor=center] at (1,-1) {};	
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\node[basic hx] at (0,0) {};
				\node[basic hx, draw=blue] at (1,0) {};
				\node[basic hx, draw=red, fill=yellow] at (0,-1) {};
				\node[basic hx, scale=0.75, rotate=90, thick] at (1,-1) {};				
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
Two additional PGF keys are available for some process units: |unit int| which modifies the interior contents of the process unit, and |unit ext| which modifies the exterior of the process unit.\footnote{A few other keys are available for specific units and are introduced in the documentation for those units.} These keys can be used as
\begin{lstlisting}[numbers=none]
\node[<shape>, unit int=<intopt>, unit ext=<extopt>] {};
\end{lstlisting}
where |<intopt>| and |<extopt>| are interior and exterior options specific to the process unit. For most process units both keys can be used to combine effects. For example, the |basic hx| shape drawn above has keys |U tube| and |stems| which can be combined as follows:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\node[basic hx] at (0,0) {};
	\node[basic hx, unit ext=util] at (1,0) {};
	\node[basic hx, unit fill=U tube] at (0,-1) {};
	\node[basic hx, unit fill=U tube, unit ext=util] at (1,-1) {};		
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\node[basic hx] at (0,0) {};
				\node[basic hx, unit ext=util] at (1,0) {};
				\node[basic hx, unit int=U tube] at (0,-1) {};
				\node[basic hx, unit int=U tube, unit ext=util] at (1,-1) {};		
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
Since the flowsheet icons are intended to be geometric shapes \textit{the curly braces should always be empty}; that is, text cannot be directly included as part of the node. Annotations and labels of shapes from |pfdicons| can be included as labels or separate nodes:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
% No:
\node[basic hx] at (0,0) {H-101};

% Yes, as a separate node:
\node[basic hx, blue] at (0,-1.5) (g) {};
\node[right] at (g.east) {H-101};

% Yes, using standard label syntax:
\node[basic hx, red, label={right:H-101}] at (0,-3) {};

% Yes, with \usetikzlibrary{quotes} syntax:
\node[basic hx, brown, "H-101" right] at (0,-4.5) {};	
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				% No:
				\node[basic hx] at (0,0) {H-101};
				
				% Yes, as a separate node:
				\node[basic hx, blue] at (0,-1.5) (g) {};
				\node[right] at (g.east) {H-101};
				
				% Yes, using standard label syntax:
				\node[basic hx, red, label={right:H-101}] at (0,-3) {};
				
				% Yes, with \usetikzlibrary{quotes} syntax:
				\node[basic hx, brown, "H-101" right] at (0,-4.5) {};			
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}

\subsection{Anchors, anchor aliases, and polar coordinate specification}
All process units have the standard cardinal and off-cardinal anchors which can be accessed using the standard \Tikz anchor notation such as |f.north| or |mycolumn.south east|. Some units have additional anchors on half-cardinal points (\textit{e.g.}, |north north east| or |east south east|) or special process unit features (\textit{e.g.}, |east jacket| or |actuator|). 

All cardinal anchors of custom shapes provided by the |pfdicons| package are \textbf{aliased with abbreviated versions}, \textit{e.g.}, |n| for |north|, |ene| for |east north east|, \textit{etc.} to allow for shortened code. Full anchor names can always be used to provide syntax consistency with core \Tikz.

Most shapes support polar coordinate specifications such as |mycolumn.75| (as of v1.1). The border on which anchors specified in this manner will appear \textit{mostly} coincides with the anchors described above but some icons may have variations. 

The following shapes are used to denote various anchors in this documentation:
\begin{center}
	\begin{tabular}{cl}
	\tikz\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=0.6em] {}; & cardinal and off-cardinal anchors such as |north|, |south east|, |w|, |nw|, \textit{etc}. \\
	\tikz\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=0.6em] {}; & special anchors for specific icon locations, \textit{e.g.} |north motor|, |east jacket|, \textit{etc}. \\
	\tikz\node[circle, fill=red, inner sep=0pt, minimum size=0.3em] {}; & anchor border for anchors placed using polar notation such as |shape.75|, |shape.-135|, \textit{etc}.\\
	\tikz[baseline=-0.5ex]\node[red]{$\times$}; & |center| anchor of node \\
	\end{tabular}
\end{center}


\section{Process units}
\subsection{Reactors}
\subsubsection{Tank reactor}
\begin{lstlisting}[numbers=none]
\node[tank reactor] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
		\node[tank reactor] {};	
		
		&
		
		\scalegrid 
		\node[tank reactor] {};
		
		&
		
		\node[tank reactor, scale=1.5, draw=lightgray, thick] (f) {};
		\markpolar
		
		\foreach \anchor/\pos in {
			n/above, 
			e/right, 
			w/left, 
			s/below}
		{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
			\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
		\foreach \anchor/\pos in {
			ne/right, 
			nw/left, 
			se/right, 
			sw/left,
			nne/above right, 
			nnw/above left, 
			sse/below right, 
			ssw/below left,
			ese/right, 
			wsw/left}
		{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
		\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}

		\node[red] at (f.center) {$\times$};
		\\	
		};	
	\end{tikzpicture}
\end{figure}
The |tank reactor| shape provides a cylindrical tank reactor, also referred to as a stirred-tank reactor, continuous stirred-tank reactor (CSTRs), or autoclave. The |center| anchor is offset slightly to accommodate fill and interior options as described below. Several key modifiers are available:

\begin{center}
	\begin{longtable}{p{1.2in}p{2.5in}c}
		\caption{Key-value pairs for the \boldtt{tank reactor} shape.}\\
		\toprule
		\texttt{key=value} & Description & Example \\
		\midrule
		\endfirsthead
		
		\multicolumn{3}{c}{\tablename\ \thetable: Key-value pairs for the \boldtt{tank reactor} shape \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		\texttt{unit int=stirred} & Adds a rounded stirrer with motor and 
		mixing blade. Three additional anchors are specific to this option: 
		\redtt{west motor}, \redtt{north motor}, and \redtt{east motor}. & 
		\adjustbox{valign=t}{
		\begin{tikzpicture}
			\node[tank reactor, unit int=stirred] (f) {};
			\node[tank reactor, unit int=stirred, above=of f.north] {};
			\foreach \anchor/\pos in {
				west motor/left,
				north motor/above,
				east motor/right}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}

		\end{tikzpicture}} \\ 
		& & \\
		
		\texttt{unit int=liquid} & Adds wavy lines from |west| to |east| to 
		indicate a liquid surface. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[tank reactor, unit int=liquid] {};				
		\end{tikzpicture}} \\ 
		& & \\
		
		\texttt{unit int=stirred} \texttt{liquid} & A combination of |unit int=stirred| and |unit int=liquid|.
		& 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[tank reactor, unit int=stirred liquid] {};				
		\end{tikzpicture}} \\ 
		& & \\
		
		\texttt{unit ext=lower} \texttt{jacket} & Adds a jacket around the lower portion of the reactor. Two additional anchors are specific to this option: \redtt{west jacket} and \redtt{east jacket}. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[tank reactor, unit ext=lower jacket] (f) {};
				\foreach \anchor/\pos in {
					west jacket/left,
					east jacket/right}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};}
				
				\node[align=left, anchor=west] at (f.east jacket) {\footnotesize\texttt{east}\\ \footnotesize\texttt{jacket}};
				\node[align=right, anchor=east] at (f.west jacket) {\footnotesize\texttt{west}\\ \footnotesize\texttt{jacket}};
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit ext=side} \texttt{jacket} & Adds a jacket around the side of the reactor. Several additional anchors available: \redtt{west jacket}, \redtt{north west jacket}, \redtt{south west jacket}, \redtt{east jacket}, \redtt{north east jacket}, and \redtt{south east jacket}. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture} [font=\footnotesize\ttfamily]
				\node[tank reactor, unit ext=side jacket] (f) {};
				\foreach \anchor in {
					west jacket,
					east jacket,
					north west jacket,
					north east jacket,
					south west jacket,
					south east jacket}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};}
				
				\node[align=left, anchor=west] at (f.east jacket) {east jacket};
				\node[align=left, anchor=south west] at (f.north east jacket) {north east\\[-3pt]jacket};
				\node[align=left, anchor=north west] at (f.south east jacket) {south east\\[-3pt]jacket};
				\node[align=right, anchor=east] at (f.west jacket) {west jacket};
				\node[align=right, anchor=south east] at (f.north west jacket) {north west\\[-3pt]jacket};
				\node[align=right, anchor=north east] at (f.south west jacket) {south west\\[-3pt]jacket};

		\end{tikzpicture}} \\
	\end{longtable}
\end{center}




\subsubsection{Tube reactor}
\begin{lstlisting}{numbers=none}
\node[tube reactor] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[tube reactor] {};	
			&
			\scalegrid
			\node[tube reactor] {}; 
			&
			\node[tube reactor, scale=1.8, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/below right, 
				sw/below left,
				nne/above, 
				nnw/above, 
				sse/below, 
				ssw/below,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |tube reactor| shape provides a horizontal cylinder with curved sides to be used for such reactors as plug flow reactors, packed bed reactors, fixed bed reactors, tubular reactors, and so forth. Several key-value pairs can be provided to indicate common fills and utility features:
\begin{center}
	\begin{longtable}{p{1.5in}p{3in}c}
		\caption{Key-value pairs for the \boldtt{tube reactor} shape.}\\
		\toprule
		\texttt{key=value} & Description & Example \\
		\midrule
		\endfirsthead
		
		\multicolumn{3}{c}{\tablename\ \thetable: Key-value pairs for the \boldtt{tube reactor} shape \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		\texttt{unit int=packed} & Adds a cross representing a packed, dumped, or random fill within the reactor.  & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[tube reactor, unit int=packed] {};
		\end{tikzpicture}} \\ 
		& & \\
		\texttt{unit int=fixed} & Adds angled lines representing a fixed bed.& 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[tube reactor, unit int=fixed] {};
		\end{tikzpicture}} \\
		& & \\
		\texttt{unit int=tubular} & Adds horizontal lines representing tubes for (\textit{e.g.}) shell-and-tube reactors, double-pipe reactors, and so forth.& 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[tube reactor, unit int=tubular] {};
		\end{tikzpicture}} \\
	
		& & \\
		\texttt{unit ext=cis shell} & Adds two shell-side stems, both on the north side with anchors \redtt{west shell} and \redtt{east shell}. Stems can be moved to the south side by rotating (|rotate=180|) or scaling (|yscale=-1|) the node. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}[font=\footnotesize\ttfamily]
				\node[tube reactor, unit ext=cis shell] (f) {};
				\foreach \anchor in {west shell, east shell}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};}
				\node[align=right, anchor=south east] at (f.west shell) {west\\[-3pt]shell};
				\node[align=left, anchor=south west] at (f.east shell) {east\\[-3pt]shell};
		\end{tikzpicture}} \\
	
		& & \\ 
		\texttt{unit ext=trans shell} & Adds two shell-side stems, one on the north side and one on the south side, with anchors \redtt{north shell} and \redtt{south shell}. Stem locations can be swapped by scaling the node (|yscale=-1| or |xscale=-1|). & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}[font=\footnotesize\ttfamily]
				\node[tube reactor, unit ext=trans shell] (f) {};
				\foreach \anchor in {north shell, south shell}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};}	
				\node[align=right, anchor=south east] at (f.north shell) {north\\[-3pt]shell};
				\node[align=left, anchor=north west] at (f.south shell) {south\\[-3pt]shell};
		\end{tikzpicture}} \\
	\end{longtable}
\end{center}






\subsection{Heat exchangers}
\subsubsection{Basic heat exchanger}
\begin{lstlisting}[numbers=none]
\node[basic hx] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[basic hx] {};	
			&
			\scalegrid 
			\node[basic hx] {};
			&
			\node[basic hx, scale=1.5, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/below right, 
				sw/below left}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |basic hx| shape provides a circle with a jagged interior line and represents a generic heat exchange unit. Only the four cardinal and intercardinal anchors are used; the half-cardinals |nnw|, |nne|, |ssw|, and |sse| anchors are not used. Protrusions from the inner ``tube'' line can be added to provide additional indication of tube-side fluids, typically to indicate utility fluids (hence the |util| value). Additional anchors can be used to place labels at ends of the protrusions.
\begin{center}
	\begin{longtable}{p{1.5in}p{3in}c}
		\caption{Key-value pairs for the \boldtt{basic hx} shape.}\\
		\toprule
		\texttt{key=value} & Description & Example \\
		\midrule
		\endfirsthead
		
		\multicolumn{3}{c}{\tablename\ \thetable: Key-value pairs for the \boldtt{basic hx} shape \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		\texttt{unit ext=util} & Adds protrusions from the inner tube, typically to indicate utility fluids. Additional anchors \redtt{south util} and \redtt{north util} are available at the terminals. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[basic hx, unit ext=util] (f) {};
				\foreach \anchor/\pos in {
					north util/above,
					south util/below}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
		\end{tikzpicture}} \\ 
		& & \\
		\texttt{unit int=U tube} & Modifies interior to a generic U-tube orientation with both tube points on the same shell side. The |south west| and |south east| anchors are located at these tube points. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[basic hx, unit int=U tube] {};
		\end{tikzpicture}} \\
		& & \\
		\texttt{unit int=U tube,}\newline \texttt{unit ext=util} & Modifies interior to U-tube orientation and adds protrusions, typically to indicate utility fluids. Additional anchors \redtt{west util} and \redtt{east util} are available at the terminals. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[basic hx, unit int=U tube, unit ext=util] (f) {};
				\foreach \anchor/\pos in {
					west util/below left,
					east util/below right}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
		\end{tikzpicture}} \\
	\end{longtable}
\end{center}


\subsubsection{Shell and tube heat exchanger}
\begin{lstlisting}[numbers=none]
\node[shell and tube hx] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[shell and tube hx] (g) {};
			&
			\scalegrid
			\node[shell and tube hx] {};
			&
			\node[shell and tube hx, scale=1.5, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/below right, 
				sw/below left,
				nne/above, 
				nnw/above, 
				sse/below, 
				ssw/below,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |shell and tube hx| shape provides a rectangle with an inner set of horizontal lines representing a shell and tube heat exchanger. Keys can modify the appearance to provide shell-side stems or modify the tube ends to represent two-pass or four-pass arrangements.
\begin{center}
	\begin{longtable}{p{1.5in}p{3in}c}
		\caption{Key-value pairs for the \boldtt{shell and tube hx} shape.}\\
		\toprule
		\texttt{key=value} & Description & Example \\
		\midrule
		\endfirsthead
		
		\multicolumn{3}{c}{\tablename\ \thetable: Key-value pairs for the \boldtt{shell and tube hx} shape \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		\texttt{unit int=two pass} & Adds a horizontal line on the west shell side to indicate a two-pass heat exchanger.& 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[shell and tube hx, unit int=two pass] (f) {};
		\end{tikzpicture}} \\ 
		& & \\
		\texttt{unit int=four pass} & Adds two horizontal line on the west shell side and one on the east to indicate a four-pass heat exchanger.& 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[shell and tube hx, unit int=four pass] (f) {};
		\end{tikzpicture}} \\ 
		& & \\
		
		\texttt{unit ext=cis shell} & Adds two shell-side stems, both on the north side with anchors \redtt{west shell} and \redtt{east shell}. Stems can be moved to the south side by rotating (|rotate=180|) or scaling (|yscale=-1|) the node. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}[font=\footnotesize\ttfamily]
				\node[shell and tube hx, unit ext=cis shell] (f) {};
				\foreach \anchor in {west shell, east shell}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};}
				\node[align=right, anchor=south east] at (f.west shell) {west\\[-3pt]shell};
				\node[align=left, anchor=south west] at (f.east shell) {east\\[-3pt]shell};
		\end{tikzpicture}} \\
		
		& & \\ 
		\texttt{unit ext=trans shell} & Adds two shell-side stems, one on the north side and one on the south side, with anchors \redtt{north shell} and \redtt{south shell}. Stem locations can be swapped by scaling the node (|yscale=-1| or |xscale=-1|). & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}[font=\footnotesize\ttfamily]
				\node[shell and tube hx, unit ext=trans shell] (f) {};
				\foreach \anchor in {north shell, south shell}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};}	
				\node[align=right, anchor=south east] at (f.north shell) {north\\[-3pt]shell};
				\node[align=left, anchor=north west] at (f.south shell) {south\\[-3pt]shell};
		\end{tikzpicture}} \\
	\end{longtable}
\end{center}



\subsubsection{Plate heat exchanger}
\begin{lstlisting}[numbers=none]
\node[plate hx] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[plate hx] {};
			&
			\scalegrid 
			\node[plate hx] {};
			&
			\node[plate hx, scale=1.8, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/below right, 
				sw/below left,
				nne/above, 
				nnw/above, 
				sse/below, 
				ssw/below,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |plate hx| shape provides a rectangle with an inner set of vertical lines representing a plate-and-frame heat exchanger. This unit has no |key=value| pairs for additional modification.


\subsubsection{Fired heater}
\begin{lstlisting}[numbers=none]
\node[fired hx] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[fired hx] {};
			&
			\scalegrid 
			\node[fired hx] {};
			&
			\node[fired hx, scale=1, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/right, 
				sw/left,
				nne/right, 
				nnw/left, 
				sse/below right, 
				ssw/below left,
				ese/below right, 
				wsw/below left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |fired hx| shape provides a square unit with tapered chimney representing a fired heat exchanger or fired heater. A horizontal through-line represents the process tube; a small circular icon at the bottom indicates the combustion region of the heat exchanger. The default number of process tubes is one (|unit int=single| or omitted) but additional process tubes can be added using the |unit int| key. Inlets and outlets will shift to correspond to half-cardinal anchors as shown below.
\begin{center}
	\begin{longtable}{p{1.5in}p{3in}c}
		\caption{Key-value pairs for the \boldtt{fired hx} shape.}\\
		\toprule
		\texttt{key=value} & Description & Example \\
		\midrule
		\endfirsthead
		
		\multicolumn{3}{c}{\tablename\ \thetable: Key-value pairs for the \boldtt{fired hx} shape \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		\texttt{unit int=double} & Provides two tubes roughly corresponding to 
		the radiative and convective zones. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[fired hx, unit int=double] (f) {};
				\foreach \anchor/\pos in {
					ese/right, 
					wsw/left,
					wnw/left,
					ene/right}
				{\node[circle, draw, blue, fill=blue, inner sep=0pt, minimum size=2pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
		\end{tikzpicture}} \\ 
		& & \\
		\texttt{unit int=triple} & Provides three tubes roughly corresponding to a radiative zone and two convective zones. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[fired hx, unit int=triple] (f) {};
				\foreach \anchor/\pos in {
					nne/right, 
					nnw/left, 
					ese/right, 
					wsw/left,
					wnw/left,
					ene/right}
				{\node[circle, draw, blue, fill=blue, inner sep=0pt, minimum size=2pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
		\end{tikzpicture}} \\
	\end{longtable}
\end{center}

\newpage
\subsubsection{Cooling tower}
\begin{lstlisting}[numbers=none]
\node[cooling tower] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[cooling tower] {};	
			&
			\scalegrid
			\node[cooling tower] {};
			&
			\node[cooling tower, scale=1.5, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/right, 
				nw/left, 
				se/right, 
				sw/left,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The default cooling tower unit is of the induced draft design with a fan on top, packing in the middle, and a liquid reservoir at bottom. Options for forced and natural draft are available via the |unit ext| key, which also modifies anchors and anchor border, with |unit ext = induced| the same as not providing a key value.
\begin{center}
	\begin{longtable}{p{1.5in}p{2in}c}
		\caption{Key-value pairs for the \boldtt{cooling tower} shape.}\\
		\toprule
		\texttt{key=value} & Description & Example \\
		\midrule
		\endfirsthead
		
		\multicolumn{3}{c}{\tablename\ \thetable: Key-value pairs for the \boldtt{cooling tower} shape \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		\texttt{unit ext=forced} & Includes side fan and modifies vent stack for visual distinction. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[cooling tower, unit ext = forced, draw=lightgray, thick, scale=1.25] (f) {};
				\markpolar
				
				\foreach \anchor/\pos in {
					n/above, 
					e/right, 
					w/left, 
					s/below}
				{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
				
				\foreach \anchor/\pos in {
					ne/right, 
					nw/left, 
					se/right, 
					sw/left,
					ese/right, 
					wsw/left,
					wnw/left,
					ene/right}
				{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
				
				\node[red] at (f.center) {$\times$};
				
				\node[cooling tower, unit ext=forced, left=1.5cm of f] {};
				
		\end{tikzpicture}} \\ 
		& & \\
		\texttt{unit ext=natural} & Natural draft tower with sprayer. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[cooling tower, unit ext = natural, draw=lightgray, thick, scale=1.25] (f) {};
				\markpolar
				
				\foreach \anchor/\pos in {
					n/above, 
					e/right, 
					w/left, 
					s/below}
				{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
				
				\foreach \anchor/\pos in {
					ne/right, 
					nw/left, 
					se/right, 
					sw/left,
					ese/right, 
					wsw/left,
					wnw/left,
					ene/right}
				{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
				
				\node[red] at (f.center) {$\times$};
				
				\node[cooling tower, unit ext=natural, left=1.5cm of f] {};
		\end{tikzpicture}} \\
	\end{longtable}
\end{center}


\subsection{Separation units}
\subsubsection{Column}
\begin{lstlisting}[numbers=none]
\node[column] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[column] {};	
			&
			\scalegrid
			\node[column] {};
			&
			\node[column, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/right, 
				nw/left, 
				se/right, 
				sw/left,
				nne/above right, 
				nnw/above left, 
				sse/below right, 
				ssw/below left,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |column| shape provides a vertical, elongated cylinder as a generic separation column. The default fill is empty but several |key=value| pairs are provided to represent the most common separation units. Several additional anchors and keys are available based on these settings.

\begin{center}
	\begin{longtable}{p{1.75in}p{3in}c}
		\caption{Key-value pairs for the \boldtt{column} shape.}\\
		\toprule
		\texttt{key=value} & Description & Example \\
		\midrule
		\endfirsthead
			
		\multicolumn{3}{c}{\tablename\ \thetable: Key-value pairs for the \boldtt{column} shape \textit{(cont'd)}} \\
		\midrule
		\endhead
			
		\bottomrule
		\endfoot
			
		\bottomrule
		\endlastfoot
		
		\texttt{unit ext=simple hx} & Provides stylized representation of condenser and reboiler along with anchors \redtt{distillate} and \redtt{bottoms} for stream connections. These anchors always exist but coincide with |north east| and |south east| when the |simple hx| key is omitted.& 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[column, unit ext=simple hx] (f) {};
				\foreach \anchor/\pos in {
					distillate/right,
					bottoms/right}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
		\end{tikzpicture}} \\ 
	
		& & \\
		\texttt{unit int=tray}\newline \texttt{unit int=dashed tray} & Dashed, horizontal lines. Dashes will always have three segments and two openings.& 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[column, unit int=tray] (f) {};
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit int=weir tray} & Solid, horizontal lines with small risers to 
		represent tray weirs.& 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[column, unit int=weir tray] (f) {};
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit int=numbered tray}\newline\newline\hspace*{1em}\textit{associated keys:}\newline\hspace*{2em}\texttt{top tray=99}\newline\hspace*{2em}\texttt{feed tray=00}\newline\hspace*{2em}\texttt{bottom tray=22} & Dashed, horizontal lines at top, feed, and bottom trays. Associated keys |top tray|, |feed tray|, and |bottom tray| can be used to indicate tray numbers \textbf{if column is not transformed}. If column is transformed then associated keys can be omitted and anchors \redtt{feed tray}, \redtt{top tray}, and \redtt{bottom tray} used for placement of additional text nodes.& 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[column, unit int=numbered tray, top tray=99, feed tray=00, 
				bottom tray=22] (f) {};
				\foreach \anchor/\pos in {
					top tray/below,
					feed tray/below,
					bottom tray/below}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit int=packed} & Large cross symbol indicating random or dumped fill (packing).& 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[column, unit int=packed] (f) {};
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit int=double packed} & Two sections of random or dumped fill (packing) separated by a small, central gap.& 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[column, unit int=double packed] (f) {};
		\end{tikzpicture}} \\
\end{longtable}
\end{center}






\subsubsection{Vessel}
\begin{lstlisting}[numbers=none]
\node[vessel] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[vessel] {};	
			&
			\scalegrid
			\node[vessel] {};
			&
			\node[vessel, scale=1.5, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/right, 
				nw/left, 
				se/right, 
				sw/left,
				nne/above right, 
				nnw/above left, 
				sse/below right, 
				ssw/below left,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |vessel| shape provides a vertical cylinder as a generic vessel. Such a vessel can be, for example, down-scaled and rotated 90${^\circ}$ can represent a product tank or a phase separator after a condenser. The default fill is empty but several |key=value| pairs are provided to represent two common vapor-liquid units as well as liquid accumulation tanks. Several additional anchors are available based on these settings.

\begin{center}
	\begin{longtable}{p{1.75in}p{3in}c}
		\caption{Key-value pairs for the \boldtt{vessel} shape.}\\
		\toprule
		\texttt{key=value} & Description & Example \\
		\midrule
		\endfirsthead
		
		\multicolumn{3}{c}{\tablename\ \thetable: Key-value pairs for the \boldtt{vessel} shape \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		
		\texttt{unit int=liquid} & Adds wavy lines across the middle of the vessel to indicate a liquid level. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[vessel, unit int=liquid] (f) {};
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit int = liquid rotated} & Adds wavy lines down the center of the vessel to indicate a liquid level. This key is intended to be used with a rotated node such as
		\begin{lstlisting}[numbers=none]
\node[vessel, rotate=90, unit int=liquid rotated] {};
		\end{lstlisting}
		 & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[vessel, rotate=90, unit int=liquid rotated] (f) {};
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit int=phase sep} & Adds a knock-down element near the |west| anchor and a dashed, horizontal line near the top of the vessel to indicate a demister pad. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[vessel, unit int=phase sep] (f) {};
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit ext=simple hx} & Adds a simplified heat transfer element to the bottom portion of the vessel. Two additional anchors, \redtt{north hx} and \redtt{south hx}, are located at the exterior points of the heat exchanger tubes. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[vessel, unit ext=simple hx] (f) {};
				\foreach \anchor/\pos in {
					north hx/right,
					south hx/right}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
		\end{tikzpicture}} \\ 
		
		& & \\
	\end{longtable}
\end{center}




\subsection{Fluid transport}
\subsubsection{Centrifugal pump}
\begin{lstlisting}[numbers=none]
\node[centrifugal pump] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[centrifugal pump] {};	
			&
			\scalegrid
			\node[centrifugal pump] {};
			&
			\node[centrifugal pump, scale=1.5, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/right, 
				nw/left, 
				se/right, 
				sw/left}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}

\newpage
The |centrifugal pump| shape provides a circular element with a triangular base to represent a centrifugal pump. An additional half-circle can be added using the |unit int| key to indicate the pump inlet and a rectangular outlet direction can be added using the |unit ext| key.

\begin{center}
	\begin{longtable}{p{1.75in}p{3in}c}
		\caption{Key-value pairs for the \boldtt{centrifugal pump} shape.}\\
		\toprule
		\texttt{key=value} & Description & Example \\
		\midrule
		\endfirsthead
		
		\multicolumn{3}{c}{\tablename\ \thetable: Key-value pairs for the \boldtt{centrifugal pump} shape \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		\texttt{unit int=inlet west} & Adds a half-circle around the |center| anchor to accept an inlet stream to enter from the west. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[centrifugal pump, unit int=inlet west] (f) {};
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit int=inlet east} & Adds a half-circle around the |center| anchor to accept an inlet stream to enter from the east. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[centrifugal pump, unit int=inlet east] (f) {};
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit int=inlet north} & Adds a half-circle around the |center| anchor to accept an inlet stream to enter from the north. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[centrifugal pump, unit int=inlet north] (f) {};
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit int=inlet south} & Adds a half-circle around the |center| anchor to accept an inlet stream to enter from the south. Note that there is no means of removing the triangular base; such an inlet stream should be drawn as going through the base. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[centrifugal pump, unit int=inlet south] (f) {};
		\end{tikzpicture}} \\
		& & \\
		
		\texttt{unit ext=outlet east} & Adds a rectangular protrusion facing east to represent an outlet. Also adds the \redtt{outlet} anchor in the center of the outlet box. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[centrifugal pump, unit ext=outlet east] (f) {};
				\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.outlet) {};
				\node[right] at (f.outlet) {\footnotesize\texttt{outlet}};
		\end{tikzpicture}} \\
		
		& & \\
		\texttt{unit ext=outlet west} & Adds a rectangular protrusion facing west to represent an outlet. Also adds the \redtt{outlet} anchor in the center of the outlet box. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[centrifugal pump, unit ext=outlet west] (f) {};
				\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.outlet) {};
				\node[left] at (f.outlet) {\footnotesize\texttt{outlet}};
		\end{tikzpicture}} \\
		
		& & \\
		\texttt{unit ext=outlet north east} & Adds a rectangular protrusion facing north on the east side of the pump to represent an outlet. Also adds the \redtt{outlet} anchor in the center of the outlet box. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[centrifugal pump, unit ext=outlet north east] (f) {};
				\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.outlet) {};
				\node[above] at (f.outlet) {\footnotesize\texttt{outlet}};
		\end{tikzpicture}} \\
		
		& & \\
		\texttt{unit ext=outlet north west} & Adds a rectangular protrusion facing north on the west side of the pump  to represent an outlet. Also adds the \redtt{outlet} anchor in the center of the outlet box. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[centrifugal pump, unit ext=outlet north west] (f) {};
				\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.outlet) {};
				\node[above] at (f.outlet) {\footnotesize\texttt{outlet}};
		\end{tikzpicture}} \\
		& & \\

	\end{longtable}
\end{center}




\subsubsection{Reciprocating pump}
\begin{lstlisting}[numbers=none]
\node[reciprocating pump] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[reciprocating pump] {};	
			&
			\scalegrid
			\node[reciprocating pump] {};
			&
			\node[reciprocating pump, scale=1.25, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/right, 
				nw/left, 
				se/right, 
				sw/left}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |reciprocating pump| shape provides two square elements--a pump head and motor--connected by a simple shaft. Most anchors are placed relative to the pump head. This unit has no |key=value| pairs for additional modification.


\subsubsection{Compressor}
\begin{lstlisting}[numbers=none]
\node[compressor] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[compressor] {};	
			&
			\scalegrid
			\node[compressor] {};
			&
			\node[compressor, scale=2.5, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/left, 
				se/below right, 
				sw/left,
				nne/above, 
				nnw/above, 
				sse/below, 
				ssw/below,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |compressor| shape provides a quadrilateral to represent a gas-phase compressor. This unit has no |key=value| pairs for additional modification. If mirrored along the $x$-axis (\textit{e.g.}, by using something like |xscale=-1| or |rotate=90|) then the |compressor| shape is identical to the |turbine| shape but with different anchor points.



\subsubsection{Turbine}
\begin{lstlisting}[numbers=none]
\node[turbine] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[turbine] {};	
			&
			\scalegrid
			\node[turbine] {};
			&
			\node[turbine, scale=2.5, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/right, 
				nw/above left, 
				se/right, 
				sw/below left,
				nne/above, 
				nnw/above, 
				sse/below, 
				ssw/below,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |turbine| shape provides a quadrilateral to represent a gas-phase turbine. This unit has no |key=value| pairs for additional modification. If mirrored along the $x$-axis (\textit{e.g.}, by using something like |xscale=-1| or |rotate=90|) then the |turbine| shape is identical to the |compressor| shape but with different anchor points.


\section{Solids processing}
\subsection{Solids separation}
\subsubsection{Filter}
\begin{lstlisting}[numbers=none]
\node[filter] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{filter}
			&
			\scaleicon{filter}
			&
			\anchoricon{filter}{1.5}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |filter| shape provides a square outline with dashed divider to represent a generic filter operation for solids. This unit has no |key=value| pairs for additional modification.


\subsubsection{Press filter}
\begin{lstlisting}[numbers=none]
\node[press filter] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{press filter}
			&
			\scaleicon{press filter}
			&
			\anchoricon{press filter}{1.5}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |press filter| shape provides a rectangular outline with vertical lines to represent a series of parallel filter sheets pressed together with a frame as a filter operation for solids, usually for liquid/solid. This unit has no |key=value| pairs for additional modification.

\subsubsection{Cyclone}
\begin{lstlisting}[numbers=none]
\node[cyclone] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{cyclone}
			&
			\scaleicon{cyclone}
			&
			\anchoricon{cyclone}{1.5}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |cyclone| shape provides a rectangular top with tapered bottom as a gas/solid separation unit. This unit has no |key=value| pairs for additional modification.

\subsubsection{Centrifuge}
\begin{lstlisting}[numbers=none]
\node[centrifuge] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{centrifuge}
			&
			\scaleicon{centrifuge}
			&
			\anchoricon{centrifuge}{1.5}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |centrifuge| shape provides a square outline with offset inner basket, usually for liquid/solid separations. The inner detail represents a mechanical shaft to spin the inner basket. This unit has no |key=value| pairs for additional modification.

\subsubsection{Belt dryer}
\begin{lstlisting}[numbers=none]
\node[belt dryer] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{belt dryer}
			&
			\scaleicon{belt dryer}
			&
			\anchoricon{belt dryer}{1.5}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |belt dryer| shape provides a long rectangle with oval belt for solids drying. This unit has no |key=value| pairs for additional modification.

\subsubsection{Rotary dryer}
\begin{lstlisting}[numbers=none]
\node[rotary dryer] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{rotary dryer}
			&
			\scaleicon{rotary dryer}
			&
			\anchoricon{rotary dryer}{1.5}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |rotary dryer| shape provides a circle with interior scraper, exterior heater at bottom, and rotation indicator at top. Anchor positioning for this node is slightly outside the drawing itself to provide uniformity of appearance, for example allowing streams entering the top or bottom to not overlap the exterior arcs. This unit has no |key=value| pairs for additional modification.

\subsection{Solids generation}
\subsubsection{Granulator or agglomerator}
\begin{lstlisting}[numbers=none]
\node[granulator] {};
\end{lstlisting}
or
\begin{lstlisting}[numbers=none]
\node[agglomerator] {};
\end{lstlisting}

\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{granulator}
			&
			\scaleicon{granulator}
			&
			\anchoricon{granulator}{1.5}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |granulator| shape provides a spray drum with gas filter at bottom. This device is also referred to as an agglomerator and is aliased as such for the purpose of generating nodes in typical picture environments. The sprayer inlet can be connected at the |nw| (|north west|) anchor if desired. The underlying PGF shape is only known as a granulator. This shape has no |key=value| pairs for additional modification.

\subsubsection{Crystallizer}
\begin{lstlisting}[numbers=none]
\node[crystallizer] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{crystallizer}
			&
			\scaleicon{crystallizer}
			&
			\anchoricon{crystallizer}{1.5}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |crystallizer| shape provides a small liquid reactor with integrated stirrer and recycle loop with integrated heater for solids production. Anchors |sw| and |s| are positioned for typical feed and product line connections. This unit has no |key=value| pairs for additional modification.	
	
\subsection{Solids size reduction}
\subsubsection{Ball mill}
\begin{lstlisting}[numbers=none]
\node[ball mill] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{ball mill}
			&
			\scaleicon{ball mill}
			&
			\anchoricon{ball mill}{1.5}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |ball mill| shape provides a circle with smaller interior circles (balls) for solids pulverization. At large scale factors the interior circles may lose their alignment with the mill exterior or other circles. This unit has no |key=value| pairs for additional modification.

\subsubsection{Roll crusher}
\begin{lstlisting}[numbers=none]
\node[roll crusher] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{roll crusher}
			&
			\scaleicon{roll crusher}
			&
			\anchoricon{roll crusher}{1.5}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |roll crusher| shape provides a conical feeder with smaller interior circles (rollers) for solids pulverization. At large scale factors the interior circles may lose their alignment with the feeder exterior. This unit has no |key=value| pairs for additional modification.


\section{Streams}


\subsection{Feed terminal}
\begin{lstlisting}[numbers=none]
\node[feed] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[feed] {};	
			&
			\scalegrid
			\node[feed] {};
			&
			\node[feed, scale=3, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.stream) {};
			\node[right] at (f.stream) {\footnotesize\texttt{\textbf{e}} \textit{or} \redtt{stream}};
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/below right, 
				sw/below left}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |feed| shape provides a half-filled circle representing a process feed point. The special anchor \redtt{stream} corresponds to the |east| anchor and is provided as an optional method to define stream starting points. This unit has no |key=value| pairs for additional modification.




\subsection{Product terminal}
\begin{lstlisting}[numbers=none]
\node[product] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[product] {};	
			&
			\scalegrid
			\node[product] {};
			&
			\node[product, scale=3, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.stream) {};
			\node[left] at (f.stream) {\footnotesize \redtt{stream} \textit{or} \boldtt{w}};
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/below right, 
				sw/below left}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |product| shape provides a half-filled circle representing a process product point. The special anchor \redtt{stream} corresponds to the |west| anchor and is provided as an optional method to define stream ending points. This unit has no |key=value| pairs for additional modification.



\subsection{Stream numbers}
\begin{lstlisting}[numbers=none]
\node[sid] {99};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[sid] {99};	
			&
			\scalegrid
			\node[sid] {99};
			&
			\node[sid, scale=2, draw=lightgray, thick] (f) {99};
			\markpolar
					
			\foreach \anchor/\pos in {
				north/above, 
				east/right, 
				west/left, 
				south/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				north east/above right, 
				north west/above left, 
				south east/below right, 
				south west/below left}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |sid| (read ``ess eye dee'' for ``stream identification'') shape provides a modified |diamond| shape from the |shapes| library for the purpose of labeling streams. The anchors \textbf{are not aliased} with their abbreviations because \textit{(a)} this is not a custom shape of the |pfdicons| package and \textit{(b)} the |sid| shape is typically used within a line (stream) without accessing its anchors. The fill of |sid| is white which allows it to be conveniently placed within a stream-drawing command such as
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[->] (0,0) -- node[sid] {00} (2,0);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[->] (0,0) -- node[sid] {00} (2,0);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
The |sid| shape has no |key=value| pairs to modify its appearance but you can modify the appearance by redefining its |tikzstyle|, which by default is
\begin{lstlisting}[numbers=none]
\tikzstyle{sid} = [diamond, draw, solid, fill=white, text badly centered, inner sep=1pt, font=\footnotesize]
\end{lstlisting}
Modifications to this definition can occur either in the preamble (to affect all drawings) or within the document (to affect individual drawings or lines). For example, if you'd like to use circular identifiers with a blue fill and more space around bigger numbers then you could do something like this:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[->] (0,0) -- node[sid] {1} (2,0);
	
	\tikzstyle{sid} = [circle, draw, solid, fill=blue!15, text badly centered, inner sep=3pt, font=\tiny]
	
	\draw[->] (0,-1) -- node[sid] {2} (2,-1);
	
	\draw[->] (0,-2) -- node[sid] {3} (2,-2);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[->] (0,0) -- node[sid] {1} (2,0);
				
				\tikzstyle{sid} = [circle, draw, solid, 
				fill=blue!15, text badly centered,
				inner sep=3pt, font=\tiny]
				
				\draw[->] (0,-1) -- node[sid] {2} (2,-1);
				
				\draw[->] (0,-2) -- node[sid] {3} (2,-2);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
You can also modify individual parameters while retaining others by passing additional modifiers within the |sid| node usage, like this:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[->] (0,0) -- node[sid] {1} (2,0);
			
	\draw[->] (0,-1) -- node[sid, rectangle, fill=red!20] {2} (2,-1);
		
	\draw[->] (0,-2) -- node[sid] {3} (2,-2);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[->] (0,0) -- node[sid] {1} (2,0);
				
				\draw[->] (0,-1) -- node[sid, rectangle, fill=red!20] {2} (2,-1);
				
				\draw[->] (0,-2) -- node[sid] {3} (2,-2);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}




\subsection{Stream data pins}
Several \Tikz pins--|pfdpin1|, |pfdpin2|, and |pfdpin3|--have been defined to support display of stream properties such as temperature, pressure, mass flow rate, \textit{etc}. Choose the |pfdpinN| such that |N| is the number of information regions desired in the pin. These pins are modifications of the |rectangle split| pin and follow similar syntax, namely
\begin{lstlisting}[numbers=none]
node[pfdpin1={location:my text}] {}
\end{lstlisting}
where |location| can be |above|, |below|, |left|, or |right|. In the labeling of streams this node will typically be included as part of stream drawing statement along with |sid|, for example
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[->] (0,0) -- node[sid, pfdpin1={above:my text}] {99} (3,0);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[->] (0,0) -- node[sid, pfdpin1={above:my text}] {99} (3,0);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
It is not required that the |sid| node specification be provided. However the pin connector will connect to the exterior bounding box of the resulting invisible node, so options such as |inner sep| and |minimum height| or |minimum width| must be set to bring the pin to the desired connection point in that event. For example, 
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[->] (0,0) -- node[inner sep=0pt, pfdpin1={below:my text}] {} (3,0);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[->] (0,0) -- node[inner sep=0pt, pfdpin1={below:my text}] {} (3,0);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
Multiple entries--up to a maximum of 3-- can be obtained by using |pfdpin2| or |pfdpin3|, with corresponding text entries separated using |/|:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
% \usepackage{siunitx} to enable \qty function
\begin{tikzpicture}
	\draw[->] (0,0) -- (0.5,0) |- node[sid, pos=0.25, pfdpin2={right:\qty{150}{\celsius}/3 bar}] {A} (0,-1.5);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[->] (0,0) -- (0.5,0) |- node[sid, pos=0.25, pfdpin2={right:\qty{150}{\celsius}/3 bar}] {A} (0,-1.5);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
Functions have been provided to modify several aspects of the stream data pin without undertaking redefinition of the underlying |rectangle split| pin. For example,
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\setpfdpindrawcolor{red}
	\setpfdpintextcolor{black}
	\setpfdpinsecondtextcolor{blue}
	\setpfdpinthirdboxfillcolor{yellow}
	% appropriate pfdpin3 definition
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\setpfdpindrawcolor{red}
				\setpfdpintextcolor{black}
				\setpfdpinsecondtextcolor{blue}
				\setpfdpinthirdboxfillcolor{yellow}
				\draw[->] (0,0) -- (0.5,0) |- node[sid, pos=0.25, pfdpin3={right:\qty{500}{\mol\per\s}/\qty{150}{\celsius}/3 bar}] {A} (0,-1.5);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
The full list of available modification functions for |pfdpinN| is provided in the table below.

\begin{center}
	\begin{longtable}{p{2.25in}p{1.75in}c}
		\caption{Modifications for the \boldtt{pfdpinN} stream labels.}\\
		\toprule
		Function & Description & Example \\
		\midrule
		\endfirsthead
		
		\multicolumn{3}{c}{\tablename\ \thetable: Modifications for the \boldtt{pfdpinN} stream labels. \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		|\setpfdpindrawcolor{<color>}| \newline |\resetpfdpindrawcolor| & Set box and pin stroke color. Default is |gray|. &
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\setpfdpindrawcolor{red}
				\node [anchor=south west] (ref) {|\setpfdpindrawcolor{red}|};
				\node [below=0mm of ref] {
					\begin{tikzpicture}[baseline]
						\draw [->] (0,0) -- (0.3,0) |- node[sid, pos=0.1, pfdpin3={right:line 1/line 2/line 3}] (f) {X} (0,-1);
					\end{tikzpicture}
				};
				\resetpfdpinproperties
			\end{tikzpicture}} \\
		& & \\
		
		|\setpfdpintextcolor{<color>}| \newline 
		|\resetpfdpintextcolor|		
		& Set all pin text colors. Default is |gray|. &
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\setpfdpintextcolor{red}
				\node [anchor=south west] (ref) {|\setpfdpintextcolor{red}|};
				\node [below=0mm of ref] {
					\begin{tikzpicture}[baseline]
						\draw [->] (0,0) -- (0.3,0) |- node[sid, pos=0.1, pfdpin3={right:line 1/line 2/line 3}] (f) {X} (0,-1);
					\end{tikzpicture}
				};
				\resetpfdpinproperties
		\end{tikzpicture}} \\
		& & \\
		
		|\setpfdpinfirsttextcolor{<color>}| \newline 
		|\resetpfdpinfirsttextcolor|		
		& Set pin text color of first (top) box. Default is |gray|. Change |first| to |second| or |third| to target middle or bottom boxes. &
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\setpfdpinfirsttextcolor{red}
				\node [anchor=south west] (ref) {|\setpfdpinfirsttextcolor{red}|};
				\node [below=0mm of ref] {
					\begin{tikzpicture}[baseline]
						\draw [->] (0,0) -- (0.3,0) |- node[sid, pos=0.1, pfdpin3={right:line 1/line 2/line 3}] (f) {X} (0,-1);
					\end{tikzpicture}
				};
				\resetpfdpinproperties
		\end{tikzpicture}} \\
		& & \\
		
		|\setpfdpinboxfillcolor{<color>}| \newline 
		|\resetpfdpinboxfillcolor|		
		& Set all box fill colors. Default is |none|. &
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\setpfdpinboxfillcolor{red!10}
				\node [anchor=south west] (ref) {|\setpfdpinboxfillcolor{red!10}|};
				\node [below=0mm of ref] {
					\begin{tikzpicture}[baseline]
						\draw [->] (0,0) -- (0.3,0) |- node[sid, pos=0.1, pfdpin3={right:line 1/line 2/line 3}] (f) {X} (0,-1);
					\end{tikzpicture}
				};
				\resetpfdpinproperties
		\end{tikzpicture}} \\
		& & \\
		
		|\setpfdpinfirstboxfillcolor{<color>}| \newline 
		|\resetpfdpinfirstboxfillcolor|		
		& Set first (top) box fill colors. Default is |none|. Change |first| to |second| or |third| to target middle or bottom boxes. &
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\setpfdpinfirstboxfillcolor{red!10}
				\node [anchor=south west] (ref) {|\setpfdpinfirstboxfillcolor{red!10}|};
				\node [below=0mm of ref] {
					\begin{tikzpicture}[baseline]
						\draw [->] (0,0) -- (0.3,0) |- node[sid, pos=0.1, pfdpin3={right:line 1/line 2/line 3}] (f) {X} (0,-1);
					\end{tikzpicture}
				};
				\resetpfdpinproperties
		\end{tikzpicture}} \\
		& & \\
		
		|\setpfdpintextsize{<size>}| \newline 
		|\resetpfdpintextsize|		
		& Set all pin text size. Default is |\scriptsize|. &
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\setpfdpintextsize{\large}
				\node [anchor=south west] (ref) {|\setpfdpintextsize{\large}|};
				\node [below=0mm of ref] {
					\begin{tikzpicture}[baseline]
						\draw [->] (0,0) -- (0.3,0) |- node[sid, pos=0.1, pfdpin3={right:line 1/line 2/line 3}] (f) {X} (0,-1);
					\end{tikzpicture}
				};
				\resetpfdpinproperties
		\end{tikzpicture}} \\
		& & \\
		
		|\setpfdpindistance{<dist>}| \newline 
		|\resetpfdpindistance|		
		& Set length of pin connector. Default is |5pt|. &
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\setpfdpindistance{2cm}
				\node [anchor=south west] (ref) {|\setpfdpindistance{2cm}|};
				\node [below=0mm of ref] {
					\begin{tikzpicture}[baseline]
						\draw [->] (0,0) -- (0.3,0) |- node[sid, pos=0.1, pfdpin3={right:line 1/line 2/line 3}] (f) {X} (0,-1);
					\end{tikzpicture}
				};
				\resetpfdpinproperties
		\end{tikzpicture}} \\
		& & \\
		
		|\setpfdpinconnector{<style>}| \newline 
		|\resetpfdpinconnector|		
		& Set connector line style. Default is |solid|. Try increasing pin distance if effect is not observable. &
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\setpfdpindistance{1cm}
				\setpfdpinconnector{dashed}
				\node [anchor=south west] (ref) {|\setpfdpinconnector{dashed}|};
				\node [below=0mm of ref] {
					\begin{tikzpicture}[baseline]
						\draw [->] (0,0) -- (0.3,0) |- node[sid, pos=0.1, pfdpin3={right:line 1/line 2/line 3}] (f) {X} (0,-1);
					\end{tikzpicture}
				};
				\resetpfdpinproperties
		\end{tikzpicture}} \\
		& & \\
		
		|\resetpfdpinproperties| 	
		& Reset all |pfdpin| properties to the defaults noted above. & \\

	\end{longtable}
\end{center}






\subsection{Stream arrow tips}
The arrow tip is set using the standard TikZ syntax
\begin{lstlisting}[numbers=none]
\tikzset{>=<tip style>}
\end{lstlisting}
When loaded the |pfdicons| package sets |<tip style>| to |Triangle| as
\begin{lstlisting}[numbers=none]
\tikzset{>=Triangle}
\end{lstlisting}
You can change this setting in the preamble or within the document itself to whatever arrow tip you prefer (see \S16.5 in the PGF manual for a summary of arrow tips). For example,
\begin{center}
\begin{minipage}{5in}
\begin{lstlisting}
\begin{tikzpicture}
	\draw[->] (0,0) -- (1,0);
	
	\tikzset{>=Latex[open]} 
	\draw[->] (0,-0.5) -- (1,-0.5);	
	\draw[->] (0,-1) -- (1,-1);
\end{tikzpicture}
\end{lstlisting}
\end{minipage}\hspace{0.25in}
\begin{minipage}{1in}
\begin{center}
	\begin{tikzpicture}
		\draw[->] (0,0) -- (1,0);
		\tikzset{>=Latex[open]} % Latex-style arrow tip
		\draw[->] (0,-0.5) -- (1,-0.5);
		\draw[->] (0,-1) -- (1,-1);
	\end{tikzpicture}
\end{center}
\end{minipage}
\end{center}
You can also make modifications to individual arrow tips simply by using a different tip for that particular arrow:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[->] (0,0) -- (1,0);
	\draw[-{Stealth[red]}] (0,-0.5) -- (1,-0.5);
	\draw[->] (0,-1) -- (1,-1);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[->] (0,0) -- (1,0);
				\draw[-{Stealth[red]}] (0,-0.5) -- (1,-0.5);
				\draw[->] (0,-1) -- (1,-1);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}


\subsection{Stream crossings}
When two streams cross it's desirable to indicate their status as distinct streams to avoid confusion with junctions or mixing points. Consider the following example:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[->] (0,0.5) -- node[sid, pos=0.25]{1} (2,0.5);
	\draw[->] (0,0) -- node[sid]{2} (1.5,0) -- (1.5,1) -- (2,1);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[->] (0,0.5) -- node[sid, pos=0.25]{1} (2,0.5);
				\draw[->] (0,0) -- node[sid]{2} (1.3,0) -- (1.3,1) -- (2,1);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
It may not be immediately obvious that the intersection between streams 1 and 2 is not a four-way pipe junction with two inlets and two outlets. To make such distinction a \textit{bridge} can be used, most commonly in the form of a break in one stream, an arc of one stream, or a combination of a break and an arc. The |pfdicons| package provides a |bridge| style which uses the |spath3| package to detect crossings and create bridges. The workflow to use the |bridge| style is as follows:
\begin{enumerate}
	\item Identify that a crossing has occurred (\textit{e.g.}, by completing a drawing as done above). Determine which stream is to be drawn continuously (the |over| stream) and which stream is to be broken (the |under| stream).
	\item Re-define the original streams using the |path| operation, removing all decorations.
	\item Use the |bridge| key with |tikzset| to set the |over| and |under| paths as |\tikzset{bridge={over}{under}}|.
	\item Re-draw the streams with a |draw| operation, replacing any previously removed decorations.
\end{enumerate}
To demonstrate this process on the previous example we select stream 1 as the |over| stream (Turton recommends horizontal streams be continuous and vertical streams be broken). The remaining steps are completed as follows:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	% \draw[->] (0,0.5) -- node[sid, pos=0.25]{1} (2,0.5);
	% \draw[->] (0,0) -- node[sid]{2} (1.5,0) -- (1.5,1) -- (2,1);
	\path[spath/save=over] (0,0.5) -- (2,0.5);
	\path[spath/save=under] (0,0) -- (1.3,0) -- (1.3,1) -- (2,1);
	\tikzset{bridge={over}{under}}
	\draw[->, spath/use=over] node[sid, pos=0.15]{1};
	\draw[->, spath/use=under] node[sid, pos=0.1]{2};
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\path[spath/save=over] (0,0.5) -- (2,0.5);
				\path[spath/save=under] (0,0) -- (1.3,0) -- (1.3,1) -- (2,1);
				\tikzset{bridge={over}{under}}
				\draw[->, spath/use=over] node[sid, pos=0.2]{1};
				\draw[->, spath/use=under] node[sid, pos=0.1]{2};
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
Lines 4 and 5 define the original streams using the |path| operation. Line 6 sets the |bridge| key to identify the |over| and |under| stream (the names here could be anything as long as the first input is the ``over'' path and the second input is the ``under'' path). Lines 7 and 8 re-draw the streams with an appropriate \texttt{draw} operation, adding the stream labels as well. Notice that the positioning of the stream labels must be modified slightly from the original syntax; getting the labels \textit{precisely} where they were before the bridging operation can be challenging (but is usually not necessary).

The bridge style can be modified by using |\tikzset| to set the value of two keys, |bridge gap| and |bridge radius|, as summarized below.
\begin{center}
	\begin{longtable}{p{1in}p{3in}c}
		\caption{Key-value pairs for use with stream crossings}\\
		\toprule
		\texttt{key} & Description & Example \\
		\midrule
		\endfirsthead
		
		\multicolumn{3}{c}{\tablename\ \thetable: Key-value pairs for the use with stream crossings \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		\texttt{bridge gap} & Adjusts the amount of space around a stream break. The default value is |4pt|. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[above] at (1,1) {\footnotesize\verb|\tikzset{bridge gap=0pt}|};
				\tikzset{bridge gap=0pt}
				\path[spath/save=over] (0,0.5) -- (2,0.5);
				\path[spath/save=under] (0,0) -- (1,0) -- (1,1) -- (2,1);
				\tikzset{bridge={over}{under}}
				\draw[->, spath/use=over] ;
				\draw[->, spath/use=under] ;				
		\end{tikzpicture}} \\ 
		
		& & \\
		
		& & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[above] at (1,1) {\footnotesize\verb|\tikzset{bridge gap=15pt}|};
				\tikzset{bridge gap=15pt}
				\path[spath/save=over] (0,0.5) -- (2,0.5);
				\path[spath/save=under] (0,0) -- (1,0) -- (1,1) -- (2,1);
				\tikzset{bridge={over}{under}}
				\draw[->, spath/use=over] ;
				\draw[->, spath/use=under] ;				
		\end{tikzpicture}} \\ 
		
		& & \\
		
		\texttt{bridge radius} & Adjusts the radius of an arc bridge. The default value is |0pt| which produces a straight line. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[above] at (1,1) {\footnotesize\verb|\tikzset{bridge radius=8pt}|};
				\tikzset{bridge gap=4pt}
				\tikzset{bridge radius=8pt}
				\path[spath/save=over] (0,0.5) -- (2,0.5);
				\path[spath/save=under] (0,0) -- (1,0) -- (1,1) -- (2,1);
				\tikzset{bridge={over}{under}}
				\draw[->, spath/use=over] ;
				\draw[->, spath/use=under] ;				
		\end{tikzpicture}} \\ 
		
		& & \\
		
		& & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[above] at (1,1) {\footnotesize\verb|\tikzset{bridge radius=20pt}|};
				\tikzset{bridge radius=16pt}
				\path[spath/save=over] (0,0.5) -- (2,0.5);
				\path[spath/save=under] (0,0) -- (1,0) -- (1,1) -- (2,1);
				\tikzset{bridge={over}{under}}
				\draw[->, spath/use=over] ;
				\draw[->, spath/use=under] ;				
		\end{tikzpicture}} \\ 
		
		& & \\

	\end{longtable}
\end{center}

\section{Control elements}

\subsection{Valve}
\begin{lstlisting}[numbers=none]
\node[valve] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[valve] {};	
			&
			\scalegrid
			\node[valve] {};
			&
			\node[valve, scale=3, draw=lightgray, thick] (f) {};
			\markpolar
			
			\foreach \anchor/\pos in {
				n/above, 
				e/right, 
				w/left, 
				s/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/below right, 
				sw/below left}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}
The |valve| shape provides two opposing triangles as a generic valve shape. Unlike most other shapes the fill color of a |valve| shape is white which allows it to be conveniently placed within a line-drawing operation such as
\begin{center}
	\begin{minipage}{4in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[->] (0,0) -- node[valve] {} (2,0);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[->] (0,0) -- node[valve] {} (2,0);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
Placement of the valve on the stream can be modified using the standard placement keys (\textit{e.g.}, |middle| or |near start|) or by the |pos=number| key. The valve can also be rotated to an arbitrary angle using the |rotate=degree| key. For example:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[->] (0,0) -- node[valve, near start] {} (2,0);
	\draw[->] (0,-0.5) -- node[valve, near end] {} (2,-0.5);
	\draw[->] (0,-1) -- node[valve, pos=0.4] {} (2,-1);
	\draw[->] (0,-1.5) -- (1,-1.5) -- node[valve, rotate=90] {} (1,-2.5) -- ++(1,0);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[->] (0,0) -- node[valve, near start] {} (2,0);
				\draw[->] (0,-0.5) -- node[valve, near end] {} (2,-0.5);
				\draw[->] (0,-1) -- node[valve, pos=0.4] {} (2,-1);
				\draw[->] (0,-1.5) -- (1,-1.5) --node[valve, rotate=90] {}
				(1,-2.5) -- ++(1,0);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}


A generic actuator can be added to the |valve| shape by using the |unit ext| key as summarized below.
\begin{center}
	\begin{longtable}{p{1.5in}p{3in}c}
		\caption{Key-value pairs for the \boldtt{valve} shape.}\\
		\toprule
		\texttt{key=value} & Description & Example \\
		\midrule
		\endfirsthead
		
		\multicolumn{3}{c}{\tablename\ \thetable: Key-value pairs for the \boldtt{valve} shape \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		\texttt{unit ext=actuator} & Adds a hemisphere-capped protrusion as an indicator of a generic actuation device. The \redtt{actuator} anchor is placed at the top of the hemisphere for electrical connections. Polar coordinate border adjusts to include actuator; no other anchors are shifted. & 
		\adjustbox{valign=t}{
			\begin{tikzpicture}
				\node[valve, unit ext=actuator, scale=1.5] (f) {};
				\markpolar
				\foreach \anchor/\pos in {
					actuator/above}
				{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
					\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
		\end{tikzpicture}} \\ 
	\end{longtable}
\end{center}



\subsection{Non-return valve}
\begin{lstlisting}[numbers=none]
\node[nrv] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{nrv}
			&
			\scaleicon{nrv}
			&
			\anchoricon{nrv}{2}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |nrv| shape provides a slanted arrow between vertical lines as a no-return (or non-return) valve. The arrow tip is set to |Latex[round]| to distinguish the valve operation from other streams. Generally the direction of the arrow should indicate the allowable direction of flow; valve direction can be flipped with |xscale=-1|. This valve is intended to be placed on streams just as |valve| is, and thus the interior fill is white by default. This unit has no |key=value| pairs for additional modification. 


\subsection{Pressure relief valve}
\begin{lstlisting}[numbers=none]
\node[prv] {};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{prv}
			&
			\scaleicon{prv}
			&
			\anchoricon{prv}{2}
			\markcardinal
			\markoffcardinal
			\\
		};	
	\end{tikzpicture}
\end{figure}
The |prv| shape provides a pressure relief valve. The shape's center is offset to provide simple alignment in most use cases where the valve is located above another node, for example
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\node [tank reactor, unit int=liquid, unit ext=lower jacket] (r) {};
	\node [prv] at (r.nnw) {};
	\node [prv, red, xscale=-1] at (r.nne) {};
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\node [tank reactor, unit int=liquid, unit ext=lower jacket] (r) {};
				\node [prv] at (r.nnw) {};
				\node [prv, red, xscale=-1] at (r.nne) {};
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
The arrow tip is set to |Latex[round]| to distinguish the vent line from other streams. This unit has no |key=value| pairs for additional modification and does not support polar coordinate notation.





\subsection{Controller}
\begin{lstlisting}[numbers=none]
\node[ctrl, ctrl sense=X, ctrl type=YY] {};
\end{lstlisting}\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\plainicon{ctrl, ctrl sense=X, ctrl type=YY}
			&
			\scaleicon{ctrl, ctrl sense=X, ctrl type=YY}
			&
			\anchoricon{ctrl, ctrl sense=X, ctrl type=YY}{1.5}
			\markpolar
			\markcardinal
			\markoffcardinal
			\\
		};
	\end{tikzpicture}
\end{figure}
The |ctrl| shape provides a flexible controller shape for providing detailed controller information. The various |key=value| pairs shown below allow customization of measured variable, controller type, controller alarm, controller display, and controller numerical identification. Shape conventions follow those of Towler and Sinnott, 2013, Ch. 5.3.
\begin{center}
	\begin{longtable}{p{1.5in}p{4in}}
		\caption{Key-value pairs for the \boldtt{ctrl} shape.}\\
		\toprule
		\texttt{key} & Description \\
		\midrule
		\endfirsthead
		
		\multicolumn{2}{c}{\tablename\ \thetable: Key-value pairs for the \boldtt{ctrl} shape \textit{(cont'd)}} \\
		\midrule
		\endhead
		
		\bottomrule
		\endfoot
		
		\bottomrule
		\endlastfoot
		
		|ctrl sense| & Sets the process variable to be measured such as |T| = temperature, |P| = pressure, |F| = flow, \textit{etc}. This key must be combined with a controller type (below) to appear on the controller. This signal variable is copied to the |alarm| setting if provided. \\
		& \\
		|ctrl type| & Sets the type of controller. Typical types are |I| = indicating, |C| = controlling, |IC| = indicating controlling, |RC| = recording controlling, |T| = transmitting, |V| = final control element.\\
		& \\
		|ctrl display| & This key sets the shape outline--round or square--and the location of text. Allowable values are |field| = field controller (default, round), |panel| (round with horizontal line), |shared simple| (round and square together), and |shared full| (round, square, and horizontal line all together). \\
		& \\
		|ctrl alarm| & Alarm indicator. Allowable values are |L| = low alarm only, |H| = high alarm only, |LH| or |HL| = both high and low alarms. \\
		& \\
		|ctrl alarm side| & Sets the side on which alarm indicator will be drawn. Allowable values are |left| = left side, |right| = right side. \\
		& \\
		|ctrl numID| & Numerical value to serve as identification, up to 3 digits. \\
	\end{longtable}
\end{center}
Below are several examples. Combinations of |ctrl sense| and |ctrl type| should not exceed four characters to avoid sizing issues. In these examples, |ctrl sense=X| and |ctrl type=YY| for illustration purposes.
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}
		\matrix[ column sep=1cm, row sep=0.25cm, nodes={font=\footnotesize}]{%
			% Row 1:
			& 
			\node {\texttt{field}}; &
			\node {\texttt{panel}}; & 
			\node {\texttt{shared simple}}; &
			\node {\texttt{shared full}}; \\
			
			% Row 2:
			&
			\node[ctrl, ctrl display = field, ctrl sense = X, ctrl type = YY]{}; & 
			\node[ctrl, ctrl display = panel, ctrl sense = X, ctrl type = YY]{}; & 
			\node[ctrl, ctrl display = shared simple, ctrl sense = X, ctrl type = YY]{}; &
			\node[ctrl, ctrl display = shared full, ctrl sense = X, ctrl type = YY]{}; \\
			
			% Row 3:
			\node[align=left] {\texttt{ctrl numID = 222}}; &
			\node[ctrl, ctrl display = field, ctrl sense = X, ctrl type = YY, ctrl numID = 222]{}; & 
			\node[ctrl, ctrl display = panel, ctrl sense = X, ctrl type = YY, ctrl numID = 222]{}; & 
			\node[ctrl, ctrl display = shared simple, ctrl sense = X, ctrl type = YY, ctrl numID = 222]{}; &
			\node[ctrl, ctrl display = shared full, ctrl sense = X, ctrl type = YY, ctrl numID = 222,]{}; \\
			
			% Row 4:
			
			\node[align=left] {\texttt{ctrl alarm = LH}}; & 
			\node[ctrl, ctrl display = field, ctrl sense = X, ctrl type = YY, ctrl alarm = LH]{}; & 
			\node[ctrl, ctrl display = panel, ctrl sense = X, ctrl type = YY, ctrl alarm = LH]{}; & 
			\node[ctrl, ctrl display = shared simple, ctrl sense = X, ctrl type = YY, ctrl alarm = LH]{}; &
			\node[ctrl, ctrl display = shared full, ctrl sense = X, ctrl type = YY, ctrl alarm = LH]{}; \\
		};
	\end{tikzpicture}
\end{figure}





\subsection{Electrical instruments}

\begin{lstlisting}[numbers=none]
\node[elec] {XX};
\end{lstlisting}
\begin{figure}[h!]
	\centering
	\begin{tikzpicture}[line width=0.6pt]
		\matrix[column sep=1cm, row sep=1cm, nodes={font=\footnotesize}]{%
			\node[elec] {XX};	
			&
			\scalegrid
			\node[elec] {XX};
			&
			\node[elec, scale=2, draw=lightgray, thick] (f) {XX};
			\markpolar
			
			\foreach \anchor/\pos in {
				north/above, 
				east/right, 
				west/left, 
				south/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				north east/above right, 
				north west/above left, 
				south east/below right, 
				south west/below left}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\node[red] at (f.center) {$\times$};
			\\	
		};	
	\end{tikzpicture}
\end{figure}

The |elec| shape provides a modified |circle| shape from the |shapes| library for the purpose of indicating (in a general way) electrical instrumentation such as analyzers, transmitters, and controllers (see the |ctrl| node for more advanced controller design). The anchors \textbf{are not aliased} with their abbreviations because this is not a custom shape of the |pfdicons| package. The fill of |elec| is white which allows it to be conveniently placed within a stream-drawing command such as
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[dashed] (0,0) -- node[elec] {XX} (2,0);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[dashed] (0,0) -- node[elec] {XX} (2,0);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
The |elec| shape has no |key=value| pairs to modify its appearance but you can modify the appearance by redefining its |tikzstyle|, which by default is
\begin{lstlisting}[numbers=none]
\tikzstyle{elec} = [circle, draw, solid, fill=white, text badly centered, inner sep=1pt, font=\footnotesize]
\end{lstlisting}
Modifications to this definition can occur either in the preamble (to affect all drawings) or within the document (to subsequent drawings or lines). For example, if you'd like to use circular identifiers with a blue fill and more space around bigger numbers then you could do something like this:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[dashed] (0,0) -- node[elec] {TT} (2,0);
	
	\tikzstyle{elec} = [circle, draw, solid, fill=blue!15, text badly centered, inner sep=3pt, font=\tiny]
	
	\draw[dashed] (0,-1) -- node[elec] {LT} (2,-1);
	
	\draw[dashed] (0,-2) -- node[elec] {PT} (2,-2);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[dashed] (0,0) -- node[elec] {TT} (2,0);
			
				\tikzstyle{elec} = [circle, draw, solid, fill=blue!15, text badly centered, inner sep=3pt, font=\tiny]
				
				\draw[dashed] (0,-1) -- node[elec] {LT} (2,-1);
				
				\draw[dashed] (0,-2) -- node[elec] {PT} (2,-2);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}
You can also modify individual parameters while retaining others by passing additional modifiers within the |sid| node usage, like this:
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[dashed] (0,0) -- node[elec] {TT} (2,0);
	
	\draw[dashed] (0,-1) -- node[elec, rectangle, fill=red!20] {LT} (2,-1);
	
	\draw[dashed] (0,-2) -- node[elec] {PT} (2,-2);
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[dashed] (0,0) -- node[elec] {TT} (2,0);
			
				\draw[dashed] (0,-1) -- node[elec, rectangle, fill=red!20] {LT} (2,-1);
				
				\draw[dashed] (0,-2) -- node[elec] {PT} (2,-2);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}


\section{Examples}
The following examples use the |pfdicons| package to replicate process flow diagrams and other diagrams found in several standard undergraduate textbooks. The examples are generally grouped according to the (approximate) course in which they occur: material and energy balances, thermodynamics, reaction engineering, separations, process controls, and capstone design.

\textbf{Caution:} Sometimes copy/pasting example code will introduce artifacts (mostly whitespaces) into the pasted code which are not apparent in this document. If this occurs you can (1) check and remove any erroneous whitespaces in your pasted code, (2) type out the examples here by hand, or (3) copy the code directly from the |pfdicons-doc.tex| file on the CTAN page for this package.

\subsection{Material and energy balances}
\begin{enumerate}[itemindent=0.75in, leftmargin=0.25in, label=\textsc{\textbf{Example \arabic*:}}]
	
		\item A basic separation process consisting of a pump, flash unit, and valve. Source: Himmelblau, D.; Riggs, J. \textit{Basic Principles and Calculations in Chemical Engineering}, 8th ed.; Prentice Hall, 2012.
		\begin{center}
			\begin{tikzpicture}		
				\node[centrifugal pump, unit ext=outlet east] (c) {};
				\node[vessel, right=2cm of c.outlet] (s) {};				
				\draw[<-] (c.west) -- ++(-2,0);
				\draw[->] (c.outlet) -- (s.west);
				\draw[->] (s.north) -- ++(0,0.5) -- node[valve] {} ++(2,0);
				\draw[->] (s.south) |- ++(2,-0.5);		
			\end{tikzpicture}
		\end{center}
		\begin{lstlisting}
\begin{tikzpicture}		
	\node[centrifugal pump, unit ext=outlet east] (c) {};
	\node[vessel, right=2cm of c.outlet] (s) {};	
	\draw[<-] (c.west) -- ++(-2,0);
	\draw[->] (c.outlet) -- (s.west);
	\draw[->] (s.north) -- ++(0,0.5) -- node[valve] {} ++(2,0);
	\draw[->] (s.south) |- ++(2,-0.5);		
\end{tikzpicture}
		\end{lstlisting}
	
		\item A simplified ethylene dichloride synthesis process illustrating the reactor-separator-recycle-purge (RSRP) arrangement. Source: Himmelblau, D.; Riggs, J. \textit{Basic Principles and Calculations in Chemical Engineering}, 8th ed.; Prentice Hall, 2012.
		\begin{center}
			\begin{tikzpicture}		
				\node[tube reactor, unit int=packed] (r) {};
				\node[column, right=of r] (s) {};
				\coordinate [left=of r] (m); % helps set recycle merge point
				
				\draw[<-] (r.west) -- ++(-2,0);
				\draw[->] (r.east) -- (s.west);
				\draw[->] (s.south) |- ++(1,-0.5);
				\draw[->] (s.north) -- ++(0,1);
				\draw[->] (s.north) -- ++(0,0.5) -| (m);
			\end{tikzpicture}
		\end{center}		
		\begin{lstlisting}
\begin{tikzpicture}
	\node[tube reactor, unit int=packed] (r) {};
	\node[column, right=of r] (s) {};
	\coordinate [left=of r] (m);
		
	\draw[<-] (r.west) -- ++(-2,0);
	\draw[->] (r.east) -- (s.west);
	\draw[->] (s.south) |- ++(1,-0.5);
	\draw[->] (s.north) -- ++(0,1);
	\draw[->] (s.north) -- ++(0,0.5) -| (m);
\end{tikzpicture}
		\end{lstlisting}
\end{enumerate}


\subsection{Thermodynamics}
\begin{enumerate}[resume*]
	\item A simple steam power plant. Source: Figure 8.1 on pg. 270 in Smith, J.M.; Van Ness, H.C.; Abbot, M.M. \textit{Introduction to Chemical Engineering Thermodynamics}, 6th ed.; McGraw-Hill, 2001. 
	\begin{center}
	\begin{tikzpicture}[font=\footnotesize]	
		% Nodes
		\node [basic hx, rotate=90] (boiler) {};
		\node [turbine, below right=1cm and 2cm of boiler] (turbine) {};
		\node [basic hx, rotate=90, below left=of turbine] (cond) {};
		\node [centrifugal pump, below left=of boiler, unit int=inlet south, 
		unit ext=outlet north west] (pump) {};
		
		% Streams
		\draw[->] (boiler.south) -| (turbine.nnw);
		\draw[->] (turbine.sse) |- (cond.south);
		\draw[->] (cond.north) -| (pump.center);
		\draw[->] (pump.outlet) |- (boiler.north);
		
		% Labels
		\node[below] at (boiler.west) {Boiler};
		\node[above] at (cond.east) {Condenser};
		\node[left] at (turbine.west) {Turbine};
		\draw[<-] (boiler.east) -- node[pos=1.5] {$\dot{Q}_H$} ++(0,5mm);
		\draw[->] (cond.west) -- node[pos=1.5] {$\dot{Q}_C$} ++(0,-5mm);
		\draw[->] (turbine.east) -- node[pos=1.5] {$\dot{W}_s$} ++(5mm,0);
		\draw[<-] (pump.west) -- node[pos=1.5] {$\dot{W}_s$} ++(-5mm,0);
	\end{tikzpicture}
	\end{center}
		\begin{lstlisting}
\begin{tikzpicture}[font=\footnotesize]	
	% Units
	\node [basic hx, rotate=90] (boiler) {};
	\node [turbine, below right=1cm and 2cm of boiler] (turbine) {};
	\node [basic hx, rotate=90, below left=of turbine] (cond) {};
	\node [centrifugal pump, below left=of boiler, unit int=inlet south, unit ext=outlet north west] (pump) {};
	
	% Streams
	\draw[->] (boiler.south) -| (turbine.nnw);
	\draw[->] (turbine.sse) |- (cond.south);
	\draw[->] (cond.north) -| (pump.center);
	\draw[->] (pump.outlet) |- (boiler.north);
	
	% Labels
	\node[below] at (boiler.west) {Boiler};
	\node[above] at (cond.east) {Condenser};
	\node[left] at (turbine.west) {Turbine};
	\draw[<-] (boiler.east) -- node[pos=1.5] {$\dot{Q}_H$} ++(0,5mm);
	\draw[->] (cond.west) -- node[pos=1.5] {$\dot{Q}_C$} ++(0,-5mm);
	\draw[->] (turbine.east) -- node[pos=1.5] {$\dot{W}_s$} ++(5mm,0);
	\draw[<-] (pump.west) -- node[pos=1.5] {$\dot{W}_s$} ++(-5mm,0);
\end{tikzpicture}
		\end{lstlisting}
	

	\item A two-stage cascade refrigeration system. Here a |matrix| structure is used for node placement but one could equally use positioning keys (\textit{i.e.}, |above|, |below|, and so forth) to achieve similar placement. Source: Figure 9.3 on pg. 301 in Smith, J.M.; Van Ness, H.C.; Abbot, M.M. \textit{Introduction to Chemical Engineering Thermodynamics}, 6th ed.; McGraw-Hill, 2001.
	\begin{center}
	\begin{tikzpicture}[font=\footnotesize]
		% Nodes
		\matrix [column sep=1.5cm, row sep=0.75 cm] {
			% Row 1
			& \node[basic hx, rotate=90] (cond) {}; 
			& \\
			% Row 2
			\node[valve, rotate=90] (v2) {}; & 
			\node{\normalsize Cycle 2}; & 
			\node[turbine] (c2) {}; \\
			% Row 3
			& \node[shell and tube hx] (intx) {}; 
			& \\
			% Row 4
			\node[valve, rotate=90] (v1) {}; &
			\node{\normalsize Cycle 1}; &
			\node[turbine] (c1) {}; \\
			% Row 5
			& \node[basic hx, rotate=90] (evap) {}; & \\
		};
	
		% Streams
		\tikzset{>=Stealth} 
		% Upper loop
		\draw[->] (cond.n) -| (v2.e);
		\draw[->] (v2.w) |- (intx.wnw);
		\draw[->] (intx.ene) -| (c2.sse);
		\draw[->] (c2.nnw) |- (cond.s);
		% Lower loop
		\draw[->] (intx.wsw) -| (v1.e);
		\draw[->] (v1.w) |- (evap.n);
		\draw[->] (evap.s) -| (c1.sse);
		\draw[->] (c1.nnw) |- (intx.ese);
		
		% Labels
		\node[above] at (intx.north) {Interchanger};
		\node[below] at (cond.w) {Condenser at $T_H$};
		\node[above] at (evap.e) {Evaporator at $T_C$};
		\node[above left=1pt and 7mm of intx.wnw] {$T^{\prime}_C$};
		\node[below left=1pt and 7mm of intx.wsw] {$T^{\prime}_H$};
		
		\draw[<-] (c2.e) -- node[pos=2] {$W_s(2)$} ++(5mm,0);
		\draw[<-] (c1.e) -- node[pos=2] {$W_s(1)$} ++(5mm,0);
		\draw[->] (cond.e) -- node[pos=1.5] {$\lvert Q_H \rvert$} ++(0,5mm);
		\draw[<-] (evap.w) -- node[pos=1.5] {$\lvert Q_C \rvert$} ++(0,-5mm);
	\end{tikzpicture}
	\end{center}

	\begin{lstlisting}
\begin{tikzpicture}[font=\footnotesize]
	% \usetikzlibrary{matrix}
	% Units
	\matrix [column sep=1.5cm, row sep=0.75 cm] {
		% Row 1
		& \node[basic hx, rotate=90] (cond) {}; 
		& \\
		% Row 2
		\node[valve, rotate=90] (v2) {}; & 
		\node{\normalsize Cycle 2}; & 
		\node[turbine] (c2) {}; \\
		% Row 3
		& \node[shell and tube hx] (intx) {}; 
		& \\
		% Row 4
		\node[valve, rotate=90] (v1) {}; &
		\node{\normalsize Cycle 1}; &
		\node[turbine] (c1) {}; \\
		% Row 5
		& \node[basic hx, rotate=90] (evap) {}; & \\
	};
	
	% Streams
	\tikzset{>=Stealth} 
	% Upper loop
	\draw[->] (cond.n) -| (v2.e);
	\draw[->] (v2.w) |- (intx.wnw);
	\draw[->] (intx.ene) -| (c2.sse);
	\draw[->] (c2.nnw) |- (cond.s);
	% Lower loop
	\draw[->] (intx.wsw) -| (v1.e);
	\draw[->] (v1.w) |- (evap.n);
	\draw[->] (evap.s) -| (c1.sse);
	\draw[->] (c1.nnw) |- (intx.ese);
	
	% Labels
	\node[above] at (intx.north) {Interchanger};
	\node[below] at (cond.w) {Condenser at $T_H$};
	\node[above] at (evap.e) {Evaporator at $T_C$};
	\node[above left=1pt and 7mm of intx.wnw] {$T^{\prime}_C$};
	\node[below left=1pt and 7mm of intx.wsw] {$T^{\prime}_H$};
	
	\draw[<-] (c2.e) -- node[pos=2] {$W_s(2)$} ++(5mm,0);
	\draw[<-] (c1.e) -- node[pos=2] {$W_s(1)$} ++(5mm,0);
	\draw[->] (cond.e) -- node[pos=1.5] {$\lvert Q_H \rvert$} ++(0,5mm);
	\draw[<-] (evap.w) -- node[pos=1.5] {$\lvert Q_C \rvert$} ++(0,-5mm);
\end{tikzpicture}
	\end{lstlisting}
\end{enumerate}



\subsection{Reaction engineering}
\begin{enumerate}[resume*]
	\item A series of two CSTRs followed by a PFR as part of a discussion regarding Levenspiel plots. Source: Figure 2-10 on pg. 61 in Fogler, H.S. \textit{Elements of Chemical Reaction Engineering}, 4th ed.; Pearson, 2006.
	
	\begin{center}
		\begin{tikzpicture}[font=\footnotesize]
			% Custom point marker
			\tikzstyle{dot} = [circle, draw, fill=black, inner sep=1.5pt]
			
			% Units
			\node[tank reactor, unit int=stirred liquid] (R1) {};
			\node[tank reactor, unit int=stirred liquid, below right=of R1] 
			(R2) {};
			\node[tube reactor, unit int=tubular, right=2cm of R2.ese] (R3) {};
			
			% Streams
			\draw[<-] (R1.nnw) |- coordinate[at end] (p0) ++(-1.5,0.5);
			\draw[->] (R1.ese) -| node[dot, pos=0.3] (p1) {} (R2.nnw);
			\draw[->] (R2.ese) -- node[dot, pos=0.3] (p2) {} (R3.w);
			\draw[->] (R3.e) -- node[dot] (p3) {} coordinate[at end] (p4) ++(1.5,0);
			
			% Labels
			\node[left, align=right] at (p0) {$F_{A0}$\\$X=0$};
			\node[above] at (p1) {(1)};
			\node[right=5mm of p1, align=left] {$F_{A1}$\\$X_1$};
			\node[above] at (p2) {(2)};
			\node[above left, align=left] at (R3.w) {$F_{A2}$\\$X_2$};
			\node[above] at (p3) {(3)};
			\node[right, align=left] at (p4) {$F_{A3}$\\$X_3$};
		\end{tikzpicture}
	\end{center}
	\begin{lstlisting}
\begin{tikzpicture}[font=\footnotesize]
	% Custom point marker
	\tikzstyle{dot} = [circle, draw, fill=black, inner sep=1.5pt]
	
	% Units
	\node[tank reactor, unit int=stirred liquid] (R1) {};
	\node[tank reactor, unit int=stirred liquid, below right=of R1] (R2) {};
	\node[tube reactor, unit int=tubular, right=2cm of R2.ese] (R3) {};
	
	% Streams
	\draw[<-] (R1.nnw) |- coordinate[at end] (p0) ++(-1.5,0.5);
	\draw[->] (R1.ese) -| node[dot, pos=0.3] (p1) {} (R2.nnw);
	\draw[->] (R2.ese) -- node[dot, pos=0.3] (p2) {} (R3.w);
	\draw[->] (R3.e) -- node[dot] (p3) {} coordinate[at end] (p4) ++(1.5,0);
	
	% Labels
	\node[left, align=right] at (p0) {$F_{A0}$\\$X=0$};
	\node[above] at (p1) {(1)};
	\node[right=5mm of p1, align=left] {$F_{A1}$\\$X_1$};
	\node[above] at (p2) {(2)};
	\node[above left, align=left] at (R3.w) {$F_{A2}$\\$X_2$};
	\node[above] at (p3) {(3)};
	\node[right, align=left] at (p4) {$F_{A3}$\\$X_3$};
\end{tikzpicture}		
	\end{lstlisting}

	\item Two adiabatic reactors separated by a heat exchanger as part of a discussion regarding interstage heating and cooling. Source: Figure 11.2 on pg. 300 in Drews, A. \textit{An Introduction to Chemical Reaction Engineering with MATLAB}; \texttt{ceng113.eng.ucsd.edu} (2019).
	
	\begin{center}
	\begin{tikzpicture}[font=\footnotesize]
		% Units
		\node[tank reactor, unit int=stirred liquid] (R1) {};
		\node[basic hx, unit ext=util, right=2cm of R1] (HX1) {};
		\node[tube reactor, unit int=tubular, right=2cm of HX1] (R2) {};
		
		% Streams
		\draw[<-] (R1.w) -- node[above, near end] {0} ++(-2,0);
		\draw[->] (R1.e) -- node[above] {1} (HX1.w);
		\draw[->] (HX1.e) -- node[above] {2} (R2.w);
		\draw[->] (R2.e) -- node[above] {3} ++(2,0);

		% Control volumes
		\coordinate[above left=7mm and 5mm of R1.nw] (a);
		\coordinate[below right=7mm and 5mm of R1.se] (b);
		\coordinate[above left=9mm and 8mm of R1.nw] (c);
		\coordinate[below right=11mm and 5mm of R2.se] (d);
		\draw[dashed] (a) rectangle (b);
		\draw[dashed] (c) rectangle (d);	
			
		% Labels
		\node[below] at (R1.s) {R-1};
		\node[below] at (HX1.south util) {HX-1};
		\node[below] at (R2.s) {R-2};
		\node[anchor=base west] at (b) {\textbf{CV1}};
		\node[anchor=base west] at (d) {\textbf{CV2}};
	\end{tikzpicture}
	\end{center}

	\begin{lstlisting}
\begin{tikzpicture}[font=\footnotesize]
	% Units
	\node[tank reactor, unit int=stirred liquid] (R1) {};
	\node[basic hx, unit ext=util, right=2cm of R1] (HX1) {};
	\node[tube reactor, unit int=tubular, right=2cm of HX1] (R2) {};
	
	% Streams
	\draw[<-] (R1.w) -- node[above, near end] {0} ++(-2,0);
	\draw[->] (R1.e) -- node[above] {1} (HX1.w);
	\draw[->] (HX1.e) -- node[above] {2} (R2.w);
	\draw[->] (R2.e) -- node[above] {3} ++(2,0);
	
	% Control volumes
	\coordinate[above left=7mm and 5mm of R1.nw] (a);
	\coordinate[below right=7mm and 5mm of R1.se] (b);
	\coordinate[above left=9mm and 8mm of R1.nw] (c);
	\coordinate[below right=11mm and 5mm of R2.se] (d);
	\draw[dashed] (a) rectangle (b);
	\draw[dashed] (c) rectangle (d);	
	
	% Labels
	\node[below] at (R1.s) {R-1};
	\node[below] at (HX1.south util) {HX-1};
	\node[below] at (R2.s) {R-2};
	\node[anchor=base west] at (b) {\textbf{CV1}};
	\node[anchor=base west] at (d) {\textbf{CV2}};
\end{tikzpicture}
	\end{lstlisting}
\end{enumerate}




\subsection{Separations}
\begin{enumerate}[resume*]
	\item A general distillation system using a total condenser and partial reboiler. Some annotations have been excluded for clarity (clarity of this document, not the figure: if so desired it would only be a matter of additional |node| elements to replace the excluded annotations). Source: Figure 7.2 on pg. 261 in Seader, J.D.; Henley, E.J.; Roper, D.K. \textit{Separation Process Principles}, 3rd ed.; John Wiley and Sons, 2011. 
	\begin{center}
		\begin{tikzpicture}[font=\footnotesize]
			%\usetikzlibrary{decorations.pathmorphing}
			% Units	
			\node[column, unit int=numbered tray, scale=1.5] (c) {};
			\node[vessel, rotate=90, unit int=liquid rotated, above right=8mm 
			and 15mm of c, anchor=north] (drum) {};
			\node[basic hx, unit ext=util, above left=8mm and 5mm of drum.north] (cond) {};
			\node[basic hx, unit int=U tube, unit ext=util, rotate=90, below 
			right=5mm and 5mm of c, anchor=east] (reboil) {};
			
			% Helpful points
			\coordinate[left=3cm of c.west] (F);
			\coordinate[right=4cm of c.north east] (D);
			\coordinate[below right=2cm and 2.5cm of c.south east] (B);
			
			% Streams
			\draw[->] (c.north) |- (cond.west);
			\draw[->] (cond.east) -| (drum.east);
			\draw[->] (drum.west) |- (c.north east);
			\draw[->] (drum.west) |- (D);			
			\draw[->] (c.south) |- (reboil.north);
			\draw[->] (reboil.east) |- (c.south east);		
			\draw[->] (reboil.west) |- (B);			
			\draw[->] (F) -- node[valve, near end] {} (c.west);
			
			% Distillate labels
			\node[above=0.5pt of c.top tray] {1};	
			\node[left=5mm of c.top tray, anchor=east] {Top stage};
			\node[anchor=south west] at (c.ne) {Reflux};
			\node[above] at (D) {Distillate};
			\node[above right] at (cond.ne) {Total condenser};
			\node[above right] at (drum.south east) {Reflux drum};
			
			% Feed labels
			\node[above=0.5pt of c.feed tray] {$f$};
			\node[anchor=south west] at (F) {Feed};
			\node[right=5mm of c.feed tray, anchor=west] {Feed stage};
			\node[align=left, anchor=north west] at (F) {Light-key\\mole frac, $z_F$};
	
			% Bottoms labels
			\node[above=0.5pt of c.bottom tray] {$N$};
			\node[above] at (B) {Bottoms};
			\node[right] at (reboil.south) {Partial reboiler};
			\node[left=5mm of c.bottom tray, anchor=east, align=center] {Bottom\\stage};
			\node[below, align=center] at (D) {Light-key\\mole frac, $x_D$};	
			\node[below, align=center] at (B) {Light-key\\mole frac, $x_B$};
		\end{tikzpicture}
	\end{center}
	\begin{lstlisting}
\begin{tikzpicture}[font=\footnotesize]
	%\usetikzlibrary{decorations.pathmorphing}
	% Units	
	\node[column, unit int=numbered tray, scale=1.5] (c) {};
	\node[vessel, rotate=90, unit int=liquid rotated, above right=8mm and 15mm of c, anchor=north] (drum) {};
	\node[basic hx, unit ext=util, above left=8mm and 5mm of drum.north] (cond) {};
	\node[basic hx, unit int=U tube, unit ext=util, rotate=90, below right=5mm and 5mm of c, anchor=east] (reboil) {};
	
	% Helpful points
	\coordinate[left=3cm of c.west] (F);
	\coordinate[right=4cm of c.north east] (D);
	\coordinate[below right=2cm and 2.5cm of c.south east] (B);
	
	% Streams
	\draw[->] (c.north) |- (cond.west);
	\draw[->] (cond.east) -| (drum.east);
	\draw[->] (drum.west) |- (c.north east);
	\draw[->] (drum.west) |- (D);			
	\draw[->] (c.south) |- (reboil.north);
	\draw[->] (reboil.east) |- (c.south east);		
	\draw[->] (reboil.west) |- (B);			
	\draw[->] (F) -- node[valve, near end] {} (c.west);
	
	% Distillate labels
	\node[above=0.5pt of c.top tray] {1};	
	\node[left=5mm of c.top tray, anchor=east] {Top stage};
	\node[anchor=south west] at (c.ne) {Reflux};
	\node[above] at (D) {Distillate};
	\node[above right] at (cond.ne) {Total condenser};
	\node[above right] at (drum.south east) {Reflux drum};	
	
	% Feed labels
	\node[above=0.5pt of c.feed tray] {$f$};
	\node[anchor=south west] at (F) {Feed};
	\node[right=5mm of c.feed tray, anchor=west] {Feed stage};
	\node[align=left, anchor=north west] at (F) {Light-key\\mole frac, $z_F$};
	
	% Bottoms labels
	\node[above=0.5pt of c.bottom tray] {$N$};
	\node[above] at (B) {Bottoms};
	\node[right] at (reboil.south) {Partial reboiler};
	\node[left=5mm of c.bottom tray, anchor=east, align=center] {Bottom\\stage};
	\node[below, align=center] at (D) {Light-key\\mole frac, $x_D$};	
	\node[below, align=center] at (B) {Light-key\\mole frac, $x_B$};
\end{tikzpicture}
	\end{lstlisting}

\item A schematic of pressure-swing adsorption for the dehydration of air. In this diagram the original authors used approximately the same symbol for a filter as the adsorber, a similarity retained here. A matrix was again used to help with alignment and several |tikzstyle| definitions were used to create ``shortcut'' shapes for the |filter|, |ads|, and |pump| units. Source: Figure 15.2 on pg. 570 in Seader, J.D.; Henley, E.J.; Roper, D.K. \textit{Separation Process Principles}, 3rd ed.; John Wiley and Sons, 2011. 

\begin{center}
	\begin{tikzpicture}[font=\footnotesize]
		% \usetikzlibrary{matrix}
		
		% Definitions
		\tikzstyle{filter} = [tube reactor, unit int=packed, rotate=90, 
		scale=0.75];
		\tikzstyle{ads} = [tube reactor, unit int=packed, rotate=90];
		\tikzstyle{pump} = [reciprocating pump, yscale=-1];	
		
		% Nodes
		\matrix [column sep=1.5cm, row sep=0.5 cm] {
			% 4 columns:  & & & \\
			& & \node[filter] (f1) {}; & \\
			& & & \\
			& & & \\
			& \node[ads] (ads1) {}; & & \node[ads] (ads2) {};\\
			& & & \\
			& & \node[filter] (f2) {}; & \\ % f2
			\node[pump] (p) {}; & \node[basic hx, unit ext=util] (hx) {};& & \\ % pump+cooler
		};
			
		% Helper points
		\coordinate[above=5mm of f2.e] (v2); % for valves near f2
		\coordinate[below=11mm of f1.w] (v1); % for valves near f1
		
		% Streams
		\draw[<-] (p.w) -- node[pos=1.7] {Moist air} ++(-1,0);
		\draw[->] (p.e) -- (hx.w);
		\draw[->] (hx.e) -| (f2.w);
		\draw[->] (f2.e) -- (v2);
		\draw (v2) -| node[valve, near start] {} (ads1.w);
		\draw[->] (ads1.w |- v2) -- node[valve] {} node[anchor=north, at end] {Purge} ++(-2,0);
		\draw (v2) -| node[valve, near start] {} (ads2.w);
		\draw[->] (ads2.w |- v2) -- node[valve] {} node[anchor=north, at end] {Purge} ++(2,0);
		\draw (ads1.e) |- node[valve, near end] {} (v1) -| node[valve, near start] {} (ads2.e);
		\draw (v1) -- node[valve, rotate=90] {} (f1.w);
		\draw (ads1.e) -- ++(0,1.3) -| (ads2.e);
		\draw[->] (f1.e) -- ++(0,5mm);
		
		% Labels
		\node[right, align=center] at (f1.s) {Particulate\\filter};
		\node[right, align=center] at (ads2.s) {Adsorber\\no. 2};
		\node[left, align=center] at (ads1.n) {Adsorber\\no. 1};
		\node[right, align=center] at (f2.s) {Coalescing\\filter};
		\node[below, align=center] at (p.n) {Gas\\compressor};
		\node[below] at (hx.south util) {Aftercooler};
		\node[above] at (hx.north util) {cw};
		
	\end{tikzpicture}
\end{center}


\begin{lstlisting}
\begin{tikzpicture}[font=\footnotesize]
	% \usetikzlibrary{matrix}
	
	% Definitions
	\tikzstyle{filter} = [tube reactor, unit int=packed, rotate=90, scale=0.75];
	\tikzstyle{ads} = [tube reactor, unit int=packed, rotate=90];
	\tikzstyle{pump} = [reciprocating pump, yscale=-1];	
	
	% Nodes
	\matrix [column sep=1.5cm, row sep=0.5 cm] {
		% 4 columns:  & & & \\
		& & \node[filter] (f1) {}; & \\
		& & & \\
		& & & \\
		& \node[ads] (ads1) {}; & & \node[ads] (ads2) {};\\
		& & & \\
		& & \node[filter] (f2) {}; & \\ % f2
		\node[pump] (p) {}; & \node[basic hx, unit ext=util] (hx) {};& & \\ % pump+cooler
	};
	
	% Helper points
	\coordinate[above=5mm of f2.e] (v2); % for valves near f2
	\coordinate[below=11mm of f1.w] (v1); % for valves near f1
	
	% Streams
	\draw[<-] (p.w) -- node[pos=1.7] {Moist air} ++(-1,0);
	\draw[->] (p.e) -- (hx.w);
	\draw[->] (hx.e) -| (f2.w);
	\draw[->] (f2.e) -- (v2);
	\draw (v2) -| node[valve, near start] {} (ads1.w);
	\draw[->] (ads1.w |- v2) -- node[valve] {} node[anchor=north, at end] {Purge} ++(-2,0);
	\draw (v2) -| node[valve, near start] {} (ads2.w);
	\draw[->] (ads2.w |- v2) -- node[valve] {} node[anchor=north, at end] {Purge} ++(2,0);
	\draw (ads1.e) |- node[valve, near end] {} (v1) -| node[valve, near start] {} (ads2.e);
	\draw (v1) -- node[valve, rotate=90] {} (f1.w);
	\draw (ads1.e) -- ++(0,1.3) -| (ads2.e);
	\draw[->] (f1.e) -- ++(0,5mm);
	
	% Labels
	\node[right, align=center] at (f1.s) {Particulate\\filter};
	\node[right, align=center] at (ads2.s) {Adsorber\\no. 2};
	\node[left, align=center] at (ads1.n) {Adsorber\\no. 1};
	\node[right, align=center] at (f2.s) {Coalescing\\filter};
	\node[below, align=center] at (p.n) {Gas\\compressor};
	\node[below] at (hx.south util) {Aftercooler};
	\node[above] at (hx.north util) {cw};
	
\end{tikzpicture}
\end{lstlisting}
\end{enumerate}


\subsection{Process controls}
\begin{enumerate}[resume*]
	\item A comparison of feedforward and feedback control systems. This example illustrates the use of absolute positioning (only for variety, not because it's necessary). Source: Figure E1.9 on pg. 13 in Seborg, D.E.; Edgar, T.F.; Mellichamp, D.A.; Doyle III, F.J. \textit{Process Dynamics and Control}, 4th ed.; John Wiley and Sons, 2016. 
	\begin{center}
		\begin{tikzpicture}[font=\footnotesize]	
			% Feedforward system
			\draw[->] (0,0) -- ++(4,0);
			\node[elec] at (1, 0.5) (ft1) {FT};
			\node[elec] at (2, 1.2) (fc1) {FC};
			\node[valve, unit ext=actuator, scale=1.5] at (3,0) (v1) {};
			\node[left] at (0,0) {Liquid};
			\node[below] at (2,-0.1) {System A};
			\draw (1,0) -- (ft1.south);
			\draw[->, dashed] (ft1.north) |- (fc1.west);
			\draw[->, dashed] (fc1.east) -| (v1.actuator);
					
			% Feedback system
			\draw[->] (0,-2.5) -- ++(4,0);
			\node[valve, unit ext=actuator, scale=1.5] at (1,-2.5) (v2) {};
			\node[elec] at (2, -1.2) (fc2) {FC};
			\node[elec] at (3, -2) (ft2) {FT};
			
			\node[left] at (0,-2.5) {Liquid};
			\node[below] at (2,-2.6) {System B};
			\draw (3,-2.5) -- (ft2.south);
			\draw[->, dashed] (ft2.north) |- (fc2.east);
			\draw[->, dashed] (fc2.west) -| (v2.actuator);
		\end{tikzpicture}
	\end{center}
	\begin{lstlisting}
\begin{tikzpicture}[font=\footnotesize]	
	% Feedforward system
	\draw[->] (0,0) -- ++(4,0);
	\node[elec] at (1, 0.5) (ft1) {FT};
	\node[elec] at (2, 1.2) (fc1) {FC};
	\node[valve, unit ext=actuator, scale=1.5] at (3,0) (v1) {};
	\node[left] at (0,0) {Liquid};
	\node[below] at (2,-0.1) {System A};
	\draw (1,0) -- (ft1.south);
	\draw[->, dashed] (ft1.north) |- (fc1.west);
	\draw[->, dashed] (fc1.east) -| (v1.actuator);
	
	% Feedback system
	\draw[->] (0,-2.5) -- ++(4,0);
	\node[valve, unit ext=actuator, scale=1.5] at (1,-2.5) (v2) {};
	\node[elec] at (2, -1.2) (fc2) {FC};
	\node[elec] at (3, -2) (ft2) {FT};
	
	\node[left] at (0,-2.5) {Liquid};
	\node[below] at (2,-2.6) {System B};
	\draw (3,-2.5) -- (ft2.south);
	\draw[->, dashed] (ft2.north) |- (fc2.east);
	\draw[->, dashed] (fc2.west) -| (v2.actuator);
\end{tikzpicture}		
	\end{lstlisting}
	
	
	
	\item A blending system controlled by measuring the composition of the stream 1 and adjusting a control valve on stream two. Source: Figure 1.5 on pg. 5 in Seborg, D.E.; Edgar, T.F.; Mellichamp, D.A.; Doyle III, F.J. \textit{Process Dynamics and Control}, 4th ed.; John Wiley and Sons, 2016. 
	\begin{center}
		\begin{tikzpicture}[font=\footnotesize]	
			% Units
			\node[tank reactor, unit int=stirred liquid, scale=2] (r) {};
			\node[elec, above=of r] (ac) {AC};

			% Helpful points
			\coordinate[left=2cm of r.nw] (f1);
			\coordinate[right=2cm of r.ne] (f2);
			\coordinate[right=2cm of r.se] (p);
			
			% Streams and stream labels
			\draw[->] (f1) -- coordinate[pos=0.7] (s) (r.nw);
			\draw[->] (f2) -- node[valve, unit ext=actuator, pos=0.6] (v) {} (r.ne);
			\draw[->] (r.e) -- ++(3mm,0) |- (p);
			\node[left, align=right] at (f1) {$x_1$\\$w_1$};
			\node[right, align=left] at (f2) {$x_2=1$\\$w_2$};
			\node[right, align=left] at (p) {$x$\\$w$};
			
			% Control elements
			\node[elec, above=5mm of s] (at) {AT};
			\draw (s) -- (at.south);
			\draw[->, dashed] (at.north) |- (ac.west);
			\draw[->, dashed] (ac.east) -| (v.actuator);
			
			% Labels
			\node[align=center, anchor=south east] at (at.west) {Composition\\analyzer/transmitter};
			\node[align=left, anchor=south west] at (v.ne) {Control\\valve};
			\node[align=center, above] at (ac.north) {Composition\\controller};
		\end{tikzpicture}
	\end{center}
	\begin{lstlisting}
\begin{tikzpicture}[font=\footnotesize]	
	% Units
	\node[tank reactor, unit int=stirred liquid, scale=2] (r) {};
	\node[elec, above=of r] (ac) {AC};
	
	% Helpful points
	\coordinate[left=2cm of r.nw] (f1);
	\coordinate[right=2cm of r.ne] (f2);
	\coordinate[right=2cm of r.se] (p);
	
	% Streams and stream labels
	\draw[->] (f1) -- coordinate[pos=0.7] (s) (r.nw);
	\draw[->] (f2) -- node[valve, unit ext=actuator, pos=0.6] (v) {} (r.ne);
	\draw[->] (r.e) -- ++(3mm,0) |- (p);
	\node[left, align=right] at (f1) {$x_1$\\$w_1$};
	\node[right, align=left] at (f2) {$x_2=1$\\$w_2$};
	\node[right, align=left] at (p) {$x$\\$w$};
	
	% Control elements
	\node[elec, above=5mm of s] (at) {AT};
	\draw (s) -- (at.south);
	\draw[->, dashed] (at.north) |- (ac.west);
	\draw[->, dashed] (ac.east) -| (v.actuator);
	
	% Labels
	\node[align=center, anchor=south east] at (at.west) {Composition\\analyzer/transmitter};
	\node[align=center, anchor=south west] at (v.ne) {Control\\valve};
	\node[align=center, above] at (ac.north) {Composition\\controller};
\end{tikzpicture}			
	\end{lstlisting}



\item A typical control loop with transmitter, controller, alarms, and control element. Source: Figure 5.8 on pg. 221 in Sinnott, T.; Towler, G. \textit{Chemical Engineering Design}, 6th ed.; Elsevier, 2020. 
\begin{center}
	\begin{tikzpicture}[font=\footnotesize]	
		% Main elements
		\draw[thick] (0,0) -- (5cm, 0cm); % process stream
		\node [valve, unit ext=actuator, scale=1.5] (v) at (1cm, 0cm) {}; % valve w/ actuator
		\node [ctrl, ctrl sense=P, ctrl type=V, above right=2mm and 4mm of v.actuator] (pv) {}; % valve label 
		\node [ctrl, ctrl sense=P, ctrl type=T, above right=5mm and 15mm of v] (pt) {}; % transmitter
		\node [ctrl, 
			ctrl display=shared full, 
			ctrl sense=P, 
			ctrl type=IC,
			ctrl alarm=HL, ctrl alarm side=left, 
			right=of pt
		] (pic) {}; % indicating cont. w/ alarms
		
		% Lines
		\draw (pt.s) -- (pt.s |- v.w); % transmitter to process
		\draw[dashed] (pt.e) -- (pic.w); % transmitter to IC
		\draw[dashed] (pic.n) -- ++(0mm,5mm) -| (v.actuator); % IC to V
		\draw (pv.sw) -- ++(225:2.5mm); % unusual label		
	\end{tikzpicture}
\end{center}
\begin{lstlisting}
\begin{tikzpicture}
	% Process stream
	\draw[thick] (0,0) -- (5cm, 0cm);
	
	% Controller elements
	\node [valve, unit ext=actuator, scale=1.5] (v) at (1cm, 0cm) {};
	\node [ctrl, ctrl sense=P, ctrl type=V, above right=2mm and 4mm of v.actuator] (pv) {};
	\node [ctrl, ctrl sense=P, ctrl type=T, above right=5mm and 15mm of v] (pt) {}; 
	\node [ctrl, 
		ctrl display=shared full, 
		ctrl sense=P, 
		ctrl type=IC,
		ctrl alarm=HL, 
		ctrl alarm side=left, 
		right=of pt
	] (pic) {};
	
	% Signal lines
	\draw (pt.s) -- (pt.s |- v.w);
	\draw[dashed] (pt.e) -- (pic.w);
	\draw[dashed] (pic.n) -- ++(0mm,5mm) -| (v.actuator);
	\draw (pv.sw) -- ++(215:2mm);
\end{tikzpicture}	
\end{lstlisting}

\end{enumerate}

\newpage
\subsection{Capstone processes}
\begin{enumerate}[resume*]
	\item Hydrodealkylation of toluene to produce benzene. Source: Figure 1.3 in Turton, R.; Bailie, R.C.; Whiting, W.B.; Shaeiwitz, J.A. \textit{Analysis, Synthesis, and Design of Chemical Processes}, 3rd ed.; Pearson, 2009. 
\end{enumerate}


\begin{center}
	\makebox[\textwidth][c]{%
		\begin{tikzpicture}[font=\footnotesize]
			% Reduce stream label sizes
			\tikzstyle{sid} = [diamond, draw, solid, fill=white, text badly centered, inner sep=1pt, font=\tiny]
			
			% Units	
			\node[vessel, rotate=90] (V101) {};
			\node[reciprocating pump, below right=0.75cm and 0.5cm of V101] (P101) {};
			\node[basic hx, unit ext=util, above right=0.25cm and 2.75cm of V101] (E101) {};
			\node[fired hx, below right=1cm and 0.6cm of E101, anchor=west] (H101) {};
			\node[tube reactor, unit int=packed, right=of H101, anchor=center, rotate=90] (R101) {};
			\node[turbine, right=1.5cm of R101.se] (C101) {};
			\node[basic hx, unit ext=util, below=of C101] (E102) {};
			\node[vessel, unit int=phase sep, right=0.5cm of E102] (V102) {};
			\node[vessel, unit int=phase sep, below=of V102.se, anchor=west] (V103) {};
			\node[basic hx, unit ext=util, right=2.75cm of C101] (E103) {};
			\node[column, unit int=tray, right=1cm of E103] (T101) {};
			\node[basic hx, unit ext=util, below left=0.5cm and 0.7cm of T101.s] (E106) {};
			\node[basic hx, unit ext=util, above right=0.5cm and 1cm of T101.n] (E104) {};
			\node[vessel, rotate=90, below right=1cm and 0.5cm of E104] (V104) {};
			\node[centrifugal pump, below=1cm of V104.nw] (P102) {};
			\node[basic hx, unit ext=util, below=0.5cm of P102] (E105) {};
			\node[product, right=1.3cm of E105] (bz) {};
			\node[product, above=4.5cm of bz] (fuel) {};
			\node[feed, above left=0.75cm and 1cm of V101.ne] (tol) {};
			\node[feed, below=3.5cm of tol] (h2) {};
			
			% Streams
			\draw[->] (tol.e) -| node[sid, near start]{1} node[valve, near end, rotate=90]{} (V101.ne);
			\draw[->] (V101.sw) |- (P101.w);
			\draw[->] (P101.n) |- (E101.w);
			\draw[<-] (V101.se) |- node[valve, pos=0.6]{} node[sid, pos=0.83]{2} (E101.w) node[pos=0.92](n1){} ;
			\draw[->] (E101.e) -- ++(0.2,0) |- node[sid, near start]{4} (H101.w);
			\draw[->] (H101.e) -| node[sid,near end]{6} ++(0.3,1) -| (R101.e);	
			\draw[->] (E102.e) -- (V102.w);
			\draw[->] (V102.s) |- node[valve, rotate=90, near start]{} (V103.w);
			\draw[->] (V103.s) |- node[valve, rotate=90, near start]{} ++(0.5,-0.6) |- node[sid, near start]{18} (E103.w);
			\draw[->] (E103.e) -- node[sid, pos=0.4]{10} (T101.w);			
			\draw[->] (T101.ssw) |- (E106.e);
			\draw[->] (E106.w) -- ++(-0.2,0) |- (T101.sw);		
			\draw[->] (T101.n) |- node[sid,near end]{13} (E104.w);
			\draw[->] (E104.e) -| (V104.ne);
			\draw[->] (V104.sw) |- (P102.e);
			\draw[->] (P102.w) -- ++(-0.75,0) |- node[sid,pos=0.15]{12} node[valve,rotate=90,pos=0.4]{} (T101.ne);
			\draw[->] (P102.w) -- node[sid]{14} ++(-0.75,0) |- node[valve,rotate=90,near start]{} (E105.w);
			\draw[->] (E105.e) -- (bz.w);
			\draw[->] (V103.n) |- node[sid, pos=0.2]{17} node[valve,rotate=90, pos=0.3]{} (fuel.w);
			\draw[->] (V102.n) |- node[sid, pos=0.2]{8} node[valve,rotate=90, pos=0.3]{} node[sid, pos=0.96]{16} (fuel.w);
			\draw[->] (V104.e) -- node[sid,pos=0.3]{19} node[valve,rotate=90,pos=0.6]{} (V104 |- fuel);
			\draw[->] (V102.n) |- (C101.e);
			\draw[->] (C101.w) -- node[valve, near start]{} node[sid,near end]{7} (R101.se) node[pos=0.5](n2){};	
			
			
			% Cross stream 9 over 5
			\path[spath/save=over1] (R101.w) |- (E102.w);
			\path[spath/save=under1] (n2 |- C101) |- (n1 |- V103)  -| (n1 |- E101);
			\tikzset{bridge={over1}{under1}}	
			\draw[->, spath/use=over1] node[sid, pos=0.5]{9};
			\draw[->, spath/use=under1] node[sid, pos=0.5]{5};
			
			
			% Cross stream 3 over 11
			\path[spath/save=over2] (h2.e) -- (n1 |- h2);
			\path[spath/save=under2] (T101.s) -- ++(0,-3.5) -| (V101.w);
			\tikzset{bridge={over2}{under2}}
			\draw[->, spath/use=over2] node[sid, pos=0.2]{3};
			\draw[->, spath/use=under2] node[sid, pos=0.4]{11};
			
			
			% Unit labels
			\node at (V101.center) {V-101};
			\node[below] at (P101.s) {P-101};
			\node[above] at (E101.north util) {E-101};
			\node[left] at (H101.sw) {H-101};
			\node[above=4mm of R101.e] {R-101};
			\node[above=1mm of C101.n] {C-101};
			\node[below] at (E102.south util) {E-102};
			\node[left, anchor=south east] at (V102.n) {V-102};
			\node[below left, anchor=north east] at (V103.sw) {V-103};
			\node[above] at (E103.north util) {E-103};
			\node[above left] at (T101.nw) {T-101};
			\node[above] at (E104.north util) {E-104};
			\node at (V104.center) {V-104};
			\node[above] at (P102.n) {P-102};
			\node[below] at (E105.south util) {E-105};
			\node[below] at (E106.south util) {E-106};
			
			% Stream labels
			\node[above] at (tol.n) {toluene};
			\node[above] at (h2.n) {hydrogen};
			\node[below] at (bz.s) {benzene};
			\node[above] at (fuel.n) {fuel gas};
			
			% Utility labels
			\tikzset{font=\scriptsize}
			\node[right] at (E105.north util) {cw};
			\node[below] at (E104.south util) {cw};
			\node[above] at (E102.north util) {cw};
			\node[right] at (E106.north util) {mps};
			\node[below] at (E101.south util) {hps};
			
			\draw[->] (H101.n) -- node[at end, right, align=center] {combustion\\products} ++(0,0.8);
			\draw[<-] (H101.sse) -- node[right, align=left] {fuel\\gas} ++(0,-0.8);
			\draw[<-] (H101.ssw) -- node[left] {air} ++(0,-0.8);	
		\end{tikzpicture}
	}
\end{center}

\begin{lstlisting}
\begin{tikzpicture}[font=\footnotesize]
	% Reduce stream label sizes
	\tikzstyle{sid} = [diamond, draw, solid, fill=white, text badly centered, inner sep=1pt, font=\tiny]
	
	% Units	
	\node[vessel, rotate=90] (V101) {};
	\node[reciprocating pump, below right=0.75cm and 0.5cm of V101] (P101) {};
	\node[basic hx, unit ext=util, above right=0.25cm and 2.75cm of V101] (E101) {};
	\node[fired hx, below right=1cm and 0.6cm of E101, anchor=west] (H101) {};
	\node[tube reactor, unit int=packed, right=of H101, anchor=center, rotate=90] (R101) {};
	\node[turbine, right=1.5cm of R101.se] (C101) {};
	\node[basic hx, unit ext=util, below=of C101] (E102) {};
	\node[vessel, unit int=phase sep, right=0.5cm of E102] (V102) {};
	\node[vessel, unit int=phase sep, below=of V102.se, anchor=west] (V103) {};
	\node[basic hx, unit ext=util, right=2.75cm of C101] (E103) {};
	\node[column, unit int=tray, right=1cm of E103] (T101) {};
	\node[basic hx, unit ext=util, below left=0.5cm and 0.7cm of T101.s] (E106) {};
	\node[basic hx, unit ext=util, above right=0.5cm and 1cm of T101.n] (E104) {};
	\node[vessel, rotate=90, below right=1cm and 0.5cm of E104] (V104) {};
	\node[centrifugal pump, below=1cm of V104.nw] (P102) {};
	\node[basic hx, unit ext=util, below=0.5cm of P102] (E105) {};
	\node[product, right=1.3cm of E105] (bz) {};
	\node[product, above=4.5cm of bz] (fuel) {};
	\node[feed, above left=0.75cm and 1cm of V101.ne] (tol) {};
	\node[feed, below=3.5cm of tol] (h2) {};
	
	% Streams
	\draw[->] (tol.e) -| node[sid, near start]{1} node[valve, near end, rotate=90]{} (V101.ne);
	\draw[->] (V101.sw) |- (P101.w);
	\draw[->] (P101.n) |- (E101.w);
	\draw[<-] (V101.se) |- node[valve, pos=0.6]{} node[sid, pos=0.83]{2} (E101.w) node[pos=0.92](n1){} ;
	\draw[->] (E101.e) -- ++(0.2,0) |- node[sid, near start]{4} (H101.w);
	\draw[->] (H101.e) -| node[sid,near end]{6} ++(0.3,1) -| (R101.e);	
	\draw[->] (E102.e) -- (V102.w);
	\draw[->] (V102.s) |- node[valve, rotate=90, near start]{} (V103.w);
	\draw[->] (V103.s) |- node[valve, rotate=90, near start]{} ++(0.5,-0.6) |- node[sid, near start]{18} (E103.w);
	\draw[->] (E103.e) -- node[sid, pos=0.4]{10} (T101.w);			
	\draw[->] (T101.ssw) |- (E106.e);
	\draw[->] (E106.w) -- ++(-0.2,0) |- (T101.sw);		
	\draw[->] (T101.n) |- node[sid,near end]{13} (E104.w);
	\draw[->] (E104.e) -| (V104.ne);
	\draw[->] (V104.sw) |- (P102.e);
	\draw[->] (P102.w) -- ++(-0.75,0) |- node[sid,pos=0.15]{12} node[valve,rotate=90,pos=0.4]{} (T101.ne);
	\draw[->] (P102.w) -- node[sid]{14} ++(-0.75,0) |- node[valve,rotate=90,near start]{} (E105.w);
	\draw[->] (E105.e) -- (bz.w);
	\draw[->] (V103.n) |- node[sid, pos=0.2]{17} node[valve,rotate=90, pos=0.3]{} (fuel.w);
	\draw[->] (V102.n) |- node[sid, pos=0.2]{8} node[valve,rotate=90, pos=0.3]{} node[sid, pos=0.96]{16} (fuel.w);
	\draw[->] (V104.e) -- node[sid,pos=0.3]{19} node[valve,rotate=90,pos=0.6]{} (V104 |- fuel);
	\draw[->] (V102.n) |- (C101.e);
	\draw[->] (C101.w) -- node[valve, near start]{} node[sid,near end]{7} (R101.se) node[pos=0.5](n2){};	
	
	% Cross stream 9 over 5
	\path[spath/save=over1] (R101.w) |- (E102.w);
	\path[spath/save=under1] (n2 |- C101) |- (n1 |- V103)  -| (n1 |- E101);
	\tikzset{bridge={over1}{under1}}	
	\draw[->, spath/use=over1] node[sid, pos=0.5]{9};
	\draw[->, spath/use=under1] node[sid, pos=0.5]{5};	
	
	% Cross stream 3 over 11
	\path[spath/save=over2] (h2.e) -- (n1 |- h2);
	\path[spath/save=under2] (T101.s) -- ++(0,-3.5) -| (V101.w);
	\tikzset{bridge={over2}{under2}}
	\draw[->, spath/use=over2] node[sid, pos=0.2]{3};
	\draw[->, spath/use=under2] node[sid, pos=0.4]{11};
	
	% Unit labels
	\node at (V101.center) {V-101};
	\node[below] at (P101.s) {P-101};
	\node[above] at (E101.north util) {E-101};
	\node[left] at (H101.sw) {H-101};
	\node[above=4mm of R101.e] {R-101};
	\node[above=1mm of C101.n] {C-101};
	\node[below] at (E102.south util) {E-102};
	\node[left, anchor=south east] at (V102.n) {V-102};
	\node[below left, anchor=north east] at (V103.sw) {V-103};
	\node[above] at (E103.north util) {E-103};
	\node[above left] at (T101.nw) {T-101};
	\node[above] at (E104.north util) {E-104};
	\node at (V104.center) {V-104};
	\node[above] at (P102.n) {P-102};
	\node[below] at (E105.south util) {E-105};
	\node[below] at (E106.south util) {E-106};
	
	% Stream labels
	\node[above] at (tol.n) {toluene};
	\node[above] at (h2.n) {hydrogen};
	\node[below] at (bz.s) {benzene};
	\node[above] at (fuel.n) {fuel gas};
	
	% Utility labels
	\tikzset{font=\scriptsize}
	\node[right] at (E105.north util) {cw};
	\node[below] at (E104.south util) {cw};
	\node[above] at (E102.north util) {cw};
	\node[right] at (E106.north util) {mps};
	\node[below] at (E101.south util) {hps};
	
	\draw[->] (H101.n) -- node[at end, right, align=center] {combustion\\products} ++(0,0.8);
	\draw[<-] (H101.sse) -- node[right, align=left] {fuel\\gas} ++(0,-0.8);
	\draw[<-] (H101.ssw) -- node[left] {air} ++(0,-0.8);	
\end{tikzpicture}	
\end{lstlisting}


\newgeometry{margin=0.5in}
\pagenumbering{gobble}

\section{Quick reference}
\subsection*{Heat exchangers}
\begin{center}
	\begin{tikzpicture}[font=\footnotesize\ttfamily]
		\matrix[
		column sep=0.25cm,
		row sep=0.25cm,
		column1/.style={nodes={anchor=center}},
		column2/.style={nodes={anchor=center}},
		column2/.style={nodes={anchor=center}}]{
			% ========================== 
			% Header
			% ==========================
			\node (s) {\normalsize\textbf{shape name}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{default}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{anchors}};
			\draw (s.south west) -- (s.south east);
			& 
			\node (s) {\normalsize\textbf{unit int}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{unit ext}};
			\draw (s.south west) -- (s.south east);
			\\
			
			
			
			% ========================== 
			% Basic hx
			% ========================== 
			\node {basic hx};
			& 
			\node [basic hx] {};
			&
			\anchoricon{basic hx}{1.5}
			\markcardinal
			\markoffcardinal
			&
			\node[basic hx, unit ext=util, draw=white] (f) {};
			\node[basic hx, unit int=U tube, below=of f] (g) {};
			\node[left] at (g.west) {U tube};
			&
			\node[basic hx, unit ext=util] (f) {};
			\node[left] at (f.west) {util};
			\foreach \anchor/\pos in {
				north util/right,
				south util/left}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\color{red}\footnotesize\texttt{\anchor}};}
			
			\node[basic hx, unit int=U tube, unit ext=util, below=of f] (g) 
			{};
			\node[left] at (g.west) {util};
			\foreach \anchor/\pos in {
				west util/left,
				east util/right}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (g.\anchor) {};
				\node[\pos] at (g.\anchor) {\color{red}\anchor};
			}
			
			\\ \hline
			
			% ========================== 
			% Shell and tube hx
			% ==========================
			\node {shell and tube hx};
			&
			\node[shell and tube hx] {};
			&
			\anchoricon{shell and tube hx}{1.5}
			\markcardinal

			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/below right, 
				sw/below left,
				nne/above, 
				nnw/above, 
				sse/below, 
				ssw/below,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}

			&
			\node[shell and tube hx, unit int=two pass] (f) {};
			\node[left] at (f.west) {two pass};
			\node[shell and tube hx, unit int=four pass, below=0.5cm of f] (g) 
			{};
			\node[left] at (g.west) {four pass};
			&
			\node[shell and tube hx, unit ext=cis shell] (f) {};
			\foreach \anchor/\pos in {west shell/above left, east shell/above right}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\color{red}\anchor};}
			\node[left] at (f.west) {cis shell};
			
			\node[shell and tube hx, unit ext=trans shell, below=7mm of f] (g) {};
			\foreach \anchor/\pos in {north shell/above, south shell/below}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (g.\anchor) {};
				\node[\pos] at (g.\anchor) {\color{red}\anchor};}
			\node[left] at (g.west) {trans shell};
			
			\\ \hline
			
			% ========================== 
			% Plate hx
			% ==========================
			\node {plate hx};
			&
			\node[plate hx] {};
			&
			\anchoricon{plate hx}{1.8}
			\markcardinal
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/below right, 
				sw/below left,
				nne/above, 
				nnw/above, 
				sse/below, 
				ssw/below,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}

			&
			% no unit int
			&
			% no unit ext
			\\ \hline
			
			% ========================== 
			% Fired hx
			% ==========================
			\node {fired hx};
			&
			\node[fired hx] {};
			&
			\anchoricon{fired hx}{1}
			\markcardinal
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/right, 
				sw/left,
				nne/right, 
				nnw/left, 
				sse/below right, 
				ssw/below left,
				ese/below right, 
				wsw/below left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}

			&
			\node[fired hx, unit int=double] at (0,3mm) (f) {};
			\node[left=0.7cm of f.west] {double};
			\foreach \anchor/\pos in {
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue, inner sep=0pt, minimum size=2pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\color{gray}\footnotesize\texttt{\anchor}};}
			
			\node[fired hx, unit int=triple, below=3mm of f] (g) {};
			\node[left=0.7cm of g.west] {triple};
			\foreach \anchor/\pos in {
				nne/right, 
				nnw/left, 
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue, inner sep=0pt, minimum size=2pt] at (g.\anchor) {};
				\node[\pos] at (g.\anchor) {\color{gray}\footnotesize\texttt{\anchor}};}
			&
			% no unit ext
			\\ \hline
			
			% ========================== 
			% Cooling tower
			% ==========================
			% text
			\node{cooling tower};
			& 
			% basic shape
			\node[cooling tower] {};
			&
			% anchors
			\anchoricon{cooling tower}{1};
			\markcardinal
			\foreach \anchor/\pos in {
				ne/right, 
				nw/left, 
				se/right, 
				sw/left,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			& 
			% unit int options
			&
			% unit ext options
			\node[cooling tower, unit ext=forced] (f) {};
			\node[cooling tower, unit ext=natural, below=3mm of f] (g) {};
			\node[anchor=east] at (f.west) {forced};
			\node[anchor=east] at (g.west) {natural};
			
			\\
		};
	\end{tikzpicture}
\end{center}



\newpage
\subsection*{Vessels}
\begin{center}
	\begin{tikzpicture}[font=\footnotesize\ttfamily]
		\matrix[
		column sep=0.25cm,
		row sep=0.25cm,
		column1/.style={nodes={anchor=center}},
		column2/.style={nodes={anchor=center}},
		column2/.style={nodes={anchor=center}}]{
			% ========================== 
			% Header
			% ==========================
			\node (s) {\normalsize\textbf{shape name}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{default}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{anchors}};
			\draw (s.south west) -- (s.south east);
			& 
			\node (s) {\normalsize\textbf{unit int}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{unit ext}};
			\draw (s.south west) -- (s.south east);
			\\ 
			
			
			% ========================== 
			% Tank reactor
			% ========================== 
			\node[align=center] {tank\\reactor};
			&
			\node[tank reactor] {}; 
			&
			\anchoricon{tank reactor}{1}
			\markcardinal
			
			\foreach \anchor/\pos in {
				ne/right, 
				nw/left, 
				se/right, 
				sw/left,
				nne/above right, 
				nnw/above left, 
				sse/below right, 
				ssw/below left,
				ese/right, 
				wsw/left}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}

			& 
			\node[tank reactor, unit int=stirred] at (0,-3mm) (f) {};
			\node[left] at (f.west) {stirred};
			\foreach \anchor/\pos in {west motor/left, north motor/above}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\color{red}\anchor};
			}
			\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.east motor) {};
			\node[rotate=-90, above] at (f.east) {\color{red}east motor};
			
			\node[tank reactor, unit int=liquid, below=3mm of f] (g) {};
			\node[left] at (g.west) {liquid}; 
			\node[tank reactor, unit int=stirred liquid, below=5mm of g] (h) 
			{};
			\node[left, align=right] at (h.west) {stirred\\liquid};
			&
			\node[tank reactor, unit ext=lower jacket] (f) {}; 
			\node[align=center, below] at (f.s) {lower\\[-3pt]jacket};
			\foreach \anchor/\pos in {
				west jacket/left,
				east jacket/right}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};}
			
			\node[align=left, anchor=west] at (f.east jacket) {\color{red}east\\[-3pt]\color{red}jacket};
			\node[align=right, anchor=east] at (f.west jacket) {\color{red}west\\[-3pt]\color{red}jacket};
			
			
			\node[tank reactor, unit ext=side jacket, below=1.3cm of f] (g) {};
			\node[align=center, below] at (g.south) {side\\[-3pt]jacket};
			\foreach \anchor in {
				west jacket,
				east jacket,
				north west jacket,
				north east jacket,
				south west jacket,
				south east jacket}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (g.\anchor) {};}
			
			\node[align=left, anchor=west] at (g.east jacket) {\color{red}east jacket};
			\node[align=left, anchor=south west] at (g.north east jacket) {\color{red}north east\\[-3pt]\color{red}jacket};
			\node[align=left, anchor=north west] at (g.south east jacket) {\color{red}south east\\[-3pt]\color{red}jacket};
			\node[align=right, anchor=east] at (g.west jacket) {\color{red}west jacket};
			\node[align=right, anchor=south east] at (g.north west jacket) {\color{red}north west\\[-3pt]\color{red}jacket};
			\node[align=right, anchor=north east] at (g.south west jacket) {\color{red}south west\\[-3pt]\color{red}jacket};
			\\ \hline
			
			% ========================== 
			% Tube reactor
			% ========================== 
			\node[align=center]{tube\\reactor};
			&
			\node[tube reactor] {};
			& 
			\anchoricon{tube reactor}{1.3}
			\markcardinal
			
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/above left, 
				se/below right, 
				sw/below left,
				nne/above, 
				nnw/above, 
				sse/below, 
				ssw/below,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}

			& 
			\node[tube reactor, unit int=packed] (g) {};
			\node[left] at (g.west) {packed};
			\node[tube reactor, unit int=fixed, below=0.25cm of g] (h) {};
			\node[left] at (h.west) {fixed};
			\node[tube reactor, unit int=tubular, below=0.25cm of h] (j) {}; 
			\node[left] at (j.west) {tubular};
			&
			\node[tube reactor, unit ext=cis shell] (f) {};
			\foreach \anchor/\pos in {west shell/above left, east shell/above right}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\color{red}\anchor};}
			\node[left] at (f.west) {cis shell};
			
			\node[tube reactor, unit ext=trans shell, below=7mm of f] (g) {};
			\foreach \anchor/\pos in {north shell/above, south shell/below}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (g.\anchor) {};
				\node[\pos] at (g.\anchor) {\color{red}\anchor};}
			\node[left] at (g.west) {trans shell};
			
			\\ \hline
			
			
			% ========================== 
			% Column
			% ==========================
			\node{column};
			&
			\node [column] {};
			&
			\anchoricon{column}{1}
			\markcardinal		
			\foreach \anchor/\pos in {
				ne/right, 
				nw/left, 
				se/right, 
				sw/left,
				nne/above right, 
				nnw/above left, 
				sse/below right, 
				ssw/below left,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}			
			&
			\node[column, unit int=tray] at (-4mm,0mm) (c1) {};
			\node[left, align=right] at (c1.west) {tray or\\dashed tray};
			\node[column, unit int=weir tray, right=0.25cm of c1] (c2) {};
			\node[right] at (c2.east) {weir tray};
			\node[column, unit int=double packed, below=0.25cm of c1] (c3) {};
			\node[left] at (c3.west) {double packed};			
			\node[column, unit int=packed, right=0.25cm of c3] (c4) {};
			\node[right] at (c4.east) {packed};	
			\node[column, unit int=numbered tray, feed tray=00, top tray=99, 
			bottom tray=22, below=0.25cm of c3] (c5) {};
			\node[left, align=right] at (c5.west) {numbered tray,\\top tray=99,\\feed tray=00,\\bottom tray=22};
			\foreach \anchor/\pos in {
				top tray/right,
				feed tray/right,
				bottom tray/right}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (c5.\anchor) {};
				\node[right=3mm of c5.\anchor] {\color{red}\anchor};}
			
			&
			\node[column, unit ext=simple hx] (f) {};
			\node[left] at (f.west) {simple hx};
			\foreach \anchor/\pos in {
				distillate/below,
				bottoms/below}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos, rotate=90] at (f.\anchor) {\color{red}\anchor};}
			\\ \hline
			
			% ========================== 
			% Vessel
			% ==========================
			\node {vessel};
			&
			\node[vessel] {};
			&
			\anchoricon{vessel}{1}
			\markcardinal	
			\foreach \anchor/\pos in {
				ne/right, 
				nw/left, 
				se/right, 
				sw/left,
				nne/above right, 
				nnw/above left, 
				sse/below right, 
				ssw/below left,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}		
			&
			\node[vessel, unit int=phase sep] (f) {};
			\node[left] at (f.west) {phase sep};
			\node[vessel, unit int=liquid, right=2mm of f] (g) {};
			\node[right] at (g.east) {liquid};
			\node[vessel, unit int=liquid rotated, below=2mm of f] (h) {};
			\node[left, align=right] at (h.west) {liquid\\rotated};
			&
			\node[vessel, unit ext=simple hx] (f) {};
			\node[left] at (f.west) {simple hx};
			\foreach \anchor/\pos in {
				north hx/right,
				south hx/right}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\color{red}\anchor};}
			\\
		};
	\end{tikzpicture}
\end{center}			
%



\newpage
\subsection*{Fluid transport}
\begin{center}
	\begin{tikzpicture}[font=\footnotesize\ttfamily]
		\matrix[
		column sep=0.25cm,
		row sep=0.25cm,
		column1/.style={nodes={anchor=center}},
		column2/.style={nodes={anchor=center}},
		column2/.style={nodes={anchor=center}}]{
			% ========================== 
			% Header
			% ==========================
			\node (s) {\normalsize\textbf{shape name}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{default}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{anchors}};
			\draw (s.south west) -- (s.south east);
			& 
			\node (s) {\normalsize\textbf{unit int}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{unit ext}};
			\draw (s.south west) -- (s.south east);
			\\ 	
			
			
			% ========================== 
			% Centrifugal pump
			% ==========================
			\node[align=center] {centrifugal\\pump};
			&
			\node[centrifugal pump] {};
			&
			\anchoricon{centrifugal pump}{1}
			\markcardinal
			\markoffcardinal
	
			&
			\node[centrifugal pump, unit int=inlet west] (p1) {};
			\node[left] at (p1.west) {inlet west};
			\node[centrifugal pump, unit int=inlet east, below=0.25cm  of p1] 
			(p2) {};
			\node[left] at (p2.west) {inlet east};
			\node[centrifugal pump, unit int=inlet north, below=0.25cm of p2] 
			(p3) {};
			\node[left] at (p3.west) {inlet north};
			\node[centrifugal pump, unit int=inlet south, below=0.25cm of p3] 
			(p4) {};
			\node[left] at (p4.west) {inlet south};
			&
			\node[centrifugal pump, unit ext=outlet north west] (p1) {};
			\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (p1.outlet) {};
			\node[left] at (p1.outlet) {\color{red}outlet};
			\node[align=right, anchor=east] at (p1.west) {outlet\\[-5pt]north west};
			
			\node[centrifugal pump, unit ext=outlet north east, below=0.25cm of p1] (p2) {};
			\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (p2.outlet) {};
			\node[below, rotate=90] at (p2.outlet) {\color{red}outlet};
			\node[align=right, anchor=east] at (p2.west) {outlet\\[-5pt]north east};
			
			\node[centrifugal pump, unit ext=outlet west, below=0.25cm of p2] (p3) {};
			\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (p3.outlet) {};
			\node[left] at (p3.outlet) {\color{red}outlet};
			\node[left] at (p3.west) {outlet west};
			
			\node[centrifugal pump, unit ext=outlet east, below=0.25cm of p3] (p4) {};
			\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (p4.outlet) {};
			\node[below, rotate=90] at (p4.outlet) {\color{red}outlet};
			\node[left] at (p4.west) {outlet east};
			\\ \hline
			
			
			
						
			
			
			% ========================== 
			% Reciprocating pump
			% ========================== 
			\node[align=center]{reciprocating\\pump};
			&
			\node[reciprocating pump] {};
			&
			\anchoricon{reciprocating pump}{1}
			\markcardinal
			\markoffcardinal
			&
			% no unit int
			&
			% no unit ext
			\\ \hline
			
			
			
			% ========================== 
			% Compressor
			% ========================== 
			\node{compressor};
			&
			\node[compressor] {};
			&
			\anchoricon{compressor}{2.5}
			\markcardinal		
			\foreach \anchor/\pos in {
				ne/above right, 
				nw/left, 
				se/below right, 
				sw/left,
				nne/above, 
				nnw/above, 
				sse/below, 
				ssw/below,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}		
			&
			% no unit int
			&
			% no unit ext
			\\ \hline
			
			% ========================== 
			% Turbine
			% ==========================
			\node{turbine};
			&
			\node[turbine] {};
			&
			\anchoricon{turbine}{2.5}
			\markcardinal		
			\foreach \anchor/\pos in {
				ne/right, 
				nw/above left, 
				se/right, 
				sw/below left,
				nne/above, 
				nnw/above, 
				sse/below, 
				ssw/below,
				ese/right, 
				wsw/left,
				wnw/left,
				ene/right}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}			
			&
			% no unit int
			&
			% no unit ext
			\\
		};
	\end{tikzpicture}
\end{center}	


			
\subsection*{Solids processing}	
\begin{center}
	\begin{tikzpicture}[font=\footnotesize\ttfamily]
		\matrix[
		column sep=0.25cm,
		row sep=0.25cm,
		every cell/.style={align=center},
		] at (0,0) {
			% ========================== 
			% Header
			% ==========================
			\node (s) {\normalsize\textbf{shape name}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{default}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{anchors}};
			\draw (s.south west) -- (s.south east);
			\\ 	

			
			% ========================== 
			% filter 1
			% ==========================
			% text
			\node{filter};
			& 
			% basic shape
			\plainicon{filter}
			&
			% anchors
			\anchoricon{filter}{1};
			\markcardinal
			\markoffcardinal
			\\ \hline
			
			
			% ========================== 
			% press filter 2
			% ==========================
			% text
			\node{press filter};
			& 
			% basic shape
			\plainicon{press filter}
			&
			% anchors
			\anchoricon{press filter}{1};
			\markcardinal
			\markoffcardinal
			\\ \hline
			
			% ========================== 
			% cyclone 3
			% ==========================
			% text
			\node{cyclone};
			& 
			% basic shape
			\plainicon{cyclone}
			&
			% anchors
			\anchoricon{cyclone}{1};
			\markcardinal
			\markoffcardinal
			\\ \hline
			
			
			
			% ========================== 
			% centrifuge 4
			% ==========================
			% text
			\node{centrifuge};
			& 
			% basic shape
			\plainicon{centrifuge}
			&
			% anchors
			\anchoricon{centrifuge}{1};
			\markcardinal
			\markoffcardinal
			\\ \hline
			
			
			% ========================== 
			% belt dryer 5
			% ==========================
			% text
			\node{belt dryer};
			& 
			% basic shape
			\plainicon{belt dryer}
			&
			% anchors
			\anchoricon{belt dryer}{1};
			\markcardinal
			\markoffcardinal
			\\
		};	
			
			
		\matrix[
		column sep=0.25cm,
		row sep=0.25cm,
		every cell/.style={align=center},
		] at (8.5,0) {
			% ========================== 
			% Header
			% ==========================
			\node (s) {\normalsize\textbf{shape name}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{default}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{anchors}};
			\draw (s.south west) -- (s.south east);
			\\ 	
			
			
			% ========================== 
			% rotary dryer 6
			% ==========================
			% text
			\node{rotary dryer};
			& 
			% basic shape
			\plainicon{rotary dryer}
			&
			% anchors
			\anchoricon{rotary dryer}{1};
			\markcardinal
			\markoffcardinal
			\\ \hline
			
			
			% ========================== 
			% granulator/agglomerator
			% ==========================
			% text
			\node[align=center]{granulator or\\agglomerator};
			& 
			% basic shape
			\plainicon{granulator}
			&
			% anchors
			\anchoricon{granulator}{1};
			\markcardinal
			\markoffcardinal
			\\ \hline
			
			
			% ========================== 
			% crystallizer
			% ==========================
			% text
			\node{crystallizer};
			& 
			% basic shape
			\plainicon{crystallizer}
			&
			% anchors
			\anchoricon{crystallizer}{1.5};
			\markcardinal
			\markoffcardinal
			\\ \hline
			
			
			% ========================== 
			% ball mill
			% ==========================
			% text
			\node{ball mill};
			& 
			% basic shape
			\plainicon{ball mill}
			&
			% anchors
			\anchoricon{ball mill}{1};
			\markcardinal
			\markoffcardinal
			\\ \hline
			
			% ========================== 
			% roll crusher
			% ==========================
			% text
			\node{roll crusher};
			& 
			% basic shape
			\plainicon{roll crusher}
			&
			% anchors
			\anchoricon{roll crusher}{1};
			\markcardinal
			\markoffcardinal
			\\
		};
	\end{tikzpicture}
\end{center}	
			
			
			
\newpage
\subsection*{Stream annotations}			
			
\begin{center}
	\begin{tikzpicture}[font=\footnotesize\ttfamily]
		\matrix[
		column sep=0.25cm,
		row sep=0.25cm,
		column1/.style={nodes={anchor=center}},
		column2/.style={nodes={anchor=center}},
		column2/.style={nodes={anchor=center}},
		] at (0,0) {
			% ========================== 
			% Header
			% ==========================
			\node (s) {\normalsize\textbf{shape name}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{default}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{anchors}};
			\draw (s.south west) -- (s.south east);
			& 
			\node (s) {\normalsize\textbf{unit int}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{unit ext}};
			\draw (s.south west) -- (s.south east);
			\\ 				
						
			% ========================== 
			% Valve
			% ==========================
			\node{valve};
			&
			\node[valve] {};
			&
			\anchoricon{valve}{2}
			\markcardinal
			\markoffcardinal
			
			&
			% no unit int
			&
			\node[valve, unit ext=actuator, scale=1.5] (f) {};
			\node[left] at (f.west) {actuator};
			\foreach \anchor/\pos in {
				actuator/above}
			{\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\color{red}\anchor};}
			\\
		};
	
		\matrix[
		column sep=0.25cm,
		row sep=0.25cm,
		every cell/.style={align=center},
		] at (-4,-6) {
			% ========================== 
			% Header
			% ==========================
			\node (s) {\normalsize\textbf{shape name}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{default}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{anchors}};
			\draw (s.south west) -- (s.south east);
			\\ 	
				
			% ========================== 
			% Feed
			% ==========================
			\node{feed};
			&
			\node[feed] {};
			&
			\anchoricon{feed}{2.5}
			\markcardinal
			\markoffcardinal
			
			\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.stream) {};
			\node[right] at ($(f.stream)+(0.5em,0em)$) {\footnotesize or \redtt{stream}};

			\\ \hline
			
			
			% ========================== 
			% Product
			% ==========================
			\node{product};
			&
			\node[product] {};
			& 
			\anchoricon{product}{2.5}
			\markcardinal
			\markoffcardinal
			
			\node[circle, draw, red, fill=red!25, inner sep=0pt, minimum size=3pt] at (f.stream) {};
			\node[left] at ($(f.stream)+(-0.5em,0em)$) {\footnotesize \redtt{stream} or };

			\\ \hline
			
			
			% ========================== 
			% Stream numbers
			% ==========================
			\node{\verb|sid|};
			&
			\node[sid] (f) {99};
			&
			\node[sid, scale=1.5, draw=lightgray, thick] (f) {99};		
			\foreach \anchor/\pos in {
				north/above, 
				east/right, 
				west/left, 
				south/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				north east/above right, 
				north west/above left, 
				south east/below right, 
				south west/below left}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\draw[shift=(f.center),red] plot[mark=x] coordinates{(0,0)};
			
			\\ \hline
			
			% ========================== 
			% Electrical components
			% ==========================
			\node{\verb|elec|};
			&
			\node[elec] {XX};
			&
			\node[elec, scale=1.5, draw=lightgray, thick] (f) {XX};		
			\foreach \anchor/\pos in {
				north/above, 
				east/right, 
				west/left, 
				south/below}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\textbf{\anchor}}};}
			
			\foreach \anchor/\pos in {
				north east/above right, 
				north west/above left, 
				south east/below right, 
				south west/below left}
			{\node[circle, draw, blue, fill=blue!25, inner sep=0pt, minimum size=3pt] at (f.\anchor) {};
				\node[\pos] at (f.\anchor) {\footnotesize\texttt{\anchor}};}
			
			\draw[shift=(f.center),red] plot[mark=x] coordinates{(0,0)};
			
			\\
		};
			
			
			
		\matrix[
		column sep=0.25cm,
		row sep=0.25cm,
		every cell/.style={align=center},
		] at (5,-4.8) {
			% ========================== 
			% Header
			% ==========================
			\node (s) {\normalsize\textbf{shape name}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{default}};
			\draw (s.south west) -- (s.south east);
			&
			\node (s) {\normalsize\textbf{anchors}};
			\draw (s.south west) -- (s.south east);
			\\ 	
			
			% ========================== 
			% controller
			% ==========================
			\node{ctrl};
			&
			\node[ctrl, ctrl sense=X, ctrl type=YY, ctrl display=panel, ctrl numID=99, ctrl alarm=LH] {};
			&
			\anchoricon{ctrl}{1.5}
			\markcardinal
			\markoffcardinal

			\\ \hline
			
						
			
			% ========================== 
			% no return valve
			% ==========================
			\node{nrv};
			&
			\node[nrv] {};
			&
			\anchoricon{nrv}{2}
			\markcardinal
			\markoffcardinal
			
			\\ \hline
			
			
			% ========================== 
			% pressure relief valve
			% ==========================
			\node{prv};
			&
			\node[prv] {};
			&
			\anchoricon{prv}{2}
			\markcardinal
			\markoffcardinal
			
			\\
		};
	\end{tikzpicture}
\end{center}

%\textbf{Drawing streams}
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\draw[->] (0,0) -- node[sid] {99} (2,0);
	\draw[->] (0,-0.5) -- node[valve] {} (2,-0.5);
	\draw[->] (0,-1) -- node[nrv] {} (2,-1);
	
	
	\draw[dashed] (0,-2) -- node[elec] {XX} (2,-2);
	
	
	\draw[dashed] (0,-3.5) -- 
		node[ctrl, solid, 
		 ctrl sense=X, 
		 ctrl type=YY, 
		 ctrl display=shared full, 
		 ctrl numID=99] {} (2,-3.5);
		 
	% \usepackage{siunitx} for \qty{}{}
 	\draw[->] (0,-5.5) -- node[sid,
 		pfdpin2={below:\qty{25}{\celsius}/1 bar},
 		] {A} (2,-5.5);
				 
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\draw[->] (0,0) -- node[sid] {99} (2,0);
				\draw[->] (0,-0.5) -- node[valve] {} (2,-0.5);
				\draw[->] (0,-1) -- node[nrv] {} (2,-1);
				\draw[dashed] (0,-2) -- node[elec] {XX} (2,-2);
				\draw[dashed] (0,-3) -- 
					node[ctrl, solid, 
						ctrl sense=X, 
						ctrl type=YY, 
						ctrl display=shared full, 
						ctrl numID=99
						] {} (2,-3);
				\draw[->] (0,-5.5) -- node[sid, pfdpin2={below:\qty{25}{\celsius}/1 bar}] {A} (2,-5.5);
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}

\vspace*{-1em}
\begin{center}
	\begin{minipage}{5in}
		\begin{lstlisting}
\begin{tikzpicture}
	\tikzset{bridge radius=8pt} % default 0pt=straight line
	\path[->, spath/save=over] (0,0) -- (2,0);
	\path[->, spath/save=under] (1,-1) -- (1,1);
	\tikzset{bridge={over}{under}}
	\draw[->, spath/use=over] node[sid, pos=0.1]{1};
	\draw[->, spath/use=under] node[sid, pos=0.2]{2};
\end{tikzpicture}
		\end{lstlisting}
	\end{minipage}\hspace{0.25in}
	\begin{minipage}{1in}
		\begin{center}
			\begin{tikzpicture}
				\tikzset{bridge radius=8pt} % default 0pt=straight line
				\path[->, spath/save=over] (0,0) -- (2,0);
				\path[->, spath/save=under] (1,-1) -- (1,1);
				\tikzset{bridge={over}{under}}
				\draw[->, spath/use=over] node[sid, pos=0.1]{1};
				\draw[->, spath/use=under] node[sid, pos=0.2]{2};
			\end{tikzpicture}
		\end{center}
	\end{minipage}
\end{center}


\end{document}
