[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Groff] moving TOC to start
From: |
Tadziu Hoffmann |
Subject: |
Re: [Groff] moving TOC to start |
Date: |
Wed, 5 Oct 2005 15:24:10 +0200 |
User-agent: |
Mutt/1.5.6i |
> > Here is a toy model of a much better approach. [...]
> >
> > (Note also that the technique is not really new -- LaTeX
> > has been using an analogous approach for a *long* time.)
>
> Indeed. It would be great if you can volunteer to
> add something like this to the ms macros.
Here is a simple replacement for the toc module in ms.
Not being an ms user myself, however, I suggest that
someone with more experience in ms (and more likely to
be able to test the macros in typical ms documents) do
the fine-tuning.
Notes:
* The distinction between TC and PX becomes obsolete.
The TOC can be placed anywhere in the file (even
somewhere in the middle).
* XA has apparently been defined to accept a second
argument. However, XS, which is defined in terms
of XA, does not pass a second argument to XA.
I assume this second argument is an undocumented
experimental feature (used for indenting the
TOC entries in manually generated TOCs).
* What's not solved satisfactorily is the support for
eqn material in TOC entries. This is because the
font resetting strings being defined by eqn should
be evaluated at "format"-time, not at "save"-time,
which suggests saving TOC entries in "escape-off"
mode. However, that would disable inclusion of
section numbers in TOC entries using \*(SN.
Since section numbers are probably used in TOC
entries more often than inline equations, I've
left escapes on. If necessary the font must be
reset manually when using eqn in TOC entries.
It would be preferable to insert section numbers
automatically, but I guess that could break
existing ms documents.
---- Cut here (with a very sharp editor) ----
.\" ****************************
.\" ******** module toc ********
.\" ****************************
.\" Table of contents generation.
.nr toc*done 0
.nr toc*flag 0
.de toc*save
..
.de @XS
.nr toc*flag 1
.ie \\n[.$] \{\
. ie '\\$1'no' .ds toc*num
. el .ds toc*num "\\$1
.\}
.el .ds toc*num \\n[PN]
.ie \\n[toc*done] .write toc*file .XA \\*[toc*num]
.el \{\
.am toc*save
.XA \\*[toc*num]
\\..
.\}
.de toc*tmp XE
..
.de @XA
.if !\\n[toc*flag] address@hidden XA without XS
.nr toc*flag 0
..
.de XE
.ie !\\n[toc*flag] address@hidden XE without XS
.el address@hidden
.nr toc*flag 0
..
.de @XE
.ie \\n[toc*done] .writem toc*file toc*tmp
.el \{\
.chop toc*tmp
.am toc*save
\\*[toc*tmp]
\\..
.\}
..
.als XA @XA
.
.de @XA1
.if '\\n(.z'toc*div' .toc*end-entry
.ie \\n[.$] .ds toc*num "\\$1
.el .rm toc*num
.di toc*div
address@hidden
.ta (u;\\n[.l]-\\n[.i]-\w'000') (u;\\n[.l]-\\n[.i])R
.na
.ll -8n
.in (n;0\\$2)
..
.de toc*end-entry
.if d toc*num \\a\\t\\*[toc*num]
.br
.di
.ne \\n(dnu
.nf
.in 0
.toc*div
.fi
.in
.rm toc*num
..
.de PX
.\" .1C
.if !'\\$1'no' \{\
. ce 1
. ie (\\n[PS] >= 1000) \
. ps ((\\n[PS]z / 1000u) + 2z)
. el \
. ps \\n[PS]+2
. ft B
.sp 2v
\\*[TOC]
.sp 1v
. ft
. ps
.\}
.char \[toc*leader-char] .\h'1m'
.lc \[toc*leader-char]
.als XA @XA1
.toc*save
.if '\\n(.z'toc*div' .toc*end-entry
.so groff.toc
.if '\\n(.z'toc*div' .toc*end-entry
.als XA @XA
.nr toc*done 1
.open toc*file groff.toc
.sp 1v
address@hidden
..
.de TC
.PX \\$1
..
---- Cut here (with a very sharp editor) ----
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Groff] moving TOC to start,
Tadziu Hoffmann <=