.de (z \" *** begin floating keep
.if \n@>4 .tm >> (z, .z=\n(.z
.de )z \" *** end floating keep
.if \n@>4 .tm >> )z, .z=\n(.z
.if \n@>4 .tm -- )z << @), .z=\n(.z
. nr dn +(\\n(ppu*\\n($ru)/2u+\\n(zsu
.nr dl -\n(.H \" fudge factor necessary to make it work
.ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
. if (\\n(dl>\\n($l)&(\\n($m>1) \
. nr ?w 1 \" mark wider than one column (top)
. if (\\n(dl>\\n($l)&(\\n($m>1) \
. nr ?W 1 \" mark wider than one column (bottom)
.da \\*(|x \" copy to save macro
.if \n@>4 .tm -- )z >> \\*(|x
\!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
.if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
.rm |k\" \" remove the temp macro
.if \n@>4 .tm << )z, .z=\\n(.z
.de @k \" --- output floating keep
.if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z