5.5 Cross-References and Bookmarks

This section describes how the browser allows the traversal of additional links introduced by cross-references in the document. Command read-follow-cross-ref (bound to g) is executed after interrupting the rendering. By default, this renders the next cross-reference in the document; a prefix argument4 results in the previous cross reference being rendered. This is necessary —typically, the rendering will have been stopped close to, rather than, on a cross-reference. AS TE R also allows cross-reference links to be traversed while rendering is in progress. When a cross-reference is spoken, AS TE R plays a short sound cue that acts as a prompt. If the user responds with y, the cross-reference is rendered before continuing. The presence of this functionality almost obviates the need for the user to call command read-follow-cross-ref interactively.

How a cross-reference is rendered depends on the object being cross-referenced. For instance, rendering a cross-reference to a section results in the section number and title being spoken. This is more useful than just speaking the section number. Typically, the renderings of cross-reference tags are designed to give as much information as possible without being unduly verbose. Renderings of cross-reference tags are customizable by providing methods on generic function read-cross-reference. One such method is shown below.

(defmethod read-cross-reference ((section section))

  "Render a cross reference to a sectional unit."

  (read-aloud (section-name section ))

  (when (section-number section)

    (afl:speak-number-string (section-number section )))

  (afl:comma-intonation) (read-aloud (title  section ))

  (afl:comma-intonation) (afl:force-speech))

Cross-Referenceable Objects

Technical documents use cross-references to numbered equations and theorems to make the presentation succinct. Cross-references in the running text typically use a system-generated number, e.g., equation 3.2.1. Even when reading printed material, this convention can present problems. Consider, for instance, a proof that reads:

By equation 3.1 and theorem 4.2 and equation 8, we get equation 9 and hence the result.

If the above is difficult to understand when reading it in print, it is unusable when encountered in a spoken document, where the listener does not have the luxury of quickly scanning back to the cross-references.

The ability to follow a cross-reference tag during the rendering does mitigate this problem to some extent. However, following such cross-references can prove distracting. AS TE R overcomes this by allowing the listener to label cross-referenceable objects with meaningful labels when they are rendered. These user-supplied labels are used when rendering cross-reference tags, almost eliminating the need to follow cross-references.

To give a concrete example, consider listening to a book on Fermat’s last theorem. The first chapter might introduce the subject by stating the theorem. Assume that this theorem is numbered 1.1. The rest of the book might refer to this theorem by number, as in:

As a corollary of this result, we can prove theorem 1.1.

When the corresponding document is rendered by AS TE R, the listener hears the theorem, the system generated number (theorem 1.1), and a fleeting sound cue. At this point, the user can give the theorem a more meaningful name by pressing y and entering an appropriate name. Assume the listener enters “Fermat’s last theorem”. Later, when rendering cross-references to this theorem, the newly entered label will be used instead of the system generated theorem number. Thus, the example shown above would be rendered as: As a corollary of this result, we can prove Fermat’s last theorem.


The browser also provides a simple bookmark facility, which can be used to mark positions of interest to be returned to later. Browser command mark-read-pointer (bound to m) prompts the user for a bookmark name and marks the current position. Command follow-bookmark (bound to f) takes a bookmark name and returns to the marked position. Bookmarks can be accessed in two ways: f renders the marked object without moving the current selection and C-u f resets the current selection to the marked position.