> I've attached your patch to http://savannah.gnu.org/bugs/?57034.

Just a brief follow-up to this: the test in the patch is
for a string expansion that returns nothing, in this case
usually because the string is not defined, and then groff
gives a warning.

There are two obvious ways to fix this: either an explicit
empty string that signifies the end of the author's titles,
or storing the number of titles in a register.  Both require
one extra register per author, but I think the latter is better,
since it easily allows using .ne to request enough space to
output an author's signature block without page breaks.

With that in mind, here's a better patch (relative to the
original m.tmac).  No provision is made for single titles
that are so long that they take more than one line to print.


--- a/contrib/mm/m.tmac
+++ b/contrib/mm/m.tmac
@@ -2975,7 +2975,8 @@
 .\"    indent stored in cov*abs-ind
 .\" number of authors stored in cov*au
 .\" author(s) stored in cov*au!x!y
-.\" author(s) title stored in cov*at!x!y
+.\" number of author's titles strored in cov*at!x
+.\" author(s) title(s) stored in cov*at!x!y
 .\"    x is the author-index [1-cov*au], y is the argument-index [1-9].
 .\" author(s) firm stored in cov*firm
 .\" new date (if .ND exists) is stored in cov*new-date
@@ -3019,6 +3020,7 @@
 .\" Must appear directly after .AU
 .de AT
 .if \\n[.$]<1 .@error "AT: no arguments"
+.nr cov*at!\\n[cov*au] \\n[.$]
 .nr cov*i 0 1
 .while \\n[.$]>=\\n+[cov*i] \{\
 .      ds cov*at!\\n[cov*au]!\\n[cov*i] "\\$[\\n[cov*i]]
@@ -3304,18 +3306,23 @@
 .nr let*i 0 1
 .while \\n+[let*i]<=\\n[cov*au] \{\
 .      if \\n[let*i]>1 .as let*tmp /
-.      as let*tmp \\*[cov*au!\\n[let*k]!2]
+.      as let*tmp \\*[cov*au!\\n[let*i]!2]
 .\}
 .if !''\\$1' .as let*tmp -\\$1
 .in (u;\\n[.l]/2)
 .nf
 .nr let*i 0 1
 .while \\n+[let*i]<=\\n[cov*au] \{\
+.      ne 3v+\\n[cov*at!\\n[let*i]]v
 .      SP 3v
 .      if \\n[let*i]=\\n[let*k] \{\
 \Z'\h'-(u;\\n[.l]/2)'\\*[let*tmp]'\c
 .      \}
 \\*[cov*au!\\n[let*i]!1]
+.      nr let*j 0 1
+.      while \\n+[let*j]<=\\n[cov*at!\\n[let*i]] \{\
+\\*[cov*at!\\n[let*i]!\\n[let*j]]
+.      \}
 .\}
 .fi
 .in

Reply via email to