> > > question: can someone explain to me what actually is going
> > > on? somehow something seems to go wrong with the `.als SN
> > > SN-DOT' or I unintentionally mask the correct definition
> > > of \*[SN] or whatever. I don't get it why the `.NH' calls
> > > work, but \*[SN] no longer contains the correct
> > > information if I insert the `.SH' option in the macro
> > > definition. why have I explicitely `.rm SN' first??
> > >
> > > any ideas would be appreciated :-)
I think the groff info file provides the answer:
Unlike many other programming languages, undefined
identifiers are silently ignored or expanded to nothing.
When `gtroff' finds an undefined identifier, it emits a
warning, doing the following:
* If the identifier is a string, macro, or diversion,
`gtroff' defines it as empty.
The new s.tmac says:
.if !dSN .als SN SN-DOT
Also, NH uses/defines SN, but SH does not.
So, here's what happens:
1. You invoke SH. No problem so far.
2. You reference SN, *thereby defining it*.
3. You invoke NH, which sees that SN is already defined
and therefore *does not* alias it to SN-DOT.
Number 3 explains why ".rm SN" fixes the problem.
Also, had you called ".NHH n xxx" with n>0 first, everything
would have been okay.
Quickfix:
1. Use SN-DOT or SN-NO-DOT (your preference) instead of SN
in your macro between XS and XE.
or
2. At the top of your document, do
.ds SN-DOT
.als SN SN-DOT
(alternatively, use SN-NO-DOT instead of SN-DOT).