Formatting "(Continued on next page...)"

Subject: Formatting "(Continued on next page...)"
From: "Frank A. Christoph" <christo@xxxxxxxxxxxxxxxxxx>
Date: Thu, 22 Jan 1998 19:39:10 +0900
I am interested in hearing ideas on how to format documents where, when the
areas produced by the flow object(s) associated with a given element or
elements span a page or more, some sort of "(Continued on next page...)"
message is emitted at the bottom of the page.

As far as I can see, there is no way to do this in general, so I am
contemplating an extension.  I think that this is a common feature of many
typesetting layouts and seems to be a moderately serious omission in DSSSL
(I think it can be done in full DSSSL using generated flow objects and
reference values --- although I confess my understanding of them is weak,
never having used them --- but that seems like overkill for such a simple
feature), so I would like to design the extension in such a way that the
interface can become a de facto standard, or maybe incorporated into a
future DSSSL revision; I would be grateful for people's input on this.

Solution 1

Just declare a new characteristic, keep-violation-sosofos:.  The value is a
list of two (displayed) sosofos, the first of which produces an area at the
bottom of every page (or column) that the flow object spans, and the second
of which produces an area at the top of every such page.  It also accepts
#f, which is the same as specifying two empty-sosofos.  A typical use might
be:

(let ((bottom (literal "(continued on next page)"))
     (top (literal "(continued from previous page)")))
  (make X
  ...
 keep-violation-sosofos: `(,bottom ,top)))

Let's talk about the issues to consider here.

Most importantly, characteristics declared in this fashion are inherited,
and, although I think there is no harm in it being inherited, it's not clear
to me whether it makes sense here... especially since the other display
characteristics (keep:, space-before;, ...) aren't.

The other issues are really just window dressing.  First, there are only
every two sosofos, so we could make the datatype a pair instead of a list.
I avoided this since, as I recall, other characteristics do the same.
Second, using a list or a pair as the datatype means that you really need to
quasiquote the value.  It's a sure bet that beginners will get this wrong.
So it might be better to make this into two characteristics:
keep-violation-start: and keep-violation-end:.  Third, I'm not sure that
"keep-violation" is the right word here (since keep: might be #f), and the
name of the proposed characteristic(s) is rather obscure.  Is there a better
name (names)?  Finally, what public identifier shall we use for the
declaration?  I certainly don't want to put it in my name.  I think that we
ought to create a registry for DSSSL extension public identifiers, and maybe
move some of James' extensions into that registry as well.  Maybe
"-//DSSSList de facto extensions//.." or something.

Solution 2

Add the(se) characteristic(s) to display-group.  Not only is this the right
place for them, but the more I think about it the more I think it is better
to make the characteristic(s) non-inherited.  The problem, of course, is
that this cannot be done with the usual DSSSL extension capabilities.

An example in this style would be:

(let ((bottom (literal "(continued on next page)"))
     (top (literal "(continued from previous page)")))
  (make display-group
   (make X
  ...
  keep-violation-sosofos: `(,bottom ,top))))

Comments?

--FC



 DSSSList info and archive:  http://www.mulberrytech.com/dsssl/dssslist


Current Thread
  • Formatting "(Continued on next page...)"
    • Frank A. Christoph - from mail1.ability.netby web4.ability.net (8.8.5/8.6.12) with ESMTP id FAA08943Thu, 22 Jan 1998 05:35:13 -0500 (EST) <=
      • G. Ken Holman - from mail1.ability.netby web4.ability.net (8.8.5/8.6.12) with ESMTP id JAA00614Tue, 27 Jan 1998 09:43:49 -0500 (EST)