> The > problem is caused by the vertial position registers > (.d and nl) not being affected by the .sp request.
Anton, I get different results with your sample code depending on which macro package I use. Putting your code in a file called "test" and running groff 1.21: $ groff test > /dev/null Initial vert. pos.: -1 Vert. pos. after .sp 40: 40 Vert. pos. after another .sp 40: 80 Vert. pos. after .sp 40 after text: 12120 $ groff -me test > /dev/null Initial vert. pos.: -1 Vert. pos. after .sp 40: 84000 Vert. pos. after another .sp 40: 84000 Vert. pos. after .sp 40 after text: 96040 $ groff -ms test > /dev/null Initial vert. pos.: -1 Vert. pos. after .sp 40: 72000 Vert. pos. after another .sp 40: 72000 Vert. pos. after .sp 40 after text: 84040 $ groff -mom test > /dev/null Initial vert. pos.: 12000 Vert. pos. after .sp 40: 12040 Vert. pos. after another .sp 40: 12080 Vert. pos. after .sp 40 after text: 24120 So it looks like -me and -ms break the .sp request in this context. I've noticed this before under -me when .sp is issued on any new page, not just the first, before any text is output. You can see see this by running the same test on two consecutive pages, via a simple alteration to the test file: (cat test; echo .bp; cat test) > test2