Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
% (find-angg "LATEX/2019diagxyhack.tex")
% (defun c () (interactive) (find-LATEXsh "lualatex -record 2019diagxyhack.tex"))
% (defun d () (interactive) (find-xpdfpage "~/LATEX/2019diagxyhack.pdf"))
% (defun e () (interactive) (find-LATEX "2019diagxyhack.tex"))
% (defun u () (interactive) (find-latex-upload-links "2019diagxyhack"))
% (find-xpdfpage "~/LATEX/2019diagxyhack.pdf")
%   file:///home/edrx/LATEX/2019diagxyhack.pdf
% http://angg.twu.net/LATEX/2019diagxyhack.pdf
\documentclass[oneside]{book}
\usepackage[colorlinks]{hyperref}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{pict2e}
\usepackage{xcolor}
%
\input diagxy
\xyoption{curve}
%
\begin{document}

% See:
% https://tug.org/pipermail/xy-pic/2019-February/000808.html

% (find-es "diagxy" "how-diagxy-calls-xypic")
% (find-tlfile "texmf-dist/tex/generic/barr/diagxy.tex")
% (find-tlfile "texmf-dist/tex/generic/barr/diagxy.tex" "\\def\\domorphism")
% (setq last-kbd-macro (kbd "C-a M-f 4*<left> \\ XYPIC{ C-e <left> } C-a <down>"))

\def\domorphism(#1,#2)|#3|/#4/<#5,#6>[#7`#8;#9]{%
 % Check if arrow arg has an @; then don't add it.%
\def\next{\car#4.\nil}%
\if@\next\relax%
 \if#3l%
  \ifnum #6>0%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar#4^-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \else%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar#4_-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \fi%
 \else \if#3m%
    \setbox0\hbox{$#9$}%
   \ifdim \wd0=0pt%
     \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar#4 (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
   \else%
     \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar#4|-*+<1pt,4pt>{\labelstyle#9}%
       (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
   \fi%
 \else \if#3r%
  \ifnum #6<0%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar#4^-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \else%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar#4_-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \fi%
 \else \if#3a%
  \ifnum #5>0%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar#4^-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \else%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar#4_-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \fi%
 \else \if#3b%
  \ifnum #5<0%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar#4^-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \else%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar#4_-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \fi%
 \else%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar#4 (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
 \fi\fi\fi\fi\fi%
 %% Otherwise, have to add @{..}%
\else%
 \if#3l%
  \ifnum #6>0%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar@{#4}^-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \else%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar@{#4}_-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \fi%
 \else \if#3m%
    \setbox0\hbox{$#9$}%
   \ifdim \wd0=0pt%
     \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar@{#4} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
   \else%
     \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar@{#4}|-*+<1pt,4pt>{\labelstyle#9}%
         (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
   \fi%
 \else \if#3r%
  \ifnum #6<0%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar@{#4}^-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \else%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar@{#4}_-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \fi%
 \else \if#3a%
  \ifnum #5>0%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar@{#4}^-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \else%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar@{#4}_-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \fi%
 \else \if#3b%
  \ifnum #5<0%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar@{#4}^-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \else%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar@{#4}_-{#9} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
  \fi%
 \else%
   \XYPIC{\POS(#1,#2)*+!!<0ex,\Axis>{#7}\ar@{#4} (\Xend,\Yend)*+!!<0ex,\Axis>{#8}}%
 \fi\fi\fi\fi\fi%
\fi\ignorespaces}%

% This definition shifts the diagram to the right!!! Why?
\def\XYPIC#1{{%
  \def\Axis{\axis}%
  \def\Xend{\xend}%
  \def\Yend{\yend}%
  #1%
}}

% Print on stdout all the calls to XyPic.
\def\XYPIC#1{{%
  \def\POS       {POS }%
  \def\ar        {ar }%
  \def\labelstyle{labelstyle }%
  \def\beta      {beta }%
  \def\delta     {delta }%
  \def\phantom   {phantom }%
  \def\Axis{\the\axis}%
  \def\Xend{\the\xend}%
  \def\Yend{\the\yend}%
  \directlua{print("#1")}%
}}

% Use this to typeset the original diagram.
\def\XYPIC#1{%
  \def\Axis{\axis}%
  \def\Xend{\xend}%
  \def\Yend{\yend}%
  #1%
}


$$\bfig
  \morphism(0,-675)|a|/{@{->}@<2.5pt>@/^15pt/}/<900,675>[{X}`{Y};{f}]
  \morphism(0,-675)|b|/->/<900,675>[{X}`{Y};{g}]
  \morphism(900,0)|a|/{@{->}@<2.5pt>@/^15pt/}/<900,-675>[{Y}`{Z};{h}]
  \morphism(900,0)|b|/->/<900,-675>[{Y}`{Z};{i}]
  \morphism(0,-675)|a|/{@{->}@/^15pt/}/<1800,0>[{X}`{Z};{k}]
  \morphism(0,-675)|m|/->/<1800,0>[{X}`{Z};{j}]
  \morphism(0,-675)|m|/{@{->}@<-15pt>}/<1800,0>[{X}`{Z};{hf}]
  \morphism(0,-675)|m|/{@{->}@<-15pt>@/_15pt/}/<1800,0>[{X}`{Z};{ig}]
  \morphism(225,-337)|a|/->/<225,0>[{\phantom{O}}`{\phantom{O}};{\beta}]
  \morphism(1350,-337)|a|/<-/<225,0>[{\phantom{O}}`{\phantom{O}};{\delta}]
  \morphism(900,-540)|l|/{@{<-}@<-15pt>}/<0,-450>[{\phantom{O}}`{\phantom{O}};{t}]
  \morphism(900,-652)|r|/{@{<-}@<15pt>}/<0,-225>[{\phantom{O}}`{\phantom{O}};{s}]
  \efig
$$

$$\bfig
  \morphism(1200,0)/{@{>}@`{c,(-300,0),(-600,2400),p}}/<-1200,2800>[
    t_D(h(gf))`(h(gf))t_A;t_h(gf)]
  \efig
$$

$$\bfig
  \POS (1200,0)*+!!<0ex,2.5pt>{ t_D(h(gf))}
  \ar  @{>}@`{c,(-300,0),(-600,2400),p}_-{t_h(gf)}
       (0,2800)*+!!<0ex,2.5pt>{(h(gf))t_A}
  \efig
$$



\end{document}

% Local Variables:
% coding: utf-8-unix
% End: