Hi maouinin,

I'll have a stab...

> > if \\nm=1 .X \\$@
> 
> I follow the front, but what is \\$@?

From

    .de Q
    .if \\nm=1 .X \\$@
    .if \\nm=2 .Y \\$@
    .if \\nm=3 .Y \\$@
    ..

$@ refers to all the arguments passed to the macro, similar to $@ and $*
in sh.  IOW, macro Q is calling either macro X or Y with all the
arguments it was passed.  From groff's info page,

    $ info groff 2>/dev/null |
    > sed '/-- Escape: \\\$\*/p; 1,//d; /^$/Q'
     -- Escape: \$*
     -- Escape: \$@
         In some cases it is convenient to use all of the arguments at once
         (for example, to pass the arguments along to another macro).  The
         `\$*' escape concatenates all the arguments separated by spaces.
         A similar escape is `\$@', which concatenates all the arguments
         with each surrounded by double quotes, and separated by spaces.
         If not in compatibility mode, the input level of double quotes is
         preserved (see *note Request and Macro Arguments::).
    $ 

> the following also loses me:
> 
> > \h'\\nwu'\v'1m'\\*n\v'-1m'\h'\\nwu'\\$2
> 
> what exactly  is \\nwu?

\nw is the value of the w number register.  The trailing u is stating
what units that number, e.g. 42, is in to \h for the horizontal
movement.  If it was \nwi then it would be 42 inches instead.  See

    info groff 2>/dev/null | less +'/^[0-9.]* Measurements$'

In both cases, backslashes are doubled to delay interpretation to when
the macro is run, not defined.

Cheers, Ralph.

Reply via email to