\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[] {}; \end{tikzpicture} \end{lstlisting} where || 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[, unit int=, unit ext=] {}; \end{lstlisting} where || and || 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{}| \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{}| \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{}| \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{}| \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{}| \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{}| \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{}| \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{