> > > 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).




Reply via email to