\documentclass{article}
\thispagestyle{empty}
%\def\pgfsysdriver{pgfsys-tex4ht.def}
\usepackage{tikz}

\newlength{\nodewidth}
\settowidth{\nodewidth}{Fr\"olicher~}

\tikzstyle{format} = [draw, thin, fill=blue!20, text width=\nodewidth, text centered, minimum height=31pt, outer sep=2pt]
\tikzstyle{justabove} = [above=2pt, text width=\nodewidth, outer sep=2pt]
\tikzstyle{justbelow} = [below=2pt, text width=\nodewidth, outer sep=2pt]
\tikzstyle{justleft}  = [left=2pt,  minimum height=31pt, outer sep=2pt]
\tikzstyle{justright} = [right=2pt, minimum height=31pt, outer sep=2pt]

\begin{document}
\begin{tikzpicture}
    % We need to set at bounding box first. Otherwise the diagram
    % will change position for each frame.
%    \path[use as bounding box] (-1,0) rectangle (10,-2);
%    \path[draw] (-13,5) rectangle (4,-1);
% Directions: x = forcing condition (and direction of maps)
%             y = underlying category
%             z = test category
    \node[format]    (c73)  at (-6,4) {Chen 1973};
    \node[format]    (c75a) at (-6,2) {Chen 1975a};
    \node[format]    (c75b) at (-3,2) {Chen 1975b};
    \node[format]    (c77)  at (-6,0) {Chen 1977};
    \node[format]    (so)   at (-3,0) {Souriau};
    \node[format]    (fr)   at (0,0)  {Fr\"olicher};
    \node[format]    (sm)   at (0,2)  {Smith};
    \node[format]    (si)   at (2.85,2)  {Sikorski};
    \node[justabove] (fru)  at (fr)   {};
    \node[justabove] (sou)  at (so)   {};
    \node[justabove] (smu)  at (sm)   {};
    \node[justabove] (siu)  at (si)   {};
    \node[justabove] (c75bu) at (c75b) {};
    \node[justabove] (c75au) at (c75a) {};
    \node[justabove] (c77u) at (c77)  {};
    \node[justbelow] (sod)  at (so)   {};
    \node[justbelow] (c77d) at (c77)  {};
    \node[justright] (frr)  at (fr)   {};
    \node[justright] (smr)  at (sm)   {};
    \node[justleft]  (frl)  at (fr)   {};
    \node[justleft]  (sml)  at (sm)   {};
    \node[justright] (c73r) at (c73)  {};
    \node[justright] (c75ar) at (c75a) {};
\path[->] (so)    edge (fr)
          (sm)    edge (fr)
          (c77)   edge (so)
          (c75a)  edge (c75b)
          (c73)   edge (c75a)
          (c75b)  edge (sm)
          (si)    edge (sm)
          (smu)   edge (siu)
          (smu)   edge (c75bu)
          (c75bu) edge (c75au)
          (fru)   edge (sou)
          (sou)   edge (c77u)
          (sod)   edge (c77d)
          (frl)   edge (sml)
          (frr)   edge (smr)
          (c75ar)  edge (c73r);
    \fill[red] (intersection cs: first line={(fru)--(so)}, second line={(sou)--(fr)}) circle (2pt);
    \fill[red] (intersection cs: first line={(sou)--(c77)}, second line={(c77u)--(so)}) circle (2pt);
    \fill[red] (intersection cs: first line={(c77d)--(so)}, second line={(sod)--(c77)}) circle (2pt);
    \fill[red] (intersection cs: first line={(c75bu)--(c75a)}, second line={(c75b)--(c75au)}) circle (2pt);
    \fill[red] (intersection cs: first line={(c75bu)--(sm)}, second line={(c75b)--(smu)}) circle (2pt);
    \fill[red] (intersection cs: first line={(smu)--(si)}, second line={(sm)--(siu)}) circle (2pt);
    \fill[red] (intersection cs: first line={(c73r)--(c75a)}, second line={(c73)--(c75ar)}) circle (2pt);
\path (c77) ++(0,-2) [fill,red] circle (2pt) ++(2,0) node [black] {denotes adjunction};
\end{tikzpicture}
\end{document}

