How can I tell when a new column or page starts? I've tried to use the &$LC system symbol but it doesn't always seem consistent.
To get the best results:
o be sure and convert the symbol value to device units (using the &DV'
attribute) to avoid round-off error
o turn off widow zone processing
o avoid using keeps, floats, or named areas
o use single column mode, or turn off vertical justification
o cause a line break if possible before testing &DV'&$LC
The &$LC system symbol that DCF provides returns the transient remaining
depth of the current column. This value does not reflect:
o the depth of the previous line unless a line break has occured
o the depth of the current input line because symbol substitution is
performed before the line is processed (formatted)
o the depth of any unplaced widow zone lines
o the depth of any unplaced keeps, floats, footnotes, areas, and tables
The effect of placing these items, or changing the depth of the running
heading or footing, or doing column balancing, vertical justification, etc
can also change the remaining space on the page and will thus change the
position of any given output line. None of these things can be considered
in resolving the &$LC symbol because they will take place in the future;
that is, they have not been done when the symbol is queried.
In order to correctly return the current output location on the page (which
is what is really wanted), DCF would have to "pretend" to end the page and
do column balancing & vertical justification. It would also have to pretend
to place any pending keeps, floats, etc. This would give the current
output location IF the page were ended at the time the symbol was queried.
It would still not include the current line since symbol substitution is
still done first. Of course, you probably don't really want to end the
page, so DCF would need to remember where it was and restore everything to
its proper state after determining the symbol value.
Given the problems with &$LC, what can you do? There are a few things that
help:
o when querying the symbol value or storing it in a local symbol for
later comparison, be sure and qualify the symbol value with &DV. This
will convert the symbol from line spaces in the current font to device
units, and help avoid round-off error.
o turn off widow zone processing
o do not use keeps, floats, or named areas
o use single column mode, or turn off vertical justification
Doing the above things will make the symbol more accurate, but of course
they will change the formatting results to possibly less desirable output.
This is documented in the Text Programmer's Guide in the discussion of
SCRIPT system symbols. Although not in this much detail, it does state that
&$LC is inaccurate because of the problems described above.
Last updated: 93/08/04 14:08:04