verbatimtex
%&latex
\documentclass{article}
\begin{document}
etex
beginfig(1);
def enlarge(expr X,ratio) = % pair X, numeric ratio
scaled ratio shifted (-(ratio-1)*X)
enddef;
u := 1.0cm;
xmax := 10;
ymax := 5;
lbl := 2.2;
label(btex $\mbox{Hom}_{\mathcal{D}}(FX,Y)$ etex, origin) enlarge(origin,lbl);
label(btex $\mbox{Hom}_{\mathcal{C}}(X,GY)$ etex, (0,ymax)*u) enlarge((0,ymax)*u,lbl);
label(btex $\mbox{Hom}_{\mathcal{C}}(X',GY')$ etex, (xmax,ymax)*u) enlarge((xmax,ymax)*u,lbl);
label(btex $\mbox{Hom}_{\mathcal{D}}(FX',Y')$ etex, (xmax,0)*u) enlarge((xmax,0)*u,lbl);
pickup pencircle scaled 1.5pt;
pair vert;
vert := (0.1,0.8);
path left, right;
left := (origin + (-xpart(vert),ypart(vert)))*u -- ( (0,ymax) + (-xpart(vert),-ypart(vert)))*u;
right := ( (xmax,0) + ((xpart(vert),ypart(vert))) )*u -- ( (xmax,ymax) + ((xpart(vert),-ypart(vert))) )*u;
draw left;
draw (origin + (xpart(vert),ypart(vert)))*u -- ( (0,ymax) + (xpart(vert),-ypart(vert)))*u;
draw ( (xmax,0) + ((-xpart(vert),ypart(vert))) )*u -- ( (xmax,ymax) + ((-xpart(vert),-ypart(vert))) )*u;
draw right;
hori := 3.1;
interim ahlength := 8pt;
path lower, upper;
lower := ( origin + (hori,0) )*u -- ( (xmax,0) + (-hori,0) )*u;
upper := ( (0,ymax) + (hori,0) )*u -- ( (xmax,ymax) + (-hori,0) )*u;
drawarrow lower;
drawarrow upper;
lbl := 1.6;
label.top(btex $\mbox{Hom}(f,Gg)$ etex, point length(upper)/2 of upper) enlarge(point length(upper)/2 of upper,lbl);
label.bot(btex $\mbox{Hom}(Ff,g)$ etex, point length(lower)/2 of lower) enlarge(point length(lower)/2 of lower,lbl);
lbl := 2.0;
label.lft(btex $\Phi_{X,Y}$ etex, point length(left)/2 of left) enlarge(point length(left)/2 of left,lbl);
label.rt(btex $\Phi_{X',Y'}$ etex, point length(right)/2 of right) enlarge(point length(right)/2 of right,lbl);
endfig;
end;