axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] 20090404.01.tpd.patch (bookvol0 fix cross references)


From: daly
Subject: [Axiom-developer] 20090404.01.tpd.patch (bookvol0 fix cross references)
Date: Sat, 4 Apr 2009 17:29:35 -0600

Book Volume 0: Axiom Jensk and Sutor has been reviewed to correct
missing cross references (based on an observation by Ralf). The 
updated pdf is at:

http://axiom-developer.org/axiom-website/documentation.html

Several new domains are going to be added as part of the next update.

====================================================================
diff --git a/books/bookvol0.pamphlet b/books/bookvol0.pamphlet
index 08a195a..3487c16 100644
--- a/books/bookvol0.pamphlet
+++ b/books/bookvol0.pamphlet
@@ -13,6 +13,38 @@
 \setcounter{topnumber}{50}
 \setcounter{bottomnumber}{50}
 
+
+%%
+%% sechead consolidates standard page indexing
+%% it replaces the \section tag for domains so we
+%% create proper cross references and index entries
+%%
+\newcommand{\domainhead}[1]{% e.g. \domainhead{domain}
+\section{#1}
+\label{#1}%
+\index{{#1}}}%
+
+%%
+%% domainref consolidates standard page indexing
+%% it replaces the \ref tag for domain
+%%
+\newcommand{\domainref}[1]{% e.g. \domainref{domain}
+{\tt #1}{ \ref{#1} on page~\pageref{#1}}}
+
+%%
+%% sectionref consolidates standard page indexing
+%% it replaces the \ref tag for labels
+%%
+\newcommand{\sectionref}[1]{% e.g. \sectionref{domain}
+{section~\ref{#1} on page~\pageref{#1}}}
+
+%%
+%% figureref consolidates standard page indexing
+%% it replaces the \ref tag for labels
+%%
+\newcommand{\figureref}[1]{% e.g. \sectionref{domain}
+{figure~\ref{#1} on page~\pageref{#1}}}
+
 % spadcommands are the actual text that you type at the axiom prompt
 \newcommand{\spadcommand}[1]%
 {\begin{flushleft}{\tt #1}\end{flushleft}\vskip .1cm }
@@ -568,8 +600,8 @@ As another example of a HyperDoc facility, suppose that you 
want to
 compute the roots of $x^{49} - 49x^4 + 9$ to 49 digits (as in our
 previous example) and you don't know how to tell Axiom to do this.
 The ``basic command'' facility of HyperDoc leads the way.  Through the
-series of HyperDoc windows shown in Figure \ref{fig-intro-br} on
-page~\pageref{fig-intro-br} and the specified mouse clicks, you and
+series of HyperDoc windows shown in \figureref{fig-intro-br} 
+and the specified mouse clicks, you and
 HyperDoc generate the correct command to issue to compute the answer.
 
 \subsection{Interactive Programming }
@@ -3737,7 +3769,7 @@ examples on-line, execute Axiom expressions, and generate
 graphics.  If you are in a graphical windowing environment, it is
 usually started automatically when Axiom begins.  If it is not
 running, issue {\tt )hd} to start it.  We discuss the basics of
-HyperDoc in Chapter \ref{ugHyper} on page~\pageref{ugHyper}.  
+HyperDoc in \sectionref{ugHyper}.
 
 To interrupt an Axiom computation, hold down the \index{interrupt} 
 {\bf Ctrl} (control) key and press {\bf c}.  This brings you back to 
@@ -3913,7 +3945,7 @@ $$
 \label{ugIntroTypes}
 Everything in Axiom has a type.  The type determines what operations
 you can perform on an object and how the object can be used.
-Chapter~\ref{ugTypes} on page~\pageref{ugTypes} is dedicated to the
+The \sectionref{ugTypes} is dedicated to the
 interactive use of types.  Several of the final chapters discuss how
 types are built and how they are organized in the Axiom library.
 
@@ -3971,8 +4003,8 @@ refers to a value.  To {\sl assign} a value to a variable,
 \index{variable!naming} the operator ``{\tt :=}'' \index{assignment}
 is used.\footnote{Axiom actually has two forms of assignment: 
 {\it immediate} assignment, as discussed here, and {\it delayed
-assignment}.  See Section \ref{ugLangAssign} on page~\pageref{ugLangAssign}
-for details.}  A variable initially has no restrictions on the kinds
+assignment}.  See \sectionref{ugLangAssign} for details.}  
+A variable initially has no restrictions on the kinds
 of \index{declaration} values to which it can refer.
 
 This assignment gives the value $4$ (an integer) to
@@ -4092,7 +4124,7 @@ such trouble spots.
 Objects of one type can usually be ``converted'' to objects of several
 other types.  To {\sl convert} an object to a new type, use the ``{\tt ::}'' 
 infix operator.\footnote{Conversion is discussed in detail in
-\ref{ugTypesConvert} on page~\pageref{ugTypesConvert}.}  For example,
+\sectionref{ugTypesConvert}.}  For example,
 to display an object, it is necessary to convert the object to type
 {\tt OutputForm}.
 
@@ -4180,7 +4212,7 @@ operations are provided for efficiency reasons.
 \subsection{Some Predefined Macros}
 \label{ugIntroMacros}
 Axiom provides several macros for your convenience.\footnote{See
-\ref{ugUserMacros} on page~\pageref{ugUserMacros} for a discussion on
+\sectionref{ugUserMacros} for a discussion on
 how to write your own macros.}  Macros are names
 \index{macro!predefined} (or forms) that expand to larger expressions
 for commonly used values.
@@ -4229,9 +4261,9 @@ is the same as if you had entered
 \end{verbatim}
 
 Axiom statements in an input file
-(see Section \ref{ugInOutIn} on page~\pageref{ugInOutIn}),
+(see \sectionref{ugInOutIn})
 can use indentation to indicate the program structure .
-(see Section \ref{ugLangBlocks} on page~\pageref{ugLangBlocks}).
+(see \sectionref{ugLangBlocks}).
 
 \subsection{Comments}
 \label{ugIntroComments}
@@ -4524,8 +4556,8 @@ $$
 \returnType{Type: IntegerMod 6}
 
 Inversion is not available if the modulus is not a prime number.
-Modular arithmetic and prime fields are discussed in Section
-\ref{ugxProblemFinitePrime} on page~\pageref{ugxProblemFinitePrime}.
+Modular arithmetic and prime fields are discussed in 
+\sectionref{ugxProblemFinitePrime}.
 
 \spadcommand{1/y}
 \begin{verbatim}
@@ -4647,8 +4679,8 @@ data structures are particularly useful for interactive 
computation
 and others are useful for building applications.  The data structures
 of Axiom are organized into {\sl category hierarchies}.
 
-A {\it list} \footnote{Lists are discussed in Section \ref{ListXmpPage} on
-page~\pageref{ListXmpPage}} is the most commonly used data structure in
+A {\it list} \footnote{\domainref{List}} 
+is the most commonly used data structure in
 Axiom for holding objects all of the same type. The name {\it list} is
 short for ``linked-list of nodes.'' Each node consists of a value
 (\spadfunFrom{first}{List}) and a link (\spadfunFrom{rest}{List}) that
@@ -4720,8 +4752,7 @@ $$
 A {\it stream} is a structure that (potentially) has an infinite
 number of distinct elements. Think of a stream as an
 ``infinite list'' where elements are computed successively.
-\footnote{Streams are discussed in Section{StreamXmpPage} on
-page~\pageref{StreamXmpPage}}
+\footnote{\domainref{Stream}}
 
 Create an infinite stream of factored integers.  Only a certain number
 of initial elements are computed and displayed.
@@ -4753,13 +4784,11 @@ For example, {\bf first} and {\bf rest} are used to 
access
 elements and successive nodes of a stream.
 
 A {\it one-dimensional array} is another data structure used to hold
-objects of the same type \footnote{OnedimensionalArray is discussed in
-Section \ref{OneDimensionalArrayXmpPage} on
-page~\pageref{OneDimensionalArrayXmpPage}}. Unlike lists,
-one-dimensional arrays are inflexible---they are
-\index{array!one-dimensional} implemented using a fixed block of
-storage.  Their advantage is that they give quick and equal access
-time to any element.
+objects of the same type \footnote{\domainref{OneDimensionalArray}}.  
+Unlike lists, one-dimensional
+arrays are inflexible---they are \index{array!one-dimensional}
+implemented using a fixed block of storage.  Their advantage is that
+they give quick and equal access time to any element.
 
 A simple way to create a one-dimensional array is to apply the
 operation {\bf oneDimensionalArray} to a list of elements.
@@ -4816,9 +4845,8 @@ $$
 $$
 \returnType{Type: Bits}
 
-A {\it flexible array} \footnote{FlexibleArray is discussed in Section
-\ref{FlexibleArrayXmpPage} on page~\pageref{FlexibleArrayXmpPage}} is
-a cross between a list \index{array!flexible} and a one-dimensional
+A {\it flexible array} \footnote{\domainref{FlexibleArray}}
+is a cross between a list \index{array!flexible} and a one-dimensional
 array. Like a one-dimensional array, a flexible array occupies a fixed
 block of storage.  Its block of storage, however, has room to expand.
 When it gets full, it grows (a new, larger block of storage is
@@ -4845,8 +4873,8 @@ $$
 Flexible arrays are used to implement ``heaps.'' A {\it heap} is an
 example of a data structure called a {\it priority queue}, where
 elements are ordered with respect to one another. A heap
-\footnote{Heap is discussed in Section \ref{HeapXmpPage} on
-page~\pageref{HeapXmpPage}} is organized so as to optimize insertion
+\footnote{\domainref{Heap}}
+is organized so as to optimize insertion
 and extraction of maximum elements.  The {\bf extract!} operation
 returns the maximum element of the heap, after destructively removing
 that element and reorganizing the heap so that the next maximum
@@ -4876,10 +4904,10 @@ $$
 A {\it binary tree} is a ``tree'' with at most two branches
 \index{tree} per node: it is either empty, or else is a node
 consisting of a value, and a left and right subtree (again, binary
-trees). \footnote{BinarySearchTrees are discussed in Section 
-\ref{BinarySearchTreeXmpPage} on page~\pageref{BinarySearchTreeXmpPage}}
+trees). \footnote{\domainref{BinarySearchTree}}
 Examples of binary tree types are {\tt BinarySearchTree}, 
 {\tt PendantTree}, {\tt TournamentTree}, and {\tt BalancedBinaryTree}.
+\footnote{\domainref{BalancedBinaryTree}}
 
 A {\it binary search tree} is a binary tree such that,
 \index{tree!binary search} for each node, the value of the node is
@@ -4910,8 +4938,8 @@ $$
 \returnType{Type: List Integer}
 
 A {\it set} is a collection of elements where duplication and order is
-irrelevant. \footnote{Sets are discussed in Section \ref{SetXmpPage}
-on page~\pageref{SetXmpPage}} Sets are always finite and have no
+irrelevant. \footnote{\domainref{Set}} 
+Sets are always finite and have no
 corresponding structure like streams for infinite collections.
 
 Create sets using braces ``\{`` and ``\}'' rather than brackets.
@@ -4925,8 +4953,7 @@ $$
 \returnType{Type: Set Fraction Integer}
 
 A {\it multiset} is a set that keeps track of the number of duplicate
-values. \footnote{Multisets are discussed in Section
-\ref{MultisetXmpPage} on page~\pageref{MultisetXmpPage}}
+values. \footnote{\domainref{Multiset}}
 
 For all the primes $p$ between 2 and 1000, find the
 distribution of $p \bmod 5$.
@@ -4984,8 +5011,8 @@ $$
 \returnType{Type: Table(Integer,Integer)}
 
 A {\it record} is an example of an inhomogeneous collection of
-objects.\footnote{See \ref{ugTypesRecords} on
-page~\pageref{ugTypesRecords} for details.}  A record consists of a
+objects.\footnote{See \sectionref{ugTypesRecords} for details.}  
+A record consists of a
 set of named {\it selectors} that can be used to access its
 components.  address@hidden Record}}
 
@@ -5014,8 +5041,8 @@ $$
 \returnType{Type: Record(age: Integer,salary: Float)}
 
 A {\it union} is a data structure used when objects have multiple
-types.\footnote{See \ref{ugTypesUnions} on
-page~\pageref{ugTypesUnions} for details.}  address@hidden Union}}
+types.\footnote{See \sectionref{ugTypesUnions} for details.}  
address@hidden Union}}
 
 Let $dog$ be either an integer or a string value.
 \spadcommand{dog: Union(licenseNumber: Integer, name: String)}
@@ -5029,8 +5056,8 @@ $$
 \returnType{Type: Union(name: String,...)}
 
 All told, there are over forty different data structures in Axiom.
-Using the domain constructors described in Chapter \ref{ugDomains} on
-page~\pageref{ugDomains}, you can add your own data structure or
+Using the domain constructors described in \sectionref{ugDomains},
+you can add your own data structure or
 extend an existing one.  Choosing the right data structure for your
 application may be the key to obtaining good performance.
 
@@ -5052,12 +5079,12 @@ algebraic operations are available for matrices but not 
for arrays.
 Because of this, we limit our discussion here to {\tt Matrix}, that
 can be regarded as an extension of {\tt TwoDimensionalArray}. See {\tt
 TwoDimensionalArray} for more information about arrays.  For more
-information about Axiom's linear algebra facilities, see {\tt Matrix},
-{\tt Permanent}, {\tt SquareMatrix}, {\tt Vector}, see Section
-\ref{ugProblemEigen} on page~\pageref{ugProblemEigen} (computation of
-eigenvalues and eigenvectors), and Section \ref{ugProblemLinPolEqn} on
-page~\pageref{ugProblemLinPolEqn} (solution of linear and polynomial
-equations).
+information about Axiom's linear algebra facilities, see 
+\domainref{Matrix}, \domainref{Permanent}, \domainref{SquareMatrix}, 
+\domainref{Vector}, \domainref{TwoDimensionalArray}, 
+\sectionref{ugProblemEigen} (computation of eigenvalues and eigenvectors), 
+and \sectionref{ugProblemLinPolEqn} 
+(solution of linear and polynomial equations).
 
 You can create a matrix from a list of lists, \index{matrix!creating}
 where each of the inner lists represents a row of the matrix.
@@ -5072,8 +5099,8 @@ $$
 $$
 \returnType{Type: Matrix Integer}
 
-The ``collections'' construct (see \ref{ugLangIts} on
-page~\pageref{ugLangIts}) is useful for creating matrices whose
+The ``collections'' construct (see \sectionref{ugLangIts}) 
+is useful for creating matrices whose
 entries are given by formulas.  \index{matrix!Hilbert}
 \spadcommand{matrix([ [1/(i + j - x) for i in 1..4] for j in 1..4])}
 $$
@@ -5163,7 +5190,7 @@ write some Axiom programs to tackle your application.
 Axiom allows you to write functions interactively,
 \index{function} thereby effectively extending the system library.
 Here we give a few simple examples, leaving the details to
-Chapter \ref{ugUser} on page~\pageref{ugUser}.
+\sectionref{ugUser}.
 
 We begin by looking at several ways that you can define the
 ``factorial'' function in Axiom.  The first way is to give a
@@ -5251,7 +5278,7 @@ $$
 
 You are not limited to one-line functions in Axiom.  If you place your
 function definitions in {\bf .input} files \index{file!input} (see
-\ref{ugInOutIn} on page~\pageref{ugInOutIn}), you can have multi-line
+\sectionref{ugInOutIn}), you can have multi-line
 functions that use indentation for grouping.
 
 Given $n$ elements, {\bf diagonalMatrix} creates an
@@ -5513,7 +5540,7 @@ expression $f$ as a real variable $x$ tends to a limit
 value $a$, enter {\tt limit(f, x=a)}.  Use
 {\bf complexLimit} if the variable is complex.  Additional
 information and examples of limits are in 
-Section \ref{ugProblemLimits} on page~\pageref{ugProblemLimits}.
+\sectionref{ugProblemLimits}.
 
 You can take limits of functions with parameters.
 \index{limit!of function with parameters}
@@ -5584,8 +5611,7 @@ Axiom tries to compute and display the first ten elements 
of a series.
 Use {\tt )set streams calculate} to change the default value to
 something else.  For the purposes of this document, we have used this
 system command to display fewer than ten terms.  For more information
-about working with series, see \ref{ugProblemSeries} on
-page~\pageref{ugProblemSeries}.
+about working with series, see \sectionref{ugProblemSeries}.
 
 You can convert a functional expression to a power series by using the
 operation {\bf series}.  In this example, {\tt sin(a*x)} is
@@ -6183,7 +6209,7 @@ $$
 \returnType{Type: Union(Expression Integer,...)}
 
 More examples of Axiom's integration capabilities are discussed in
-Section \ref{ugProblemIntegration} on page~\pageref{ugProblemIntegration}.
+\sectionref{ugProblemIntegration}.
 
 \section{Differential Equations}
 \label{ugIntroDiffEqns}
@@ -6742,7 +6768,7 @@ display options set from the 3D Control Panel.
 The PostScript output was produced by clicking on the
 {\bf save} 3D Control Panel button and then
 clicking on the {\bf PS} button.
-See Section \ref{ugProblemNumeric} on page~\pageref{ugProblemNumeric}
+See \sectionref{ugProblemNumeric}
 for more details and examples of Axiom's numeric and graphics capabilities.
 
 \spadgraph{draw((x,y) +-> real atan complex(x,y), -\%pi..\%pi, -\%pi..\%pi, 
colorFunction == (x,y) +-> argument atan complex(x,y))}
@@ -6756,11 +6782,11 @@ for more details and examples of Axiom's numeric and 
graphics capabilities.
 
 An exhibit of Axiom images is given later.  For a description of the
 commands and programs that produced these figures, see
-\ref{ugAppGraphics} on page~\pageref{ugAppGraphics}.  PostScript
+\sectionref{ugAppGraphics}.  PostScript
 \index{PostScript} output is available so that Axiom images can be
 printed.\footnote{PostScript is a trademark of Adobe Systems
-Incorporated, registered in the United States.}  See \ref{ugGraph} on
-page~\pageref{ugGraph} for more examples and details about using
+Incorporated, registered in the United States.}  See \sectionref{ugGraph}
+for more examples and details about using
 Axiom's graphics facilities.
 
 This concludes your tour of Axiom.
@@ -7128,9 +7154,8 @@ prevents the system from building meaningless domains 
such as
 {\tt Polynomial(Boolean)} and then wrongfully applying algorithms that
 presume that the ring axioms hold.
 
-Enough on categories. To learn more about them, see Chapter
-\ref{ugCategories} on page~\pageref{ugCategories}.  
-We now return to our discussion of domains.
+Enough on categories. To learn more about them, see 
+\sectionref{ugCategories}. We now return to our discussion of domains.
 
 Domains {\it export} a set of operations to make them available for
 system-wide use.  {\tt Integer}, for example, exports the operations
@@ -7171,7 +7196,7 @@ over a domain $R$ to polynomials over $S$.  To convert an 
object from
 {\tt Polynomial(Integer)} to {\tt Polynomial(Float)}, Axiom builds the
 package {\tt PolynomialFunctions2(Integer,Float)} in order to create
 the required conversion function.  (This happens ``behind the scenes''
-for you: see \ref{ugTypesConvert} on page~\pageref{ugTypesConvert}
+for you: see \sectionref{ugTypesConvert}
 for details on how to convert objects.)
 
 Axiom categories, domains and packages and all their contained
@@ -7183,8 +7208,8 @@ domains and their functions and how to write your own 
functions.
 \section{Writing Types and Modes}
 \label{ugTypesWriting}
 
-We have already seen in the last section \ref{ugTypesBasic} on
-page~\pageref{ugTypesBasic} several examples of types.  Most of these
+We have already seen in the last section \sectionref{ugTypesBasic}
+several examples of types.  Most of these
 examples had either no arguments (for example, {\tt Integer}) or one
 argument (for example, {\tt Polynomial (Integer)}).  In this section
 we give details about writing arbitrary types.  We then define modes
@@ -7197,12 +7222,12 @@ you declare variables.
 \returnType{Type: Void}
 
 You need to do so when you declare functions 
-(See Section \ref{ugTypesDeclare} on page~\pageref{ugTypesDeclare}),
+(See \sectionref{ugTypesDeclare})
 \spadcommand{f : Integer -> String}
 \returnType{Type: Void}
 
 You need to do so when you convert an object from one type to another
-(See Section \ref{ugTypesConvert} on page~\pageref{ugTypesConvert}).
+(See \sectionref{ugTypesConvert}).
 \spadcommand{factor(2 :: Complex(Integer))}
 $$
 -{i \  {{\left( 1+i 
@@ -7218,7 +7243,7 @@ $$
 \returnType{Type: Boolean}
 
 You need to do so when you give computation target type information
-(See Section \ref{ugTypesPkgCall} on page~\pageref{ugTypesPkgCall}).
+(See \sectionref{ugTypesPkgCall})
 \spadcommand{(2 = 3)@Boolean}
 $$
 {\tt false} 
@@ -7279,7 +7304,7 @@ $$
 \returnType{Type: Complex Fraction Integer}
 
 If you supply computation target type information 
-(See Section \ref{ugTypesPkgCall} on page~\pageref{ugTypesPkgCall}) 
+(See \sectionref{ugTypesPkgCall})
 then you should enclose the argument in parentheses.
 \spadcommand{(2/3)@Fraction(Polynomial(Integer))}
 $$
@@ -7336,9 +7361,8 @@ and {\tt SquareMatrix(?, ?)} are all
 invalid.  The question mark must take the place of a domain, not data.
 This rules out, for example, the two {\tt SquareMatrix} expressions.
 
-Modes can be used for declarations (See Section \ref{ugTypesDeclare}
-on page~\pageref{ugTypesDeclare}) and conversions (Section
-\ref{ugTypesConvert} on page~\pageref{ugTypesConvert}).  However, you
+Modes can be used for declarations (See \sectionref{ugTypesDeclare})
+and conversions (\sectionref{ugTypesConvert}).  However, you
 cannot use a mode for package calling or giving target type information.
 
 \subsection{Abbreviations}
@@ -7395,7 +7419,7 @@ abbreviations.  For a specific constructor, use {\tt 
)abbreviation
 query}.  \index{abbreviation} You can also use the {\tt )what} system
 command to see the names and abbreviations of constructors.
 \index{what} For more information about {\tt )what}, see
-\ref{ugSysCmdwhat} on page~\pageref{ugSysCmdwhat}.
+\sectionref{ugSysCmdwhat}.
 
 {\tt )abbreviation query} can be abbreviated (no pun intended) to 
 {\tt )abb q}.
@@ -7463,10 +7487,8 @@ For multiple variables, the syntax is
 You can always combine a declaration with an assignment.  When you do,
 it is equivalent to first giving a declaration statement, then giving
 an assignment.  For more information on assignment, see
-Section \ref{ugIntroAssign} on page~\pageref{ugIntroAssign} and 
-Section \ref{ugLangAssign} on page~\pageref{ugLangAssign}.  
-To see how to declare your own functions, 
-see \ref{ugUserDeclare} on page~\pageref{ugUserDeclare}.
+\sectionref{ugIntroAssign} and \sectionref{ugLangAssign}.
+To see how to declare your own functions, see \sectionref{ugUserDeclare}.
 
 This declares one variable to have a type.
 \spadcommand{a : Integer}
@@ -7567,8 +7589,8 @@ $$
 \returnType{Type: Complex Polynomial Integer}
 
 This is a polynomial with complex integer coefficients.  The objects
-are convertible from one to the other.  See \ref{ugTypesConvert} on
-page~\pageref{ugTypesConvert} for more information.
+are convertible from one to the other.  See \sectionref{ugTypesConvert}
+for more information.
 
 \spadcommand{g : POLY COMPLEX ? := (x + y*\%i)**2}
 $$
@@ -7923,7 +7945,7 @@ $$
 \subsection{Unions With Selectors}
 \label{ugTypesUnionsWSel}
 
-Like records (\ref{ugTypesRecords} on page~\pageref{ugTypesRecords}),
+Like records (\sectionref{ugTypesRecords}), 
 you can write {\tt Union} types \index{selector!union} with selectors.
 \index{union!selector}
 
@@ -7953,7 +7975,7 @@ integer {\it and} a float {\it and} a string.  An object 
of type
 {\it or} a float {\it or} a string.
 
 Here is a version of the {\bf sayBranch} function (cf.
-\ref{ugTypesUnionsWOSel} on page~\pageref{ugTypesUnionsWOSel}) that
+\sectionref{ugTypesUnionsWOSel}) that
 works with a union with selectors.  It displays a message stating in
 which branch of the {\tt Union} the object lies.
 
@@ -8177,7 +8199,7 @@ multiplication, whereas {\tt SquareMatrix} does not. That 
is because
 {\tt Fraction} requires that its argument belong to the category 
 {\tt IntegralDomain} and \index{category} {\tt Complex} requires that its
 argument belong to {\tt CommutativeRing}. 
-See \ref{ugTypesBasic} on page~\pageref{ugTypesBasic} for a
+See \sectionref{ugTypesBasic} for a
 brief discussion of categories. The {\tt Integer} level did not move
 anywhere because it does not allow any arguments.  We also did not
 move the {\tt SquareMatrix} part anywhere, but we could have.
@@ -8464,7 +8486,7 @@ your having to qualify it with type information.  
Nevertheless, there
 are times when you need to help it along by providing hints (or even
 orders!) to get Axiom to do what you want.
 
-We saw in \ref{ugTypesDeclare} on page~\pageref{ugTypesDeclare} that
+We saw in \sectionref{ugTypesDeclare} that
 declarations using types and modes control the type of the results
 produced.  For example, we can either produce a complex object with
 polynomial real and imaginary parts or a polynomial with complex
@@ -8526,8 +8548,7 @@ $$ fun\ (\ arg_1, arg_2, \ldots, arg_N\ )\$type$$
 For example, to call the ``minimum'' function from {\rm DoubleFloat} on two
 integers, you could write {\bf min}(4,89){\tt DoubleFloat}. Another use of
 package calling is to tell AXIOM to use a library function rather than a
-function you defined. We discuss this in 
-Section \ref{ugUserUse} on page~\pageref{ugUserUse}.
+function you defined. We discuss this in \sectionref{ugUserUse}.
 
 Sometimes rather than specifying where an operation comes from, you
 just want to say what type the result should be. We say that you provide a
@@ -8764,8 +8785,8 @@ Every \index{constructor!exposed} domain and package in 
the Axiom
 library \index{constructor!hidden} is \index{exposed!constructor}
 either exposed (meaning that you can use its operations without doing
 anything special) or it is {\it hidden} (meaning you have to either
-package call (see \ref{ugTypesPkgCall} on
-page~\pageref{ugTypesPkgCall}) the operations it contains or
+package call (see \sectionref{ugTypesPkgCall})
+the operations it contains or
 explicitly expose it to use the operations).  The initial exposure
 status for a constructor is set in the file {\bf exposed.lsp} (see the
 {\it Installer's Note} \index{exposed.lsp @{\bf exposed.lsp}} for
@@ -8834,8 +8855,8 @@ you should issue {\tt )set expose add group basic} to 
restore your default
 environment.  \index{set expose add group}
 
 It is more likely that you would want to expose or hide individual
-constructors.  In \ref{ugUserTriangle} on
-page~\pageref{ugUserTriangle} we use several operations from 
+constructors.  In \sectionref{ugUserTriangle}
+we use several operations from 
 {\tt OutputForm}, a domain usually hidden.  To avoid package calling every
 operation from {\tt OutputForm}, we expose the domain and let Axiom
 conclude that those operations should be used.  Use {\tt )set expose
@@ -8883,7 +8904,7 @@ Hide {\tt OutputForm} so we don't run into problems with 
any later examples!
 \end{verbatim}
 
 Finally, exposure is done on a frame-by-frame basis.  A {\it frame}
-(see \ref{ugSysCmdframe} on page~\pageref{ugSysCmdframe})
+(see \sectionref{ugSysCmdframe})
 \index{frame!exposure and} is one of possibly several logical Axiom
 workspaces within a physical one, each having its own environment (for
 example, variables and function definitions).  If you have several
@@ -8901,8 +8922,7 @@ To conclude this chapter, we introduce you to some system 
commands
 that you can use for getting more information about domains, packages,
 categories, and operations.  The most powerful Axiom facility for
 getting information about constructors and operations is the Browse
-component of HyperDoc.  This is discussed in Chapter 
-\ref{ugBrowse} on page~\pageref{ugBrowse}.
+component of HyperDoc.  This is discussed in \sectionref{ugBrowse}.
 
 Use the {\tt )what} system command to see lists of system objects
 whose name contain a particular substring (uppercase or lowercase is
@@ -9017,9 +9037,8 @@ So if {\tt D1} is a commutative ring (such as the 
integers or floats) and
 called {\bf complex} that takes two elements of {\tt D1} and creates an
 element of {\tt D}.  The primary example of a constructor implementing
 domains belonging to {\tt ComplexCategory} is {\tt Complex}.  See
-\ref{Complex} on page~\pageref{Complex} for more information on that and see
-\ref{ugUserDeclare} on page~\pageref{ugUserDeclare}
-for more information on function types.
+\domainref{Complex} for more information on that and see
+\sectionref{ugUserDeclare} for more information on function types.
 
 \setcounter{chapter}{2}
 
@@ -9083,9 +9102,8 @@ top-level menu.
 \label{ugHyperKeys}
 
 The following keyboard definitions are in effect throughout HyperDoc.
-See \ref{ugHyperScroll} on page~\pageref{ugHyperScroll} and 
-\ref{ugHyperInput} on page~\pageref{ugHyperInput} for some contextual key
-definitions.
+See \sectionref{ugHyperScroll} and \sectionref{ugHyperInput}
+for some contextual key definitions.
 
 \begin{description}
 \item[F1] Display the main help page.
@@ -9131,7 +9149,7 @@ To move up or down one screen at a time, use the 
\fbox{\bf PageUp} and
 region up and down one page each time you press them.
 
 If the HyperDoc page does not contain an input area (see
-\ref{ugHyperInput} on page~\pageref{ugHyperInput}), you can also use
+\sectionref{ugHyperInput}, you can also use
 the \fbox{\bf Home} and \fbox{$\uparrow$} and \fbox{$\downarrow$}
 arrow keys to navigate.  When you press the \fbox{\bf Home} key, the
 screen is positioned at the very top of the page.  Use the
@@ -9417,8 +9435,7 @@ file is in your home directory or in the directory you 
specified with
 \index{cd} {\tt {)cd}}.\\
 }
 
-In \ref{ugLangBlocks} on page~\pageref{ugLangBlocks} 
-we discuss using indentation in input files to
+In \sectionref{ugLangBlocks} we discuss using indentation in input files to
 group statements into {\it blocks.}
 
 \section{The .axiom.input File}
@@ -10112,7 +10129,7 @@ $$
 \returnType{Type: PositiveInteger}
 
 There is no syntactic form for multiple delayed assignments.  See the
-discussion in section \ref{ugUserDelay} on page~\pageref{ugUserDelay}
+discussion in \sectionref{ugUserDelay}
 about how Axiom differentiates between delayed assignments and user
 functions of no arguments.
 
@@ -10239,7 +10256,7 @@ $$
 \returnType{Type: Polynomial Float}
 
 Blocks can be used in the clauses of {\tt if-then-else} expressions 
-(see \ref{ugLangIf} on page~\pageref{ugLangIf}).
+(see \sectionref{ugLangIf}).
 
 \spadcommand{if h > 3.1 then 1.0 else (z := cos(h); max(z,0.5))}
 $$
@@ -10325,8 +10342,8 @@ An {\tt if-then-else} expression always returns a 
value.  If the
 {\tt else} clause is missing then the entire expression returns the unique
 value of {\tt Void}.  If both clauses are present, the type of the
 value returned by {\tt if} is obtained by resolving the types of the
-values of the two clauses.  See \ref{ugTypesResolve} on
-page~\pageref{ugTypesResolve} for more information.
+values of the two clauses.  See \sectionref{ugTypesResolve} 
+for more information.
 
 The predicate must evaluate to, or be convertible to, an object of
 type {\tt Boolean}: {\tt true} or {\tt false}.  By default, the equal
@@ -10347,8 +10364,7 @@ predicate and equality testing is performed.  
\index{Boolean} Thus you
 need not qualify the ``{\tt =}'' in any way.  In other contexts you
 may need to tell Axiom that you want to test for equality rather than
 create an equation.  In those cases, use ``{\tt @}'' and a target type
-of {\tt Boolean}.  See section \ref{ugTypesPkgCall} on
-page~\pageref{ugTypesPkgCall} for more information.
+of {\tt Boolean}.  See \sectionref{ugTypesPkgCall} for more information.
 
 The compound symbol meaning ``not equal'' in Axiom is
 \index{inequality testing} ``{$\sim =$}''.  address@hidden =$} 
@@ -10450,8 +10466,8 @@ following message:
 \end{center}
 
 It is still possible that Axiom can evaluate the loop but in {\it
-interpret-code mode}.  See section \ref{ugUserCompInt} on
-page~\pageref{ugUserCompInt} where this is discussed in terms
+interpret-code mode}.  See \sectionref{ugUserCompInt} 
+where this is discussed in terms
 \index{panic!avoiding} of compiling versus interpreting functions.
 
 \subsection{return in Loops}
@@ -10510,7 +10526,7 @@ f() ==
 \returnType{Type: Void}
 
 When we try {\bf f} again we get what we wanted.  See
-\ref{ugUserBlocks} on page~\pageref{ugUserBlocks} for more information.
+\sectionref{ugUserBlocks} for more information.
 
 \spadcommand{f()}
 \begin{verbatim}
@@ -10531,7 +10547,7 @@ always return the unique value of {\tt Void}., you 
cannot return a
 value with {\tt break}.  That is, {\tt break} takes no argument.
 
 This example is a modification of the last example in the previous
-section \ref{ugLangLoopsReturn} on page~\pageref{ugLangLoopsReturn}.
+\sectionref{ugLangLoopsReturn}.
 Instead of using {\tt return}, we'll use {\tt break}.
 
 \begin{verbatim}
@@ -10721,8 +10737,7 @@ $$
 Scan the rows looking for the first negative element.  We remark that
 you can reformulate this example in a better, more concise form by
 using a {\tt for} clause with {\tt repeat}.  See
-\ref{ugLangLoopsForIn} on page~\pageref{ugLangLoopsForIn} for more
-information.
+\sectionref{ugLangLoopsForIn} for more information.
 
 \begin{verbatim}
 repeat
@@ -11008,8 +11023,7 @@ for i in 1..5 repeat
 \end{verbatim}
 \returnType{Type: Void}
 
-See section \ref{SegmentXmpPage} on page~\pageref{SegmentXmpPage} for
-more information about segments.
+See \domainref{Segment}.
 
 \subsection{for i in n..m by s repeat}
 \label{ugLangLoopsForInNMS}
@@ -11175,8 +11189,7 @@ for i in 1..50 repeat
 \subsection{Parallel Iteration}
 \label{ugLangLoopsPar}
 
-The last example of the previous section 
-\ref{ugLangLoopsForInPred} on page~\pageref{ugLangLoopsForInPred}
+The last example of the previous \sectionref{ugLangLoopsForInPred}
 gives an example of {\it nested iteration}: a loop is contained
 \index{iteration!nested} in another loop.  \index{iteration!parallel}
 Sometimes you want to iterate across two lists in parallel, or perhaps
@@ -11320,7 +11333,7 @@ or any {\tt for} clause to the left.
 \label{ugLangIts}
 
 All of what we did for loops in 
-\ref{ugLangLoops} on page~\pageref{ugLangLoops} \index{iteration}
+\sectionref{ugLangLoops} \index{iteration}
 can be transformed into expressions that create lists
 \index{list!created by iterator} and streams.  \index{stream!created
 by iterator} The {\tt repeat}, {\tt break} or {\tt iterate} words are not used 
but
@@ -11563,9 +11576,7 @@ $$
 $$
 \returnType{Type: List List List PositiveInteger}
 
-See List 
-(section \ref{ListXmpPage} on page~\pageref{ListXmpPage}) and Stream 
-(section \ref{StreamXmpPage} on page~\pageref{StreamXmpPage})
+See \domainref{List} and \domainref{Stream} 
 for more information on creating and
 manipulating lists and streams, respectively.
 
@@ -11793,7 +11804,7 @@ $$
 
 This is an unnamed function that does the same thing, using the
 ``maps-to'' syntax {\tt +->} that we discuss in 
-section \ref{ugUserAnon} on page~\pageref{ugUserAnon}.
+\sectionref{ugUserAnon}.
 \spadcommand{(x +-> if x < 0 then -x else x)(-8)}
 $$
 8 
@@ -11803,8 +11814,8 @@ $$
 Functions can be used alone or serve as the building blocks for larger
 programs.  Usually they return a value that you might want to use in
 the next stage of a computation, but not always (for example, see
-\ref{ExitXmpPage} on page~\pageref{ExitXmpPage} and \ref{VoidXmpPage}
-on page~\pageref{VoidXmpPage}).  They may also read data from your
+\domainref{Exit} and \domainref{Void}.
+They may also read data from your
 keyboard, move information from one place to another, or format and
 display results on your screen.
 
@@ -11975,8 +11986,7 @@ number of arguments that you choose.
 If you define a function in the workspace that has the same name and
 number of arguments as one in the library, then your definition takes
 precedence.  In fact, to get the library function you must
-{\sl package-call} it 
-(see section \ref{ugTypesPkgCall} on page~\pageref{ugTypesPkgCall}).
+{\sl package-call} it (see \sectionref{ugTypesPkgCall}).
 
 To use a function in Axiom, you apply it to its arguments.  Most
 functions are applied by entering the name of the function followed by
@@ -12020,7 +12030,7 @@ be written as $2*x\ {\tt \&D} x$ returning $2$.
 
 Every function in Axiom is identified by a {\it name} and 
 {\it type}. (An exception is an ``anonymous function'' discussed in
-\ref{ugUserAnon} on page~\pageref{ugUserAnon}.)  
+\sectionref{ugUserAnon}.)
 The type of a function is always a mapping of the
 form \spadsig{Source}{Target} where {\tt Source} and {\tt Target} are types.
 To enter a type from the keyboard, enter the arrow by using a hyphen
@@ -12039,7 +12049,7 @@ are all done with the same function name but with 
different functions.
 \section{Declaring the Type of Functions}
 \label{ugUserDeclare}
 
-In \ref{ugTypesDeclare} on page~\pageref{ugTypesDeclare} we discussed
+In \sectionref{ugTypesDeclare} we discussed
 how to declare a variable to restrict the kind of values that can be
 assigned to it.  In this section we show how to declare a variable
 that refers to function objects.
@@ -12102,7 +12112,7 @@ h(): POLY INT == ...
 A current restriction on function declarations is that they must
 involve fully specified types (that is, cannot include modes involving
 explicit or implicit ``{\tt ?}'').  For more information on declaring
-things in general, see \ref{ugTypesDeclare} on page~\pageref{ugTypesDeclare}.
+things in general, see \sectionref{ugTypesDeclare}.
 
 \section{One-Line Functions}
 \label{ugUserOne}
@@ -12280,17 +12290,16 @@ Here $x+1$ for $x = "axiom"$ makes no sense.
       or "$" to specify which version of the function you need.
 \end{verbatim}
 
-As you will see in Chapter \ref{ugCategories} on
-page~\pageref{ugCategories}, Axiom has a formal idea of categories for
-what ``makes sense.''
+As you will see in \sectionref{ugCategories}, 
+Axiom has a formal idea of categories for what ``makes sense.''
 
 \section{Functions vs. Operations}
 \label{ugUserDecOpers}
 
 A function is an object that you can create, manipulate, pass to, and
 return from functions (for some interesting examples of library
-functions that manipulate functions, see \ref{MappingPackage1XmpPage}
-on page~\pageref{MappingPackage1XmpPage}).  Yet, we often seem to use
+functions that manipulate functions, see \domainref{MappingPackage1}.
+Yet, we often seem to use
 the term {\it operation} and {\it function} interchangeably in Axiom.  What
 is the distinction?
 
@@ -12313,21 +12322,19 @@ excluding the value; thus an operation has a name and 
a type.  An
 operation is what domains and packages export.  Thus {\tt Ring}
 exports one operation ``{\tt +}''.  Every ring also exports this
 operation.  Also, the author of every ring in the system is obliged
-under contract (see \ref{ugPackagesAbstract} on
-page~\pageref{ugPackagesAbstract}) to provide an implementation for
-this operation.
+under contract (see \sectionref{ugPackagesAbstract} 
+to provide an implementation for this operation.
 
 This chapter is all about functions---how you create them
-interactively and how you apply them to meet your needs.  In Chapter
-\ref{ugPackages} on page~\pageref{ugPackages} you will learn how to
-create them for the Axiom library.  Then in Chapter \ref{ugCategories}
-on page~\pageref{ugCategories}, you will learn about categories and
-exported operations.
+interactively and how you apply them to meet your needs.  In 
+\sectionref{ugPackages} you will learn how to
+create them for the Axiom library.  Then in \sectionref{ugCategories},
+you will learn about categories and exported operations.
 
 \section{Delayed Assignments vs. Functions with No Arguments}
 \label{ugUserDelay}
 
-In \ref{ugLangAssign} on page~\pageref{ugLangAssign} we discussed the
+In \sectionref{ugLangAssign} we discussed the
 difference between immediate and \index{function!with no arguments}
 delayed assignments.  In this section we show the difference between
 delayed assignments and functions of no arguments.
@@ -12405,8 +12412,7 @@ $$
 \returnType{Type: Float}
 
 If you want the library operation, we have to package-call it
-(see \ref{ugTypesPkgCall} on page~\pageref{ugTypesPkgCall}
-for more information).
+(see \sectionref{ugTypesPkgCall} for more information).
 \spadcommand{sin(4.3)\$Float}
 $$
 -{0.9161659367 4945498404} 
@@ -12484,7 +12490,7 @@ creating an object of type {\tt Fraction(Integer)}.
 {\tt Fraction(Integer)} are found in either domain.
 \item Axiom resolves
 \index{resolve}
-(see \ref{ugTypesResolve} on page~\pageref{ugTypesResolve})
+(see \sectionref{ugTypesResolve})
 the types and gets {\tt Polynomial (Fraction (Integer))}.
 \item The $x$ and the $2/3$ are converted to objects of this
 type and {\tt +} is applied, yielding the answer, an object of type
@@ -12565,7 +12571,7 @@ Cannot compile conversion for types involving local 
variables.
 
 Sometimes you can help a function to compile by using an extra
 conversion or by using $pretend$.  \index{pretend} See
-\ref{ugTypesSubdomains} on page~\pageref{ugTypesSubdomains} for details.
+\sectionref{ugTypesSubdomains} for details.
 
 When a function is compilable, you have the choice of whether it is
 compiled to Common Lisp and then interpreted by the Common Lisp
@@ -12863,10 +12869,10 @@ $$
 
 We have already seen some examples of \index{function!predicate}
 predicates \index{predicate!in function definition}
-(\ref{ugUserPieceBasic} on page~\pageref{ugUserPieceBasic}).
+(\sectionref{ugUserPieceBasic}.
 Predicates are {\tt Boolean}-valued expressions and Axiom uses them
-for filtering collections (see \ref{ugLangIts} on
-page~\pageref{ugLangIts}) and for placing constraints on function
+for filtering collections (see \sectionref{ugLangIts}
+and for placing constraints on function
 arguments.  In this section we discuss their latter usage.
 
 The simplest use of a predicate is one you don't see at all.
@@ -13019,8 +13025,7 @@ highly unlikely that a function with no arguments 
should be cached.\\
 }
 
 You should also be careful about caching functions that depend on free
-variables.  See \ref{ugUserFreeLocal} on
-page~\pageref{ugUserFreeLocal} for an example.
+variables.  See \sectionref{ugUserFreeLocal} for an example.
 
 \section{Recurrence Relations}
 \label{ugUserRecur}
@@ -13107,11 +13112,10 @@ The transformations that Axiom uses for {\bf fib} 
caches the last two
 values. For a more general $k$-th order recurrence relation, Axiom
 caches the last $k$ values.  If, after computing a value for {\bf
 fib}, you ask for some larger value, Axiom picks up the cached values
-and continues computing from there.  See \ref{ugUserFreeLocal} on
-page~\pageref{ugUserFreeLocal} for an example of a function definition
-that has this same behavior.  Also see \ref{ugUserCache} on
-page~\pageref{ugUserCache} for a more general discussion of how you
-can cache function values.
+and continues computing from there.  See \sectionref{ugUserFreeLocal}
+for an example of a function definition
+that has this same behavior.  Also see \sectionref{ugUserCache} 
+for a more general discussion of how you can cache function values.
 
 Recurrence relations can be used for defining recurrence relations
 involving polynomials, rational functions, or anything you like.
@@ -13154,8 +13158,7 @@ workspace.  There are several versions, depending on 
how many
 arguments the function has.  The first argument to {\bf function} is
 always the expression to be converted into the function body, and the
 second is always the name to be used for the function.  For more
-information, see section \ref{MakeFunctionXmpPage} on
-page~\pageref{MakeFunctionXmpPage}.
+information, see \domainref{MakeFunction}.
 
 Start with a simple example of a polynomial in three variables.
 \spadcommand{p := -x + y**2 - z**3}
@@ -13329,7 +13332,7 @@ for {\tt Integer}, {\tt Float}, {\tt String}, {\tt 
Complex},
 
 You need not restrict yourself to functions that only fit on one line
 or are written in a piece-wise manner.  The body of the function can
-be a block, as discussed in \ref{ugLangBlocks} on page~\pageref{ugLangBlocks}.
+be a block, as discussed in \sectionref{ugLangBlocks}.
 
 Here is a short function that swaps two elements of a list, array or vector.
 \begin{verbatim}
@@ -13654,7 +13657,7 @@ in your functions.  No declaration is needed for this 
situation, but
 be sure to initialize their values.
 
 Be careful if you use free variables and you cache the value of your
-function (see \ref{ugUserCache} on page~\pageref{ugUserCache}).
+function (see \sectionref{ugUserCache}).
 Caching {\it only} checks if the values of the function arguments are
 the same as in a function call previously seen.  It does not check if
 any of the free variables on which the function depends have changed
@@ -13756,7 +13759,7 @@ To conclude this section, we give an iterative 
definition of
 \index{Fibonacci numbers} a function that computes Fibonacci numbers.
 This definition approximates the definition into which Axiom
 transforms the recurrence relation definition of {\bf fib} in
-\ref{ugUserRecur} on page~\pageref{ugUserRecur}.
+\sectionref{ugUserRecur}.
 
 Global variables {\tt past} and {\tt present} are used to hold the last
 computed Fibonacci numbers.
@@ -14175,7 +14178,7 @@ seen before.
 
 To make these output operations available, we have to {\it expose} the
 domain {\tt OutputForm}.  \index{OutputForm} See 
-\ref{ugTypesExpose} on page~\pageref{ugTypesExpose}
+\sectionref{ugTypesExpose}
 for more information about exposing domains and packages.
 \spadcommand{)set expose add constructor OutputForm}
 \begin{verbatim}
@@ -14902,7 +14905,7 @@ The general format for drawing a function defined by a 
formula $f(x)$ is:
 
 where $a..b$ defines the range of $x$, and where {\it options}
 prescribes zero or more options as described in
-\ref{ugGraphTwoDOptions} on page~\pageref{ugGraphTwoDOptions}.  An
+\sectionref{ugGraphTwoDOptions}.  An
 example of an option is $curveColor == bright red().$ An alternative
 format involving functions $f$ and $g$ is also available.\\
 }
@@ -14979,7 +14982,7 @@ parametric formulas $x = f(t)$ and $y = g(t)$ is:
 
 where $a..b$ defines the range of the independent variable $t$, and
 where {\it options} prescribes zero or more options as described in
-\ref{ugGraphThreeDOptions} on page~\pageref{ugGraphThreeDOptions}.  An
+\sectionref{ugGraphThreeDOptions}.  An
 example of an option is $curveColor == bright red().$\\ }
 
 Here's an example:
@@ -15063,7 +15066,7 @@ independent variables of $p$.  A {\tt range} option is 
always given to
 designate a bounding rectangular region of the plane
 $a \leq x \leq b, c \leq y \leq d$.
 Zero or more additional options as described in
-\ref{ugGraphTwoDOptions} on page~\pageref{ugGraphTwoDOptions} may be given.\\
+\sectionref{ugGraphTwoDOptions} may be given.\\
 }
 
 We require that the polynomial has rational or integral coefficients.
@@ -15144,8 +15147,8 @@ specified, clipping applies to the y-axis.
 
 Option {\tt curveColor} sets the color of the graph curves or lines to
 be the \index{graphics!2D options!curve color} indicated palette color
-\index{curve!color} (see \ref{ugGraphColor} on page~\pageref{ugGraphColor} and
-\ref{ugGraphColorPalette} on page~\pageref{ugGraphColorPalette}).  
+\index{curve!color} (see \sectionref{ugGraphColor} and
+\sectionref{ugGraphColorPalette}).  
 \index{color!curve}
 
 \spadgraph{draw(sin(x),x=-\%pi..\%pi, curveColor == bright red())}
@@ -15155,8 +15158,7 @@ be the \index{graphics!2D options!curve color} 
indicated palette color
 
 Option {\tt pointColor} sets the color of the graph points to the
 indicated \index{graphics!2D options!point color} palette color (see
-\ref{ugGraphColor} on page~\pageref{ugGraphColor} and 
-\ref{ugGraphColorPalette} on page~\pageref{ugGraphColorPalette}).
+\sectionref{ugGraphColor} and \sectionref{ugGraphColorPalette}).
 \index{color!point}
 \spadgraph{draw(sin(x),x=-\%pi..\%pi, pointColor == pastel yellow())}
 
@@ -15189,7 +15191,7 @@ Option $coordinates$ indicates the coordinate system in 
which the
 graph \index{graphics!2D options!coordinates} is plotted.  The default
 is to use the Cartesian coordinate system.
 \index{Cartesian!coordinate system} For more details, see
-\ref{ugGraphCoord} on page~\pageref{ugGraphCoord} 
+\sectionref{ugGraphCoord}
 {or {\tt CoordinateSystems}.}
 \index{coordinate system!Cartesian}
 
@@ -16126,10 +16128,10 @@ plotData2D("file.data", "2D Data Plot")
 \subsection{Addendum: Appending a Graph to a Viewport Window Containing a 
Graph}
 \label{ugGraphTwoDappend}
 
-This section demonstrates how to append a two-di\-men\-sion\-al graph to a 
viewport
-already containing other graphs.
-The default {\bf draw} command places a graph into the first
-{\tt GraphImage} slot position of the {\tt TwoDimensionalViewport}.
+This section demonstrates how to append a two-di\-men\-sion\-al graph
+to a viewport already containing other graphs.  The default {\bf draw}
+command places a graph into the first {\tt GraphImage} slot position
+of the {\tt TwoDimensionalViewport}.
 
 This graph is in the first slot in its viewport.
 
@@ -16194,8 +16196,7 @@ of two variables $x$ and $y$ is:
 \end{center}
 where $a..b$ and $c..d$ define the range of $x$
 and $y$, and where {\it options} prescribes zero or more
-options as described in \ref{ugGraphThreeDOptions} 
-on page~\pageref{ugGraphThreeDOptions}.
+options as described in \sectionref{ugGraphThreeDOptions}.
 An example of an option is $title == "Title of Graph".$
 An alternative format involving a function $f$ is also
 available.\\
@@ -16250,8 +16251,7 @@ $z = h(t)$ is:
 \end{center}
 where $a..b$ defines the range of the independent variable
 $t$, and where {\it options} prescribes zero or more options
-as described in \ref{ugGraphThreeDOptions} 
-on page~\pageref{ugGraphThreeDOptions}.
+as described in \sectionref{ugGraphThreeDOptions}.
 An example of an option is $title == "Title of Graph".$
 An alternative format involving functions $f$, $g$ and
 $h$ is also available.\\
@@ -16324,7 +16324,7 @@ and $z = h(u,v)$ is:
 where $a..b$ and $c..d$ define the range of the
 independent variables $u$ and $v$, and where
 {\it options} prescribes zero or more options as described in
-\ref{ugGraphThreeDOptions} on page~\pageref{ugGraphThreeDOptions}.
+\sectionref{ugGraphThreeDOptions}.
 An example of an option is $title == "Title of Graph".$
 An alternative format involving functions $f$, $g$ and
 $h$ is also available.\\
@@ -16337,7 +16337,7 @@ The values of the functions supplied to {\bf surface} 
are
 \index{parabolic cylindrical coordinate system}
 interpreted in coordinates as given by a {\tt coordinates} option,
 here as parabolic cylindrical coordinates (see
-\ref{ugGraphCoord} on page~\pageref{ugGraphCoord}).
+\sectionref{ugGraphCoord}.
 
 \spadgraph{draw(surface(u*cos(v), u*sin(v), v*cos(u)), u=-4..4, v=0..\%pi, 
coordinates== parabolicCylindrical)}
 
@@ -16481,7 +16481,7 @@ Normally the Cartesian coordinate system is used.
 \index{Cartesian!coordinate system}
 To change this, use the {\tt coordinates} option.
 \index{coordinate system!Cartesian}
-For details, see \ref{ugGraphCoord} on page~\pageref{ugGraphCoord}.
+For details, see \sectionref{ugGraphCoord}.
 
 \spadcommand{m(u:DFLOAT,v:DFLOAT):DFLOAT == 1 }
 \begin{verbatim}
@@ -17913,16 +17913,15 @@ operations defined on these types and the related 
complex types.
 \index{numeric operations}
 %
 As we mentioned in Chapter 
-\ref{ugIntro} on page~\pageref{ugIntro}, the {\tt Float} type is a software
+\sectionref{ugIntro}, the {\tt Float} type is a software
 implementation of floating-point numbers in which the exponent and the
 \index{floating-point number}
 significand may have any number of digits.
 \index{number!floating-point}
-See 
-\ref{FloatXmpPage} on page~\pageref{FloatXmpPage} 
+See \domainref{Float}
 for detailed information about this domain.
-The {\tt DoubleFloat} (see \ref{DoubleFloatXmpPage} on 
-page~\pageref{DoubleFloatXmpPage}) is usually a hardware implementation 
+The \domainref{DoubleFloat}
+is usually a hardware implementation 
 of floating point numbers, corresponding to machine double
 precision.
 The types {\tt Complex Float} and {\tt Complex DoubleFloat} are
@@ -18590,8 +18589,7 @@ $$
 
 Convert this to have coefficients in the finite
 field with $19^3$ elements.
-See \ref{ugProblemFinite} on page~\pageref{ugProblemFinite} 
-for more information about finite fields.
+See \sectionref{ugProblemFinite} for more information about finite fields.
 
 \spadcommand{factor(u :: POLY FFX(PF 19,3)) }
 $$
@@ -18783,10 +18781,9 @@ In this section we show you how to work with one root 
or all roots
 of a polynomial.
 These roots are represented symbolically (as opposed to being
 numeric approximations).
-See \ref{ugxProblemOnePol} on page~\pageref{ugxProblemOnePol} and 
-\ref{ugxProblemPolSys} on page~\pageref{ugxProblemPolSys} for
-information about solving for the roots of one or more
-polynomials.
+See \sectionref{ugxProblemOnePol} and 
+\sectionref{ugxProblemPolSys} for
+information about solving for the roots of one or more polynomials.
 
 \subsection{Using a Single Root of a Polynomial}
 \label{ugxProblemSymRootOne}
@@ -18945,7 +18942,7 @@ $$
 
 Corresponding to the pair of operations
 {\bf rootOf}/{\bf zeroOf} in
-\ref{ugxProblemOnePol} on page~\pageref{ugxProblemOnePol}, there is
+\sectionref{ugxProblemOnePol}, there is
 an operation {\bf zerosOf} that, like {\bf rootsOf},
 computes all the roots
 of a given polynomial, but which expresses some of them in terms of
@@ -19278,7 +19275,7 @@ systems of linear equations, finding the roots of 
polynomials and
 \index{linear equation}
 solving systems of polynomial equations.
 For a discussion of the solution of differential equations, see
-\ref{ugProblemDEQ} on page~\pageref{ugProblemDEQ}.
+\sectionref{ugProblemDEQ}.
 
 \subsection{Solution of Systems of Linear Equations}
 \label{ugxProblemLinSys}
@@ -19591,8 +19588,7 @@ to {\bf solve} for single equations.
 Instead of a polynomial equation, one has to give a list of
 equations and instead of a single variable to solve for, a list of
 variables.
-For solutions of single equations see 
-\ref{ugxProblemOnePol} on page~\pageref{ugxProblemOnePol}.
+For solutions of single equations see \sectionref{ugxProblemOnePol}.
 
 Use the operation {\bf solve} if you want implicitly presented
 solutions.
@@ -20143,8 +20139,7 @@ $$
 Sometimes {\bf integrate} can involve symbolic algebraic numbers
 such as those returned by \spadfunFrom{rootOf}{Expression}.
 To see how to work with these strange generated symbols (such as
-$\%\%a0$), see 
-\ref{ugxProblemSymRootAll} on page~\pageref{ugxProblemSymRootAll}.
+$\%\%a0$), see \sectionref{ugxProblemSymRootAll}.
 
 Definite integration is the process of computing the area between
 \index{integration!definite}
@@ -20257,8 +20252,7 @@ can also use {\bf taylor}, {\bf laurent} and {\bf 
puiseux} in
 situations where you know what kind of exponents are involved.
 
 For information about solving differential equations in terms of
-power series, see 
-\ref{ugxProblemDEQSeries} on page~\pageref{ugxProblemDEQSeries}.
+power series, see \sectionref{ugxProblemDEQSeries}.
 
 \subsection{Creation of Power Series}
 \label{ugxProblemSeriesCreate}
@@ -20353,8 +20347,7 @@ $$
 
 You can also convert an expression into a series expansion.  This
 expression creates the series expansion of $1/log(y)$ about $y = 1$.
-For details and more examples, see \ref{ugxProblemSeriesConversions} 
-on page~\pageref{ugxProblemSeriesConversions}.
+For details and more examples, see \sectionref{ugxProblemSeriesConversions}.
 
 \spadcommand{series(1/log(y),y = 1)}
 $$
@@ -20382,10 +20375,9 @@ $$
 
 You can create power series with more general coefficients.  You
 normally accomplish this via a type declaration (see 
-\ref{ugTypesDeclare} on page~\pageref{ugTypesDeclare}).  
-See \ref{ugxProblemSeriesFunctions} on 
-page~\pageref{ugxProblemSeriesFunctions} for some warnings about working with 
-declared series.
+\sectionref{ugTypesDeclare}).
+See \sectionref{ugxProblemSeriesFunctions} 
+for some warnings about working with declared series.
 
 We declare that $y$ is a one-variable Taylor series
 \index{series!Taylor} ({\tt UTS} is the abbreviation for 
@@ -20426,7 +20418,7 @@ $$
 
 You can also create a power series by giving an explicit formula for
 its $n$-th coefficient.  For details and more examples, see
-\ref{ugxProblemSeriesFormula} on page~\pageref{ugxProblemSeriesFormula}.
+\sectionref{ugxProblemSeriesFormula}.
 
 To create a series about $w = 0$ whose $n$-th Taylor coefficient is
 $1/n!$, you can evaluate this expression.  This is the Taylor
@@ -21133,8 +21125,7 @@ functions by giving formulas for their coefficients.  
You can also
 compute such series expansions directly simply by specifying the
 function and the point about which the series is to be expanded.
 \index{GenerateUnivariatePowerSeries} See
-\ref{ugxProblemSeriesConversions} on 
-page~\pageref{ugxProblemSeriesConversions} for more information.
+\sectionref{ugxProblemSeriesConversions} for more information.
 
 Consider the Taylor expansion of $e^x$ \index{series!Taylor}
 about $x = 0$:
@@ -21177,8 +21168,7 @@ specifies that the series is to be expanded in powers 
of $(x - 0)$,
 that is, in powers of $x$.  Since we did not specify an initial
 degree, the first term in the series was the term of degree 0 (the
 constant term).  Note that the formula was given as an anonymous
-function.  These are discussed in \ref{ugUserAnon} on 
-page~\pageref{ugUserAnon}.
+function.  These are discussed in \sectionref{ugUserAnon}.
 
 Consider the Taylor expansion of $log x$ about $x = 1$:
 
@@ -21344,8 +21334,8 @@ finite object.
 In general this is the zero-equivalence problem and is undecidable.\\
 }
 
-As we discussed in \ref{ugxProblemSeriesConversions} on 
-page~\pageref{ugxProblemSeriesConversions}, you can also use
+As we discussed in \sectionref{ugxProblemSeriesConversions},
+you can also use
 the operations {\bf taylor}, {\bf laurent} and {\bf puiseux} instead
 of {\bf series} if you know ahead of time what kind of exponents a
 series has.  You can't go wrong using {\bf series}, though.
@@ -21633,7 +21623,7 @@ when integrating factors can be found just by 
integration.
 \end{itemize}
 
 For a discussion of the solution of systems of linear and polynomial
-equations, see \ref{ugProblemLinPolEqn} on page~\pageref{ugProblemLinPolEqn}.
+equations, see \sectionref{ugProblemLinPolEqn}.
 
 \subsection{Closed-Form Solutions of Linear Differential Equations}
 \label{ugxProblemLDEQClosed}
@@ -22189,8 +22179,7 @@ different representations of extensions and different 
extensions of a
 single field.  Finally, note that you usually need to package-call
 operations from finite fields if the operations do not take as an
 argument an object of the field.  See 
-\ref{ugTypesPkgCall} on page~\pageref{ugTypesPkgCall} for more
-information on package-calling.
+\sectionref{ugTypesPkgCall} for more information on package-calling.
 
 \subsection{Modular Arithmetic and Prime Fields}
 \label{ugxProblemFinitePrime}
@@ -22526,9 +22515,8 @@ representation that performs arithmetic with univariate 
(one-variable)
 polynomials modulo an irreducible polynomial.  This polynomial may be
 given explicitly by you or automatically generated.  The ground field
 may be the prime field or one you specify.  See
-\ref{ugxProblemFiniteExtensionFinite} on 
-page~\pageref{ugxProblemFiniteExtensionFinite} for general information about
-finite field extensions.
+\sectionref{ugxProblemFiniteExtensionFinite} 
+for general information about finite field extensions.
 
 For {\tt FiniteField} (abbreviation {\tt FF}) you provide a prime
 number $p$ and an extension degree $n$.  This degree can be 1.
@@ -22700,7 +22688,7 @@ cyclic multiplicative group).  Multiplication (and hence
 exponentiation) using this representation is easy.  To do addition, we
 consider our primitive element as the root of a primitive polynomial
 (an irreducible polynomial whose roots are all primitive).  See
-\ref{ugxProblemFiniteUtility} on page~\pageref{ugxProblemFiniteUtility} 
+\sectionref{ugxProblemFiniteUtility}
 for examples of how to compute such a polynomial.
 
 To use {\tt FiniteFieldCyclicGroup} you provide a prime number and an
@@ -22778,8 +22766,7 @@ polynomial.
 \returnType{Type: Domain}
 
 We use a utility operation to generate an irreducible primitive
-polynomial (see 
-\ref{ugxProblemFiniteUtility} on page~\pageref{ugxProblemFiniteUtility}).  
+polynomial (see \sectionref{ugxProblemFiniteUtility}).
 The polynomial has one variable that is ``anonymous'': 
 it displays as a question mark.
 
@@ -22900,8 +22887,7 @@ The degree of the extension is the degree of the 
polynomial.
 \returnType{Type: Domain}
 
 We use a utility operation to generate an irreducible normal
-polynomial (see 
-\ref{ugxProblemFiniteUtility} on page~\pageref{ugxProblemFiniteUtility}).  
+polynomial (see \sectionref{ugxProblemFiniteUtility}).  p
 The polynomial has
 one variable that is ``anonymous'': it displays as a question mark.
 
@@ -23039,8 +23025,7 @@ $$
 
 There are also conversions available for the situation, when $K_m$ and
 $K_n$ are represented in different ways (see
-\ref{ugxProblemFiniteExtensionFinite} on 
-page~\pageref{ugxProblemFiniteExtensionFinite}).  For example let's choose
+\sectionref{ugxProblemFiniteExtensionFinite}).  For example let's choose
 $K_m$ where the representation is 0 plus the cyclic multiplicative
 group and $K_n$ with a normal basis representation.
 
@@ -24715,8 +24700,8 @@ In this chapter we show examples of many of the most 
commonly used
 AXIOM domains and packages. The sections are organized by constructor
 names.
 
-\section{AssociationList}
-\label{AssociationListXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{AssociationList}
 
 The {\tt AssociationList} constructor provides a general structure for
 associative storage.  This type provides association lists in which
@@ -24863,13 +24848,11 @@ $$
 \returnType{Type: 
 AssociationList(String,Record(monthsOld: Integer,gender: String))}
 
-For more information about tables, 
-see \ref{TableXmpPage} on page~\pageref{TableXmpPage}.
-For more information about lists, 
-see \ref{ListXmpPage} on page~\pageref{ListXmpPage}.
+For more information about tables, see \domainref{Table}.
+For more information about lists, see \domainref{List}.
 
-\section{BalancedBinaryTree}
-\label{BalancedBinaryTreeXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{BalancedBinaryTree}
 
 {\tt BalancedBinaryTrees(S)} is the domain of balanced binary trees
 with elements of type {\tt S} at the nodes.  A binary tree is either
@@ -25004,14 +24987,13 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{BasicOperator}
-\label{BasicOperatorXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{BasicOperator}
 
 A basic operator is an object that can be symbolically applied to a
 list of arguments from a set, the result being a kernel over that set
 or an expression.  In addition to this section, please see
-\ref{ExpressionXmpPage} on page~\pageref{ExpressionXmpPage} and 
-\ref{KernelXmpPage} on page~\pageref{KernelXmpPage} for additional
+\domainref{Expression} and \domainref{Kernel} for additional
 information and examples.
 
 You create an object of type {\tt BasicOperator} by using the
@@ -25058,8 +25040,7 @@ $$
 \returnType{Type: Union(Record(particular: Expression Integer,
 basis: List Expression Integer),...)}
 
-See \ref{ugProblemDEQPage} on page~\pageref{ugProblemDEQPage} 
-in Section \ref{ugProblemDEQNumber} on page~\pageref{ugProblemDEQNumber}
+See \sectionref{ugProblemDEQPage}
 for this kind of use of {\tt BasicOperator}.
 
 Use the single argument form of \spadfunFrom{operator}{BasicOperator}
@@ -25194,17 +25175,15 @@ table()
 $$
 \returnType{Type: AssociationList(String,None)}
 
-\section{BinaryExpansion}
-\label{BinaryExpansionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{BinaryExpansion}
 
 All rational numbers have repeating binary expansions.  Operations to
 access the individual bits of a binary expansion can be obtained by
 converting the value to {\tt RadixExpansion(2)}.  More examples of
 expansions are available in 
-\ref{DecimalExpansionXmpPage} on page~\pageref{DecimalExpansionXmpPage},
-\ref{HexadecimalExpansionXmpPage} on 
-page~\pageref{HexadecimalExpansionXmpPage}, and 
-\ref{RadixExpansionXmpPage} on page~\pageref{RadixExpansionXmpPage}.
+\domainref{DecimalExpansion}, \domainref{HexadecimalExpansion}, and
+\domainref{RadixExpansion}.
 
 The expansion (of type {\tt BinaryExpansion}) of a rational number
 is returned by the \spadfunFrom{binary}{BinaryExpansion} operation.
@@ -25303,8 +25282,8 @@ x+{1.{\overline {01}}}
 $$
 \returnType{Type: Polynomial BinaryExpansion}
 
-\section{BinarySearchTree}
-\label{BinarySearchTreeXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{BinarySearchTree}
 
 {\tt BinarySearchTree(R)} is the domain of binary trees with elements
 of type {\tt R}, ordered across the nodes of the tree.  A non-empty
@@ -25439,8 +25418,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{CardinalNumber}
-\label{CardinalNumberXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{CardinalNumber}
 
 The {\tt CardinalNumber} domain can be used for values indicating the
 cardinality of sets, both finite and infinite.  For example, the
@@ -25653,8 +25632,8 @@ Aleph \left({2} \right)
 $$
 \returnType{Type: CardinalNumber}
 
-\section{CartesianTensor}
-\label{CartesianTensorXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{CartesianTensor}
 
 {\tt CartesianTensor(i0,dim,R)} provides Cartesian tensors with
 components belonging to a commutative ring {\tt R}.  Tensors can be
@@ -26535,13 +26514,13 @@ polynomial or expression type for the components.  In 
this case, it is
 up to the user to satisfy any constraints which arise on the basis of
 this interpretation.
 
-\section{Character}
-\label{CharacterXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Character}
+
 The members of the domain {\tt Character} are values
 representing letters, numerals and other text elements.
 For more information on related topics, see
-\ref{CharacterClassXmpPage} on page~\pageref{CharacterClassXmpPage} and 
-\ref{StringXmpPage} on page~\pageref{StringXmpPage}.
+\domainref{CharacterClass} and \domainref{String}.
 
 Characters can be obtained using {\tt String} notation.
 
@@ -26667,8 +26646,9 @@ $$
 $$
 \returnType{Type: List Boolean}
 
-\section{CharacterClass}
-\label{CharacterClassXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{CharacterClass}
+
 The {\tt CharacterClass} domain allows classes of characters to be
 defined and manipulated efficiently.
  
@@ -26781,11 +26761,11 @@ $$
 \returnType{Type: CharacterClass}
  
 For more information on related topics, see 
-\ref{CharacterXmpPage} on page~\pageref{CharacterXmpPage} and
-\ref{StringXmpPage} on page~\pageref{StringXmpPage}.
+\domainref{Character} and \domainref{String}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{CliffordAlgebra}
 
-\section{CliffordAlgebra}
-\label{CliffordAlgebraXmpPage}
 \noindent
 
 {\tt CliffordAlgebra(n,K,Q)} defines a vector space of dimension $2^n$
@@ -26860,7 +26840,7 @@ c+{d \  {e \sb {1}}}
 $$
 \returnType{Type: CliffordAlgebra(1,Fraction Polynomial Integer,MATRIX)}
 
-See \ref{ComplexXmpPage} on page~\pageref{ComplexXmpPage} 
+See \domainref{Complex}
 for examples of Axiom's constructor implementing complex numbers.
 
 \spadcommand{x * y }
@@ -26965,7 +26945,7 @@ $$
 $$
 \returnType{Type: CliffordAlgebra(2,Fraction Polynomial Integer,MATRIX)}
 
-See \ref{QuaternionXmpPage} on page~\pageref{QuaternionXmpPage} 
+See \domainref{Quaternion}
 for examples of Axiom's constructor implementing quaternions.
 
 \spadcommand{y * x }
@@ -27151,15 +27131,15 @@ $$
 $$
 \returnType{Type: CliffordAlgebra(4,Fraction Integer,MATRIX)}
 
-\section{Complex}
-\label{ComplexXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Complex}
 
 The {\tt Complex} constructor implements complex objects over a
 commutative ring {\tt R}.  Typically, the ring {\tt R} is {\tt Integer}, 
 {\tt Fraction Integer}, {\tt Float} or {\tt DoubleFloat}.
 {\tt R} can also be a symbolic type, like {\tt Polynomial Integer}.
 For more information about the numerical and graphical aspects of
-complex numbers, see \ref{ugProblemNumeric} on page~\pageref{ugProblemNumeric}.
+complex numbers, see \sectionref{ugProblemNumeric}.
 
 Complex objects are created by the \spadfunFrom{complex}{Complex} operation.
 
@@ -27203,9 +27183,7 @@ $$
 $$
 \returnType{Type: Complex Fraction Integer}
 
-Use a conversion (\ref{ugTypesConvertPage} on 
-page~\pageref{ugTypesConvertPage} in Section 
-\ref{ugTypesConvertNumber} on page~\pageref{ugTypesConvertNumber}) 
+Use a conversion (see \sectionref{ugTypesConvertPage})
 to view the last object as a fraction of complex integers.
 
 \spadcommand{\% :: Fraction Complex Integer }
@@ -27291,8 +27269,8 @@ $$
 $$
 \returnType{Type: Factored Complex Integer}
 
-\section{ContinuedFraction}
-\label{ContinuedFractionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{ContinuedFraction}
 
 Continued fractions have been a fascinating and useful tool in
 mathematics for well over three hundred years.  Axiom implements
@@ -27300,7 +27278,7 @@ continued fractions for fractions of any Euclidean 
domain.  In
 practice, this usually means rational numbers.  In this section we
 demonstrate some of the operations available for manipulating both
 finite and infinite continued fractions.  It may be helpful if you
-review \ref{StreamXmpPage} on page~\pageref{StreamXmpPage} to remind 
+review \domainref{Stream} to remind 
 yourself of some of the operations with streams.
 
 The {\tt ContinuedFraction} domain is a field and therefore you can
@@ -27662,8 +27640,8 @@ $$
 $$
 \returnType{Type: Stream Float}
 
-\section{CycleIndicators}
-\label{CycleIndicatorsXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{CycleIndicators}
 
 This section is based upon the paper J. H. Redfield, ``The Theory of
 Group-Reduced Distributions'', American J. Math.,49 (1927) 433-455,
@@ -28294,8 +28272,8 @@ The smallest is
 3
 \end{verbatim}
 
-\section{DeRhamComplex}
-\label{DeRhamComplexXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{DeRhamComplex}
 
 The domain constructor {\tt DeRhamComplex} creates the class of
 differential forms of arbitrary degree over a coefficient ring.  The
@@ -28520,8 +28498,7 @@ $$
 $$
 \returnType{Type: DeRhamComplex(Integer,[x,y,z])}
 
-Now we define some ``basic operators'' (see 
-\ref{OperatorXmpPage} on page~\pageref{OperatorXmpPage}).
+Now we define some ``basic operators'' (see \domainref{Operator}).
 
 \spadcommand{a : BOP := operator('a) }
 $$
@@ -28748,17 +28725,15 @@ a
 $$
 \returnType{Type: Expression Integer}
 
-\section{DecimalExpansion}
-\label{DecimalExpansionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{DecimalExpansion}
 
 All rationals have repeating decimal expansions.  Operations to access
 the individual digits of a decimal expansion can be obtained by
 converting the value to {\tt RadixExpansion(10)}.  More examples of
 expansions are available in 
-\ref{BinaryExpansionXmpPage} on page~\pageref{BinaryExpansionXmpPage},
-\ref{HexadecimalExpansionXmpPage} on 
-page~\pageref{HexadecimalExpansionXmpPage}, and 
-\ref{RadixExpansionXmpPage} on page~\pageref{RadixExpansionXmpPage}.
+\domainref{BinaryExpansion}, \domainref{HexadecimalExpansion}, and
+\domainref{RadixExpansion}.
 
 The operation \spadfunFrom{decimal}{DecimalExpansion} is used to create
 this expansion of type {\tt DecimalExpansion}.
@@ -28849,8 +28824,8 @@ x+{1.{\overline 3}}
 $$
 \returnType{Type: Polynomial DecimalExpansion}
 
-\section{DistributedMultivariatePolynomial}
-\label{DistributedMultivariatePolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{DistributedMultivariatePolynomial}
 
 \hyphenation{Homo-gen-eous-Dis-tributed-Multi-var-i-ate-Pol-y-nomial}
 
@@ -29013,18 +28988,13 @@ Gr\"{o}bner basis calculations which can be very
 sensitive to term ordering.
 
 For more information on related topics, see
-\ref{ugIntroVariablesPage} on page~\pageref{ugIntroVariablesPage} in Section 
-\ref{ugIntroVariablesNumber} on page~\pageref{ugIntroVariablesNumber},
-\ref{ugTypesConvertPage} on page~\pageref{ugTypesConvertPage} in Section 
-\ref{ugTypesConvertNumber} on page~\pageref{ugTypesConvertNumber},
-\ref{PolynomialXmpPage} on page~\pageref{PolynomialXmpPage},
-\ref{UnivariatePolynomialXmpPage} on 
-page~\pageref{UnivariatePolynomialXmpPage}, and
-\ref{MultivariatePolynomialXmpPage} on 
-page~\pageref{MultivariatePolynomialXmpPage}.
-
-\section{DoubleFloat}
-\label{DoubleFloatXmpPage}
+\sectionref{ugIntroVariablesPage},
+\sectionref{ugTypesConvertPage},
+\domainref{Polynomial}, \domainref{UnivariatePolynomial}, and
+\domainref{MultivariatePolynomial}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{DoubleFloat}
 
 Axiom provides two kinds of floating point numbers.  The domain 
 {\tt Float} (abbreviation {\tt FLOAT}) implements a model of arbitrary
@@ -29126,20 +29096,17 @@ $$
 By far, the most common usage of {\tt DoubleFloat} is for functions to
 be graphed.  For more information about Axiom's numerical and
 graphical facilities, see Section
-\ref{ugGraph} on page~\pageref{ugGraph}, 
-\ref{ugProblemNumeric} on page~\pageref{ugProblemNumeric}, and 
-\ref{FloatXmpPage} on page~\pageref{FloatXmpPage}.
+\sectionref{ugGraph}, \sectionref{ugProblemNumeric}, and \domainref{Float}.
 
-\section{EqTable} 
-\label{EqTableXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{EqTable} 
 
 The {\tt EqTable} domain provides tables where the keys are compared
 using \spadfunFrom{eq?}{EqTable}.  Keys are considered equal only if
 they are the same instance of a structure.  This is useful if the keys
 are themselves updatable structures.  Otherwise, all operations are
 the same as for type {\tt Table}.  See 
-\ref{TableXmpPage} on page~\pageref{TableXmpPage} for general
-information about tables.
+\domainref{Table} for general information about tables.
 
 The operation \spadfunFrom{table}{EqTable} is here used to create a table
 where the keys are lists of integers.
@@ -29190,8 +29157,8 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{Equation}
-\label{EquationXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Equation}
 
 The {\tt Equation} domain provides equations as mathematical objects.
 These are used, for example, as the input to various
@@ -29291,8 +29258,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{Exit}
-\label{ExitXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Exit}
 
 A function that does not return directly to its caller has {\tt Exit}
 as its return type.  The operation {\tt error} is an example of one
@@ -29353,14 +29320,11 @@ $$
 $$
 \returnType{Type: NonNegativeInteger}
 
-For functions which return no value at all, use {\tt Void}.  See
-\ref{ugUserPage} on page~\pageref{ugUserPage} in Section 
-\ref{ugUserNumber} on page~\pageref{ugUserNumber} and 
-\ref{VoidXmpPage} on page~\pageref{VoidXmpPage} for
-more information.
+For functions which return no value at all, use {\tt Void}. 
+\domainref{Void} for more information.
 
-\section{Expression}
-\label{ExpressionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Expression}
 
 {\tt Expression} is a constructor that creates domains whose objects
 can have very general symbolic forms.  Here are some examples:
@@ -29450,8 +29414,7 @@ that have category {\tt Field}.  Thus you can invert 
any non-zero
 expression and you shouldn't expect an operation like {\tt factor} to
 give you much information.  You can imagine expressions as being
 represented as quotients of ``multivariate'' polynomials where the
-``variables'' are kernels (see 
-\ref{KernelXmpPage} on page~\pageref{KernelXmpPage}).  A kernel can
+``variables'' are kernels (see \domainref{Kernel}.  A kernel can
 either be a symbol such as {\tt x} or a symbolic function application
 like {\tt sin(x + 4)}.  The second example is actually a nested kernel
 since the argument to {\tt sin} contains the kernel {\tt x}.
@@ -29464,8 +29427,7 @@ $$
 
 Actually, the argument to {\tt sin} is an expression, and so the
 structure of {\tt Expression} is recursive.  
-\ref{KernelXmpPage} on page~\pageref{KernelXmpPage}
-demonstrates how to extract the kernels in an expression.
+\domainref{Kernel} demonstrates how to extract the kernels in an expression.
 
 Use the HyperDoc Browse facility to see what operations are applicable
 to expression.  At the time of this writing, there were 262 operations
@@ -29510,9 +29472,7 @@ $$
 $$
 \returnType{Type: Expression Integer}
 
-See 
-\ref{ugIntroCalcDerivPage} on page~\pageref{ugIntroCalcDerivPage} in Section 
-\ref{ugIntroCalcDerivNumber} on page~\pageref{ugIntroCalcDerivNumber}
+See \sectionref{ugIntroCalcDerivPage}
 for more examples of expressions and derivatives.
 
 \spadcommand{D(e, [x, y], [1, 2]) }
@@ -29551,18 +29511,12 @@ $$
 \returnType{Type: Expression Integer}
 
 See 
-\ref{ugIntroCalcLimitsPage} on page~\pageref{ugIntroCalcLimitsPage} in Section
-\ref{ugIntroCalcLimitsNumber} on page~\pageref{ugIntroCalcLimitsNumber} and 
-\ref{ugIntroSeriesPage} on page~\pageref{ugIntroSeriesPage} in Section
-\ref{ugIntroSeriesNumber} on page~\pageref{ugIntroSeriesNumber} 
-for more examples of expressions and
+\sectionref{ugIntroCalcLimitsPage} and 
+\sectionref{ugIntroSeriesPage} for more examples of expressions and
 calculus.  Differential equations involving expressions are discussed
-in \ref{ugProblemDEQPage} on page~\pageref{ugProblemDEQPage} in Section 
-\ref{ugProblemDEQNumber} on page~\pageref{ugProblemDEQNumber}.
+in \sectionref{ugProblemDEQPage} on page~\pageref{ugProblemDEQPage}.
 Chapter 8 has many advanced examples: see
-\ref{ugProblemIntegrationPage} on page~\pageref{ugProblemIntegrationPage} 
-in Section
-\ref{ugProblemIntegrationNumber} on page~\pageref{ugProblemIntegrationNumber} 
+\sectionref{ugProblemIntegrationPage}
 for a discussion of Axiom's integration facilities.
 
 When an expression involves no ``symbol kernels'' (for example, 
@@ -29654,12 +29608,11 @@ $$
 $$
 \returnType{Type: Expression Integer}
 
-See \ref{ugUserRulesPage} on page~\pageref{ugUserRulesPage} in Section 
-\ref{ugUserRulesNumber} on page~\pageref{ugUserRulesNumber} for
+See \sectionref{ugUserRulesPage} for
 examples of how to write your own rewrite rules for expressions.
 
-\section{Factored}
-\label{FactoredXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Factored}
 
 {\tt Factored} creates a domain whose objects are kept in factored
 form as long as possible.  Thus certain operations like
@@ -29906,9 +29859,7 @@ $$
 \returnType{Type: Boolean}
 
 Another way to get the zero and one factored objects is to use
-package calling (see 
-\ref{ugTypesPkgCallPage} on page~\pageref{ugTypesPkgCallPage} in Section 
-\ref{ugTypesPkgCallNumber} on page~\pageref{ugTypesPkgCallNumber}).
+package calling (see \sectionref{ugTypesPkgCallPage}).
 
 \spadcommand{0\$Factored(Integer)}
 $$
@@ -29925,10 +29876,8 @@ $$
 \subsection{Creating New Factored Objects}
 
 The \spadfunFrom{map}{Factored} operation is used to iterate across
-the unit and bases of a factored object.  See
-\ref{FactoredFunctionsTwoXmpPage} on 
-page~\pageref{FactoredFunctionsTwoXmpPage} for a discussion of
-\spadfunFrom{map}{Factored}.
+the unit and bases of a factored object.  See \domainref{FactoredFunctions2}
+for a discussion of \spadfunFrom{map}{Factored}.
 
 The following four operations take a base and an exponent and create a
 factored object.  They differ in handling the flag component.
@@ -30040,8 +29989,8 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{FactoredFunctions2}
-\label{FactoredFunctions2XmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{FactoredFunctions2}
 
 The {\tt FactoredFunctions2} package implements one operation,
 \spadfunFrom{map}{FactoredFunctions2}, for applying an operation to every
@@ -30100,12 +30049,10 @@ $$
 \returnType{Type: Union("nil",...)}
 
 For more information about factored objects and their use, see
-\ref{FactoredXmpPage} on page~\pageref{FactoredXmpPage} and 
-\ref{ugProblemGaloisPage} on page~\pageref{ugProblemGaloisPage} in Section 
-\ref{ugProblemGaloisNumber} on page~\pageref{ugProblemGaloisNumber}.
+\domainref{Factored} and \sectionref{ugProblemGaloisPage}.
 
-\section{File}
-\label{FileXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{File}
 
 The {\tt File(S)} domain provides a basic interface to read and
 write values of type {\tt S} in files.
@@ -30225,13 +30172,11 @@ be represented in a file.  In particular, delayed 
values containing
 compiled functions cannot be saved.
 
 For more information on related topics, see 
-\ref{TextFileXmpPage} on page~\pageref{TextFileXmpPage},
-\ref{KeyedAccessFileXmpPage} on page~\pageref{KeyedAccessFileXmpPage}, 
-\ref{LibraryXmpPage} on page~\pageref{LibraryXmpPage}, and
-\ref{FileNameXmpPage} on page~\pageref{FileNameXmpPage}.
+\domainref{TextFile}, \domainref{KeyedAccessFile}, 
+\domainref{Library}, and \domainref{FileName}.
 
-\section{FileName}
-\label{FileNameXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{FileName}
  
 The {\tt FileName} domain provides an interface to the computer's file
 system.  Functions are provided to manipulate file names and to test
@@ -30390,8 +30335,8 @@ $$
 $$
 \returnType{Type: FileName}
 
-\section{FlexibleArray}
-\label{FlexibleArrayXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{FlexibleArray}
 
 The {\tt FlexibleArray} domain constructor creates one-dimensional
 arrays of elements of the same type.  Flexible arrays are an attempt
@@ -30404,8 +30349,7 @@ the new block.
 
 Flexible arrays have available most of the operations provided by 
 {\tt OneDimensionalArray} (see 
-\ref{OneDimensionalArrayXmpPage} on page~\pageref{OneDimensionalArrayXmpPage} 
-and \ref{VectorXmpPage} on page~\pageref{VectorXmpPage}).  
+\domainref{OneDimensionalArray} and \domainref{Vector}.
 Since flexible arrays are also of category 
 {\tt ExtensibleLinearAggregate}, they have operations {\tt concat!}, 
 {\tt delete!}, {\tt insert!}, {\tt merge!}, {\tt remove!}, 
@@ -30575,8 +30519,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{Float}
-\label{FloatXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Float}
 
 Axiom provides two kinds of floating point numbers.  The domain 
 {\tt Float} (abbreviation {\tt FLOAT}) implements a model of arbitrary
@@ -30593,10 +30537,8 @@ Arbitrary-precision floating-point arithmetic 
typically takes twenty
 to two hundred times more time than hardware floating point.
 
 For more information about Axiom's numeric and graphic facilities, see
-\ref{ugGraphPage} on page~\pageref{ugGraphPage} in Section 
-\ref{ugGraphNumber} on page~\pageref{ugGraphNumber},
-\ref{ugProblemNumeric} on page~\pageref{ugProblemNumeric}, and 
-\ref{DoubleFloatXmpPage} on page~\pageref{DoubleFloatXmpPage}.
+\sectionref{ugGraphPage}, \sectionref{ugProblemNumeric}, and
+\domainref{DoubleFloat}.
 
 \subsection{Introduction to Float}
 
@@ -30633,9 +30575,7 @@ $$
 
 \subsection{Conversion Functions}
 
-You can use conversion (\ref{ugTypesConvertPage} on
-page~\pageref{ugTypesConvertPage} in Section
-\ref{ugTypesConvertNumber} on page~\pageref{ugTypesConvertNumber}) to
+You can use conversion (\sectionref{ugTypesConvertPage} to
 go back and forth between {\tt Integer}, {\tt Fraction Integer} and
 {\tt Float}, as appropriate.
 
@@ -30975,8 +30915,8 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{Fraction}
-\label{FractionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Fraction}
 
 The {\tt Fraction} domain implements quotients.  The elements must
 belong to a domain of category {\tt IntegralDomain}: multiplication
@@ -31028,7 +30968,7 @@ Operations like \spadfunFrom{max}{Fraction},
 \spadfunFrom{positive?}{Fraction} and \spadfunFrom{zero?}{Fraction}
 are all available if they are provided for the numerators and
 denominators.  
-See \ref{IntegerXmpPage} on page~\pageref{IntegerXmpPage} for examples.
+See \domainref{Integer} for examples.
 
 Don't expect a useful answer from \spadfunFrom{factor}{Fraction},
 \spadfunFrom{gcd}{Fraction} or \spadfunFrom{lcm}{Fraction} if you apply
@@ -31068,10 +31008,8 @@ $$
 \returnType{Type: ContinuedFraction Integer}
 
 Use {\tt partialFraction} to create a partial fraction.
-See 
-\ref{ContinuedFractionXmpPage} on page~\pageref{ContinuedFractionXmpPage} 
-and \ref{PartialFractionXmpPage} on page~\pageref{PartialFractionXmpPage} for
-additional information and examples.
+See \domainref{ContinuedFraction} and and \domainref{PartialFraction}
+for additional information and examples.
 
 \spadcommand{partialFraction(7,12)}
 $$
@@ -31088,9 +31026,7 @@ $$
 $$
 \returnType{Type: Complex Fraction Integer}
 
-Conversion is discussed in detail in 
-Section~\ref{ugTypesConvertPage} 
-on page~\pageref{ugTypesConvertPage}.
+Conversion is discussed in detail in \sectionref{ugTypesConvertPage}.
 
 \spadcommand{g :: FRAC COMPLEX INT }
 $$
@@ -31098,8 +31034,8 @@ $$
 $$
 \returnType{Type: Fraction Complex Integer}
 
-\section{FullPartialFractionExpansion}
-\label{FullPartialFractionExpansionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{FullPartialFractionExpansion}
 
 The domain {\tt FullPartialFractionExpansion} implements
 factor-free conversion of quotients to full partial fractions.
@@ -31414,17 +31350,15 @@ $$
 For more information, see the paper: Bronstein, M and Salvy, B.
 ``Full Partial Fraction Decomposition of Rational Functions,'' 
 {\it Proceedings of ISSAC'93, Kiev}, ACM Press.  Also see
-\ref{PartialFractionXmpPage} on page~\pageref{PartialFractionXmpPage} 
-for standard partial fraction decompositions.
+\domainref{PartialFraction} for standard partial fraction decompositions.
 
-\section{GeneralSparseTable}
-\label{GeneralSparseTableXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{GeneralSparseTable}
 
 Sometimes when working with tables there is a natural value to use as
 the entry in all but a few cases.  The {\tt GeneralSparseTable}
 constructor can be used to provide any table type with a default value
-for entries.  See \ref{TableXmpPage} on page~\pageref{TableXmpPage} 
-for general information about tables.  
+for entries.  See \domainref{Table} for general information about tables.  
 
 Suppose we launched a fund-raising campaign to raise fifty thousand dollars.
 To record the contributions, we want a table with strings as keys
@@ -31480,8 +31414,8 @@ So the project is cancelled and we can delete the data 
base:
 
 \spadcommand{)system rm -r kaf*.sdata }
 
-\section{GroebnerFactorizationPackage}
-\label{GroebnerFactorizationPackageXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{GroebnerFactorizationPackage}
 
 Solving systems of polynomial equations with the Gr\"{o}bner basis
 algorithm can often be very time consuming because, in general, the
@@ -31678,14 +31612,13 @@ calculation does not terminate in a reasonable time.  
See the source
 code for {\tt GroebnerFactorizationPackage} in {\bf groebf.input} 
 for more details about the algorithms used.
 
-\section{Heap}
-\label{HeapXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Heap}
 
 The domain {\tt Heap(S)} implements a priority queue of objects of
 type {\tt S} such that the operation {\tt extract!} removes and
 returns the maximum element.  The implementation represents heaps as
-flexible arrays (see 
-\ref{FlexibleArrayXmpPage} on page~\pageref{FlexibleArrayXmpPage}).  
+flexible arrays (see \domainref{FlexibleArray}.)
 The representation and algorithms give complexity of $O(\log(n))$ 
 for insertion and extractions, and $O(n)$ for construction.
 
@@ -31764,8 +31697,8 @@ $$
 $$
 \returnType{Type: List Integer}
 
-\section{HexadecimalExpansion}
-\label{HexadecimalExpansionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{HexadecimalExpansion}
 
 All rationals have repeating hexadecimal expansions.  The operation
 \spadfunFrom{hex}{HexadecimalExpansion} returns these expansions of
@@ -31773,9 +31706,8 @@ type {\tt HexadecimalExpansion}.  Operations to access 
the individual
 numerals of a hexadecimal expansion can be obtained by converting the
 value to {\tt RadixExpansion(16)}.  More examples of expansions are
 available in the 
-\ref{DecimalExpansionXmpPage} on page~\pageref{DecimalExpansionXmpPage},
-\ref{BinaryExpansionXmpPage} on page~\pageref{BinaryExpansionXmpPage}, and 
-\ref{RadixExpansionXmpPage} on page~\pageref{RadixExpansionXmpPage}.
+\domainref{DecimalExpansion}, \domainref{BinaryExpansion}, and
+\domainref{RadixExpansion}.
 
 This is a hexadecimal expansion of a rational number.
 
@@ -31853,22 +31785,17 @@ x+{1.{\overline 5}}
 $$
 \returnType{Type: Polynomial HexadecimalExpansion}
 
-\section{Integer}
-\label{IntegerXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Integer}
 
 Axiom provides many operations for manipulating arbitrary precision
 integers.  In this section we will show some of those that come from
 {\tt Integer} itself plus some that are implemented in other packages.
 More examples of using integers are in the following sections:
-\ref{ugIntroNumbersPage} on page~\pageref{ugIntroNumbersPage} in section 
-\ref{ugIntroNumbersNumber} on page~\pageref{ugIntroNumbersNumber}
-\ref{IntegerNumberTheoryFunctionsXmpPage} on 
-page~\pageref{IntegerNumberTheoryFunctionsXmpPage},
-\ref{DecimalExpansionXmpPage} on page~\pageref{DecimalExpansionXmpPage}, 
-\ref{BinaryExpansionXmpPage} on page~\pageref{BinaryExpansionXmpPage},
-\ref{HexadecimalExpansionXmpPage} on 
-page~\pageref{HexadecimalExpansionXmpPage}, and 
-\ref{RadixExpansionXmpPage} on page~\pageref{RadixExpansionXmpPage}.
+\sectionref{ugIntroNumbersPage},
+\domainref{IntegerNumberTheoryFunctions},
+\domainref{DecimalExpansion}, \domainref{BinaryExpansion}, 
+\domainref{HexadecimalExpansion}, and \domainref{RadixExpansion}.
 
 \subsection{Basic Functions}
 
@@ -32077,7 +32004,7 @@ $$
 
 The infix operator ``/'' is {\it not} used to compute the quotient of
 integers.  Rather, it is used to create rational numbers as described
-in \ref{FractionXmpPage} on page~\pageref{FractionXmpPage}.
+in \domainref{Fraction}.
 
 \spadcommand{13 / 4}
 $$
@@ -32105,9 +32032,7 @@ $$
 
 One integer is evenly divisible by another if the remainder is zero.
 The operation \spadfunFrom{exquo}{Integer} can also be used.  See
-\ref{ugTypesUnionsPage} on page~\pageref{ugTypesUnionsPage} in Section 
-\ref{ugTypesUnionsNumber} on page~\pageref{ugTypesUnionsNumber} for an
-example.
+\sectionref{ugTypesUnionsPage} for an example.
 
 \spadcommand{zero?(167604736446952 rem 2003644)}
 $$
@@ -32132,8 +32057,7 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-Records are discussed in detail in Section 
-\ref{ugTypesRecords} on page~\pageref{ugTypesRecords}.
+Records are discussed in detail in \sectionref{ugTypesRecords}.
 
 \spadcommand{d.remainder }
 $$
@@ -32145,7 +32069,7 @@ $$
 
 Use the operation \spadfunFrom{factor}{Integer} to factor integers.
 It returns an object of type {\tt Factored Integer}.
-See \ref{FactoredXmpPage} on page~\pageref{FactoredXmpPage} 
+See \domainref{Factored} 
 for a discussion of the manipulation of factored objects.
 
 \spadcommand{factor 102400}
@@ -32201,7 +32125,7 @@ $$
 
 You might sometimes want to see the factorization of an integer
 when it is considered a {\it Gaussian integer}.
-See \ref{ComplexXmpPage} on page~\pageref{ComplexXmpPage} for more details.
+See \domainref{Complex} for more details.
 
 \spadcommand{factor(2 :: Complex Integer)}
 $$
@@ -32214,8 +32138,8 @@ $$
 \subsection{Some Number Theoretic Functions}
 
 Axiom provides several number theoretic operations for integers.
-More examples are in \ref{IntegerNumberTheoryFunctionsXmpPage} on 
-page~\pageref{IntegerNumberTheoryFunctionsXmpPage}.
+More examples are in \domainref{IntegerNumberTheoryFunctions}.
+
 
 The operation \spadfunFrom{fibonacci}{IntegerNumberTheoryFunctions}
 computes the Fibonacci numbers.  The algorithm has running time
@@ -32312,8 +32236,8 @@ $$
 $$
 \returnType{Type: RomanNumeral}
 
-\section{IntegerLinearDependence}
-\label{IntegerLinearDependenceXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{IntegerLinearDependence}
 
 The elements $v_1, \dots,v_n$ of a module {\tt M} over a ring {\tt R}
 are said to be {\it linearly dependent over {\tt R}} if there exist
@@ -32417,8 +32341,8 @@ $$
 $$
 \returnType{Type: Union(Vector Fraction Integer,...)}
 
-\section{IntegerNumberTheoryFunctions}
-\label{IntegerNumberTheoryFunctionsXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{IntegerNumberTheoryFunctions}
 
 The {\tt IntegerNumberTheoryFunctions} package contains a variety of
 operations of interest to number theorists.  Many of these operations
@@ -32641,16 +32565,16 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{Kernel}
-\label{KernelXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Kernel}
 
 A {\it kernel} is a symbolic function application (such as {\tt sin(x+ y)}) 
 or a symbol (such as {\tt x}).  More precisely, a non-symbol
 kernel over a set {\it S} is an operator applied to a given list of
 arguments from {\it S}.  The operator has type {\tt BasicOperator}
-(see \ref{BasicOperatorXmpPage} on page~\pageref{BasicOperatorXmpPage}) 
+(see \domainref{BasicOperator}
 and the kernel object is usually part of an expression object (see 
-\ref{ExpressionXmpPage} on page~\pageref{ExpressionXmpPage}).
+\domainref{Expression}.
 
 Kernels are created implicitly for you when you create expressions.
 
@@ -32862,12 +32786,11 @@ $$
 Conceptually, an object of type {\tt Expression} can be thought of a
 quotient of multivariate polynomials, where the ``variables'' are
 kernels.  The arguments of the kernels are again expressions and so
-the structure recurses.  See \ref{ExpressionXmpPage} on 
-page~\pageref{ExpressionXmpPage} for examples of
+the structure recurses.  See \domainref{Expression} for examples of
 using kernels to take apart expression objects.
 
-\section{KeyedAccessFile}
-\label{KeyedAccessFileXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{KeyedAccessFile}
 
 The domain {\tt KeyedAccessFile(S)} provides files which can be used
 as associative tables.  Data values are stored in these files and can
@@ -33050,12 +32973,10 @@ $$
 \spadcommand{)system rm -r /tmp/editor.year}
 
 For more information on related topics, see 
-\ref{FileXmpPage} on page~\pageref{FileXmpPage},
-\ref{TextFileXmpPage} on page~\pageref{TextFileXmpPage}, and 
-\ref{LibraryXmpPage} on page~\pageref{LibraryXmpPage}.
+\domainref{File}, \domainref{TextFile}, and \domainref{Library}.
 
-\section{LexTriangularPackage}
-\label{LexTriangularPackageXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LexTriangularPackage}
 
 The {\tt LexTriangularPackage} package constructor provides an
 implementation of the {\em lexTriangular} algorithm (D. Lazard
@@ -36874,8 +36795,8 @@ to the indeterminate {\bf f}, the second to {\bf e} and 
so on.  See
 {\tt ZeroDimensionalSolvePackage} to learn more about the 
 \spadfunFrom{realSolve}{ZeroDimensionalSolvePackage} operation.
 
-\section{LazardSetSolvingPackage}
-\label{LazardSetSolvingPackageXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LazardSetSolvingPackage}
 
 The {\tt LazardSetSolvingPackage} package constructor solves
 polynomial systems by means of Lazard triangular sets.  However one
@@ -38156,8 +38077,8 @@ zero-dimensional regular chains.  Moreover, each of 
them is normalized
 components may be investigated further with the 
 {\tt ZeroDimensionalSolvePackage} package constructor.
 
-\section{Library}
-\label{LibraryXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Library}
  
 The {\tt Library} domain provides a simple way to store Axiom values
 in a file.  This domain is similar to {\tt KeyedAccessFile} but fewer
@@ -38225,12 +38146,10 @@ file system.
 \spadcommand{)system rm -rf /tmp/Neat.stuff  }
  
 For more information on related topics, see 
-\ref{FileXmpPage} on page~\pageref{FileXmpPage},
-\ref{TextFileXmpPage} on page~\pageref{TextFileXmpPage}, and 
-\ref{KeyedAccessFileXmpPage} on page~\pageref{KeyedAccessFileXmpPage}.
+\domainref{File}, \domainref{TextFile}, and \domainref{KeyedAccessFile}.
 
-\section{LieExponentials}
-\label{LieExponentialsXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LieExponentials}
 
 \spadcommand{ a: Symbol := 'a }
 $$
@@ -38360,8 +38279,9 @@ $$
 $$
 \returnType{Type: LieExponentials(Symbol,Fraction Integer,3)}
 
-\section{LiePolynomial}
-\label{LiePolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LiePolynomial}
+
 Declaration of domains
 
 \spadcommand{RN    := Fraction Integer }
@@ -38604,8 +38524,8 @@ $$
 $$
 \returnType{Type: LiePolynomial(Symbol,Fraction Integer)}
 
-\section{LinearOrdinaryDifferentialOperator}
-\label{LinearOrdinaryDifferentialOperatorXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LinearOrdinaryDifferentialOperator}
 
 {\tt LinearOrdinaryDifferentialOperator(A, diff)} is the domain of
 linear ordinary differential operators with coefficients in a ring
@@ -38959,8 +38879,8 @@ $$
 $$
 \returnType{Type: List List Equation Fraction Polynomial Integer}
 
-\section{LinearOrdinaryDifferentialOperator1}
-\label{LinearOrdinaryDifferentialOperator1XmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LinearOrdinaryDifferentialOperator1}
 
 {\tt LinearOrdinaryDifferentialOperator1(A)} is the domain of linear
 ordinary differential operators with coefficients in the differential ring
@@ -39232,8 +39152,8 @@ $$
 \returnType{Type: 
 LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer)}
 
-\section{LinearOrdinaryDifferentialOperator2}
-\label{LinearOrdinaryDifferentialOperator2XmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LinearOrdinaryDifferentialOperator2}
 
 {\tt LinearOrdinaryDifferentialOperator2(A, M)} is the domain of
 linear ordinary differential operators with coefficients in the
@@ -39650,8 +39570,8 @@ SquareMatrix(3,
 UnivariatePolynomial(x,Integer)),
 UnivariatePolynomial(x,Integer))}
 
-\section{List}
-\label{ListXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{List}
 
 A \index{list} is a finite collection of elements in a specified
 order that can contain duplicates.  A list is a convenient structure
@@ -40023,12 +39943,10 @@ $$
 \returnType{Type: Stream Integer}
 
 What is created in this case is a {\tt Stream} which is a
-generalization of a list.  See 
-\ref{StreamXmpPage} on page~\pageref{StreamXmpPage} for more
-information.
+generalization of a list.  See \domainref{Stream} for more information.
 
-\section{LyndonWord}
-\label{LyndonWordXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{LyndonWord}
 
 Initialisations
 
@@ -40273,8 +40191,8 @@ $$
 $$
 \returnType{Type: LyndonWord Symbol}
 
-\section{Magma}
-\label{MagmaXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Magma}
 
 Initialisations
 
@@ -40447,8 +40365,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{MakeFunction}
-\label{MakeFunctionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{MakeFunction}
 
 It is sometimes useful to be able to define a function given by
 the result of a calculation.
@@ -40675,12 +40593,10 @@ $$
 $$
 \returnType{Type: SquareMatrix(2,Integer)}
 
-For more information, see 
-\ref{ugUserMakePage} on page~\pageref{ugUserMakePage} in Section 
-\ref{ugUserMakeNumber} on page~\pageref{ugUserMakeNumber}.
+For more information, see \sectionref{ugUserMakePage}.
 
-\section{MappingPackage1}
-\label{MappingPackage1XmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{MappingPackage1}
 
 Function are objects of type {\tt Mapping}.  In this section we
 demonstrate some library operations from the packages 
@@ -40950,8 +40866,8 @@ $$
 $$
 \returnType{Type: List Integer}
 
-\section{Matrix}
-\label{MatrixXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Matrix}
 
 The {\tt Matrix} domain provides arithmetic operations on matrices
 and standard functions from linear algebra.
@@ -41482,20 +41398,14 @@ $$
 \returnType{Type: Matrix Integer}
 
 For more information on related topics, see 
-\ref{ugIntroTwoDimPage} on page~\pageref{ugIntroTwoDimPage} in Section 
-\ref{ugIntroTwoDimNumber} on page~\pageref{ugIntroTwoDimNumber}, 
-\ref{ugProblemEigenPage} on page~\pageref{ugProblemEigenPage} in Section
-\ref{ugProblemEigenNumber} on page~\pageref{ugProblemEigenNumber}, 
-\ref{ugxFloatHilbertPage} on page~\pageref{ugxFloatHilbertPage} in Section
-\ref{ugxFloatHilbertNumber} on page~\pageref{ugxFloatHilbertNumber}, 
-\ref{PermanentXmpPage} on page~\pageref{PermanentXmpPage},
-\ref{VectorXmpPage} on page~\pageref{VectorXmpPage}, 
-\ref{OneDimensionalArrayXmpPage} on page~\pageref{OneDimensionalArrayXmpPage},
-and
-\ref{TwoDimensionalArrayXmpPage} on page~\pageref{TwoDimensionalArrayXmpPage}.
+\sectionref{ugIntroTwoDimPage}, 
+\sectionref{ugProblemEigenPage},
+\sectionref{ugxFloatHilbertPage},
+\domainref{Permanent}, \domainref{Vector}, \domainref{OneDimensionalArray},
+and \domainref{TwoDimensionalArray}.
 
-\section{Multiset}
-\label{MultisetXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Multiset}
 
 The domain {\tt Multiset(R)} is similar to {\tt Set(R)} except that
 multiplicities (counts of duplications) are maintained and displayed.
@@ -41631,8 +41541,8 @@ $$
 $$
 \returnType{Type: List Boolean}
 
-\section{MultivariatePolynomial}
-\label{MultivariatePolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{MultivariatePolynomial}
 
 The domain constructor {\tt MultivariatePolynomial} is similar to {\tt
 Polynomial} except that it specifies the variables to be used.  {\tt
@@ -41789,14 +41699,11 @@ in the manipulation and display of expressions via 
its conversion
 facility.
 
 For more information on related topics, see
-\ref{PolynomialXmpPage} on page~\pageref{PolynomialXmpPage},
-\ref{UnivariatePolynomialXmpPage} on 
-page~\pageref{UnivariatePolynomialXmpPage}, and
-\ref{DistributedMultivariatePolynomialXmpPage} on 
-page~\pageref{DistributedMultivariatePolynomialXmpPage}.
+\domainref{Polynomial}, \domainref{UnivariatePolynomial}, and 
+\domainref{DistributedMultivariatePolynomial}.
 
-\section{None}
-\label{NoneXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{None}
 
 The {\tt None} domain is not very useful for interactive work but it
 is provided nevertheless for completeness of the Axiom type system.
@@ -41830,14 +41737,13 @@ $$
 $$
 \returnType{Type: List NonNegativeInteger}
 
-\section{Octonion}
-\label{OctonionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Octonion}
 
 The Octonions, also called the Cayley-Dixon algebra, defined over a
 commutative ring are an eight-dimensional non-associative algebra.
 Their construction from quaternions is similar to the construction
-of quaternions from complex numbers (see 
-\ref{QuaternionXmpPage} on page~\pageref{QuaternionXmpPage}).
+of quaternions from complex numbers (see \domainref{Quaternion}).
 
 As {\tt Octonion} creates an eight-dimensional algebra, you have to
 give eight components to construct an octonion.
@@ -41963,8 +41869,8 @@ $$
 $$
 \returnType{Type: Polynomial Integer}
 
-\section{OneDimensionalArray}
-\label{OneDimensionalArrayXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{OneDimensionalArray}
 
 The {\tt OneDimensionalArray} domain is used for storing data in a
 one-dimensional indexed data structure.  Such an array is a
@@ -41973,8 +41879,7 @@ belong to the same Axiom domain.  Each array has a 
fixed length
 specified by the user and arrays are not extensible.  The indexing of
 one-dimensional arrays is one-based.  This means that the ``first''
 element of an array is given the index {\tt 1}.  See also
-\ref{VectorXmpPage} on page~\pageref{VectorXmpPage} and 
-\ref{FlexibleArrayXmpPage} on page~\pageref{FlexibleArrayXmpPage}.
+\domainref{Vector} and \domainref{FlexibleArray}.
 
 To create a one-dimensional array, apply the operation 
 {\tt oneDimensionalArray} to a list.
@@ -42072,8 +41977,8 @@ $$
 $$
 \returnType{Type: OneDimensionalArray Integer}
 
-\section{Operator}
-\label{OperatorXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Operator}
 
 Given any ring {\tt R}, the ring of the {\tt Integer}-linear operators
 over {\tt R} is called {\tt Operator(R)}.  To create an operator over
@@ -42354,8 +42259,8 @@ $$
 $$
 \returnType{Type: Polynomial Fraction Integer}
 
-\section{OrderedVariableList}
-\label{OrderedVariableListXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{OrderedVariableList}
 
 The domain {\tt OrderedVariableList} provides symbols which are
 restricted to a particular list and have a definite ordering. Those
@@ -42406,8 +42311,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{OrderlyDifferentialPolynomial}
-\label{OrderlyDifferentialPolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{OrderlyDifferentialPolynomial}
 
 Many systems of differential equations may be transformed to
 equivalent systems of ordinary differential equations where the
@@ -42820,8 +42725,8 @@ $$
 $$
 \returnType{Type: OrderlyDifferentialPolynomial Fraction Integer}
 
-\section{PartialFraction}
-\label{PartialFractionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{PartialFraction}
 
 A {\it partial fraction} is a decomposition of a quotient into a sum
 of quotients where the denominators of the summands are powers of
@@ -42909,8 +42814,7 @@ $$
 $$
 \returnType{Type: PartialFraction Integer}
 
-Given two gaussian integers (see 
-\ref{ComplexXmpPage} on page~\pageref{ComplexXmpPage}), you can
+Given two gaussian integers (see \domainref{Complex}), you can
 decompose their quotient into a partial fraction.
 
 \spadcommand{partialFraction(1,- 13 + 14 * \%i) }
@@ -42939,8 +42843,7 @@ The polynomials in this object have type
 {\tt UnivariatePolynomial(x, Fraction Integer)}.
 
 We use the \spadfunFrom{primeFactor}{Factored} operation (see
-\ref{FactoredXmpPage} on page~\pageref{FactoredXmpPage}) 
-to create the denominator in factored form directly.
+\domainref{Factored}) to create the denominator in factored form directly.
 
 \spadcommand{u : FR UP(x, FRAC INT) := reduce(*,[primeFactor(x+i,i) for i in 
1..4]) }
 $$
@@ -42995,12 +42898,11 @@ $$
 $$
 \returnType{Type: PartialFraction UnivariatePolynomial(x,Fraction Integer)}
 
-All see \ref{FullPartialFractionExpansionXmpPage} on 
-page~\pageref{FullPartialFractionExpansionXmpPage} for examples of
+All see \domainref{FullPartialFractionExpansion} for examples of
 factor-free conversion of quotients to full partial fractions.
 
-\section{Permanent}
-\label{PermanentXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Permanent}
 
 The package {\tt Permanent} provides the function
 \spadfunFrom{permanent}{Permanent} for square matrices.  The
@@ -43061,8 +42963,8 @@ $$
 $$
 \returnType{Type: List NonNegativeInteger}
 
-\section{Polynomial}
-\label{PolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Polynomial}
 
 The domain constructor {\tt Polynomial} (abbreviation: {\tt POLY})
 provides polynomials with an arbitrary number of unspecified
@@ -43117,8 +43019,7 @@ the representation unless you are working on an 
advanced application
 where it is critical.  The polynomial types created from {\tt
 DistributedMultivariatePolynomial} and 
 {\tt NewDistributedMultivariatePolynomial} (discussed in
-\ref{DistributedMultivariatePolynomialXmpPage} on 
-page~\pageref{DistributedMultivariatePolynomialXmpPage}) are stored and
+\domainref{DistributedMultivariatePolynomial}) are stored and
 displayed in a non-recursive manner.
 
 You see a ``flat'' display of the above polynomial by converting to
@@ -43144,8 +43045,8 @@ $$
 $$
 \returnType{Type: Polynomial Integer}
 
-See \ref{FactoredXmpPage} on page~\pageref{FactoredXmpPage} 
-to see how to create objects in factored form directly.
+See \domainref{Factored} to see how to create objects in 
+factored form directly.
 
 \spadcommand{q := (y-1) * x * (z+5) }
 $$
@@ -43173,9 +43074,7 @@ to think of solving problems in general ways.  Axiom 
facilities for
 factoring polynomials created with {\tt Polynomial} are currently
 restricted to the integer and rational number coefficient cases.
 There are more complete facilities for factoring univariate
-polynomials: see \ref{ugProblemFactorPage} on 
-page~\pageref{ugProblemFactorPage} in Section \ref{ugProblemFactorNumber} 
-on page~\pageref{ugProblemFactorNumber}.
+polynomials: see \sectionref{ugProblemFactorPage}.
 
 The standard arithmetic operations are available for polynomials.
 
@@ -43585,23 +43484,17 @@ $$
 \returnType{Type: Polynomial Float}
 
 For more information on related topics, see
-\ref{UnivariatePolynomialXmpPage} on 
-page~\pageref{UnivariatePolynomialXmpPage}, 
-\ref{MultivariatePolynomialXmpPage} on 
-page~\pageref{MultivariatePolynomialXmpPage}, and
-\ref{DistributedMultivariatePolynomialXmpPage} on 
-page~\pageref{DistributedMultivariatePolynomialXmpPage}.  You can also issue
+\domainref{UnivariatePolynomial}, \domainref{MultivariatePolynomial}, and
+\domainref{DistributedMultivariatePolynomial}.  You can also issue
 the system command {\tt )show Polynomial} to display the full list
 of operations defined by {\tt Polynomial}.
 
-\section{Quaternion}
-\label{QuaternionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Quaternion}
 
 The domain constructor {\tt Quaternion} implements quaternions over
 commutative rings.  For information on related topics, see
-%\menuxmpref{CliffordAlgebra} 
-\ref{ComplexXmpPage} on page~\pageref{ComplexXmpPage} and
-\ref{OctonionXmpPage} on page~\pageref{OctonionXmpPage}.  
+\domainref{Complex} and \domainref{Octonion}.
 You can also issue the system command
 {\tt )show Quaternion} to display the full list of operations
 defined by {\tt Quaternion}.
@@ -43701,8 +43594,8 @@ $$
 $$
 \returnType{Type: Quaternion Fraction Integer}
 
-\section{RadixExpansion}
-\label{RadixExpansionXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{RadixExpansion}
 
 It possible to expand numbers in general bases.
 
@@ -43849,13 +43742,11 @@ $$
 \returnType{Type: Fraction Integer}
 
 More examples of expansions are available in
-\ref{DecimalExpansionXmpPage} on page~\pageref{DecimalExpansionXmpPage}, 
-\ref{BinaryExpansionXmpPage} on page~\pageref{BinaryExpansionXmpPage}, and
-\ref{HexadecimalExpansionXmpPage} on 
-page~\pageref{HexadecimalExpansionXmpPage}.
+\domainref{DecimalExpansion}, \domainref{BinaryExpansion}, and
+\domainref{HexadecimalExpansion}.
 
-\section{RealClosure}
-\label{RealClosureXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{RealClosure}
 
 The Real Closure 1.0 package provided by Renaud Rioboo
 (address@hidden) consists of different packages, categories and
@@ -44627,8 +44518,8 @@ $$
 $$
 \returnType{Type: Boolean}
 
-\section{RegularTriangularSet}
-\label{RegularTriangularSetXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{RegularTriangularSet}
 
 The {\tt RegularTriangularSet} domain constructor implements regular
 triangular sets.  These particular triangular sets were introduced by
@@ -45928,8 +45819,8 @@ solve your favorite system with {\tt zeroSetSplit}.  
There exist more
 options at the development level that are not currently available in
 this public version.  
 
-\section{RomanNumeral}
-\label{RomanNumeralXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{RomanNumeral}
 
 The Roman numeral package was added to Axiom in MCMLXXXVI for use in
 denoting higher order derivatives.
@@ -46058,8 +45949,8 @@ $$
 Issue the system command {\tt )show RomanNumeral} to display the full
 list of operations defined by {\tt RomanNumeral}.
 
-\section{Segment}
-\label{SegmentXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Segment}
 
 The {\tt Segment} domain provides a generalized interval type.
 
@@ -46095,7 +45986,7 @@ An increment can be specified using the ``{\tt by}'' 
construct.
 
 \spadcommand{t := 10..3 by -2 }
 $$
-{{10}..3} \mbox{\rm by\ } -2 
+{{10}..3} \mbox{\rm\ by\ } -2 
 $$
 \returnType{Type: Segment PositiveInteger}
 
@@ -46162,11 +46053,10 @@ $$
 \returnType{Type: List Integer}
 
 For more information on related topics, see
-\ref{SegmentBindingXmpPage} on page~\pageref{SegmentBindingXmpPage} and 
-\ref{UniversalSegmentXmpPage} on page~\pageref{UniversalSegmentXmpPage}.
+\domainref{SegmentBinding} and \domainref{UniversalSegment}.
 
-\section{SegmentBinding}
-\label{SegmentBindingXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{SegmentBinding}
 
 The {\tt SegmentBinding} type is used to indicate a range for a named
 symbol.
@@ -46216,11 +46106,10 @@ $$
 \returnType{Type: Segment Fraction Integer}
 
 For more information on related topics, see
-\ref{SegmentXmpPage} on page~\pageref{SegmentXmpPage} and 
-\ref{UniversalSegmentXmpPage} on page~\pageref{UniversalSegmentXmpPage}.
+\domainref{Segment} and \domainref{UniversalSegment}.
 
-\section{Set}
-\label{SetXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Set}
 
 The {\tt Set} domain allows one to represent explicit finite sets of values.
 These are similar to lists, but duplicate elements are not allowed.
@@ -46416,11 +46305,10 @@ $$
 $$
 \returnType{Type: Set PositiveInteger}
 
-For more information about lists, see \ref{ListXmpPage} on 
-page~\pageref{ListXmpPage}.
+For more information about lists, see \domainref{List}.
 
-\section{SingleInteger}
-\label{SingleIntegerXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{SingleInteger}
 
 The {\tt SingleInteger} domain is intended to provide support in Axiom
 for machine integer arithmetic.  It is generally much faster than
@@ -46451,8 +46339,7 @@ $$
 
 To avoid confusion with {\tt Integer}, which is the default type for
 integers, you usually need to work with declared variables
-(\ref{ugTypesDeclarePage} on page~\pageref{ugTypesDeclarePage} in Section 
-\ref{ugTypesDeclareNumber} on page~\pageref{ugTypesDeclareNumber})
+(\sectionref{ugTypesDeclarePage}).
 \ldots
 
 \spadcommand{a := 1234 :: SingleInteger }
@@ -46461,9 +46348,7 @@ $$
 $$
 \returnType{Type: SingleInteger}
 
-or use package calling
-(\ref{ugTypesPkgCallPage} on page~\pageref{ugTypesPkgCallPage} in Section 
-\ref{ugTypesPkgCallNumber} on page~\pageref{ugTypesPkgCallNumber}).
+or use package calling (\sectionref{ugTypesPkgCallPage}).
 
 \spadcommand{b := 124\$SingleInteger }
 $$
@@ -46540,12 +46425,10 @@ $$
 
 Many other operations are available for small integers, including many
 of those provided for {\tt Integer}.  To see the other operations, use
-the Browse HyperDoc facility (\ref{ugBrowsePage} on 
-page~\pageref{ugBrowsePage} in Section
-\ref{ugBrowseNumber} on page~\pageref{ugBrowseNumber}).
+the Browse HyperDoc facility (\sectionref{ugBrowsePage})
 
-\section{SparseTable}
-\label{SparseTableXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{SparseTable}
 
 The {\tt SparseTable} domain provides a general purpose table type
 with default entries.
@@ -46613,15 +46496,13 @@ If a specific table representation is required, the
 {\tt GeneralSparseTable} constructor should be used.  The domain 
 {\tt SparseTable(K, E, dflt)} is equivalent to 
 {\tt GeneralSparseTable(K,E,Table(K,E), dflt)}.  
-For more information, see 
-\ref{TableXmpPage} on page~\pageref{TableXmpPage} and 
-\ref{GeneralSparseTableXmpPage} on page~\pageref{GeneralSparseTableXmpPage}.
+For more information, see \domainref{Table} and \domainref{GeneralSparseTable}.
 
-\section{SquareMatrix}
-\label{SquareMatrixXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{SquareMatrix}
  
 The top level matrix type in Axiom is {\tt Matrix} (see
-\ref{MatrixXmpPage} on page~\pageref{MatrixXmpPage}), which provides
+\domainref{Matrix}, which provides
 basic arithmetic and linear algebra functions.  However, since the
 matrices can be of any size it is not true that any pair can be added
 or multiplied.  Thus {\tt Matrix} has little algebraic structure.
@@ -46736,16 +46617,11 @@ $$
 \returnType{Type: SquareMatrix(2,Polynomial Complex Integer)}
  
 For more information on related topics, see
-\ref{ugTypesWritingModesPage} on
-page~\pageref{ugTypesWritingModesPage} in Section
-\ref{ugTypesWritingModesNumber} on
-page~\pageref{ugTypesWritingModesNumber}, \ref{ugTypesExposePage} on
-page~\pageref{ugTypesExposePage} in Section \ref{ugTypesExposeNumber}
-on page~\pageref{ugTypesExposeNumber}, and \ref{MatrixXmpPage} on
-page~\pageref{MatrixXmpPage}.
+\sectionref{ugTypesWritingModesPage}, \sectionref{ugTypesExposePage},
+and \domainref{Matrix}.
 
-\section{SquareFreeRegularTriangularSet}
-\label{SquareFreeRegularTriangularSetXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{SquareFreeRegularTriangularSet}
 
 The {\tt SquareFreeRegularTriangularSet} domain constructor implements
 square-free regular triangular sets.  See the 
@@ -47137,8 +47013,8 @@ OrderedVariableList [x,y,z,t],
 NewSparseMultivariatePolynomial(Integer,
 OrderedVariableList [x,y,z,t])))}
 
-\section{Stream}
-\label{StreamXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Stream}
 
 A {\tt Stream} object is represented as a list whose last element
 contains the wherewithal to create the next element, should it ever be
@@ -47259,24 +47135,18 @@ $$
 
 The packages {\tt StreamFunctions1}, {\tt StreamFunctions2} and 
 {\tt StreamFunctions3} export some useful stream manipulation operations.
-For more information, see \ref{ugLangItsPage} on
-page~\pageref{ugLangItsPage} in Section \ref{ugLangItsNumber} on
-page~\pageref{ugLangItsNumber}, \ref{ugProblemSeriesPage} on
-page~\pageref{ugProblemSeriesPage} in Section
-\ref{ugProblemSeriesNumber} on page~\pageref{ugProblemSeriesNumber},
-\ref{ContinuedFractionXmpPage} on
-page~\pageref{ContinuedFractionXmpPage}, and \ref{ListXmpPage} on
-page~\pageref{ListXmpPage}.
-
-\section{String}
-\label{StringXmpPage}
+For more information, see \sectionref{ugLangItsPage},
+\sectionref{ugProblemSeriesPage},
+\domainref{ContinuedFraction}, and \domainref{List}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{String}
 
 The type {\tt String} provides character strings.  Character strings
 provide all the operations for a one-dimensional array of characters,
 plus additional operations for manipulating text.  For more
 information on related topics, see 
-\ref{CharacterXmpPage} on page~\pageref{CharacterXmpPage} and
-\ref{CharacterClassXmpPage} on page~\pageref{CharacterClassXmpPage}.  
+\domainref{Character} and \domainref{CharacterClass}.
 You can also issue the system command
 {\tt )show String} to display the full list of operations defined
 by {\tt String}.
@@ -47565,13 +47435,13 @@ $$
 $$
 \returnType{Type: PositiveInteger}
 
-\section{StringTable}
-\label{StringTableXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{StringTable}
 
 This domain provides a table type in which the keys are known to be
 strings so special techniques can be used.  Other than performance,
 the type {\tt StringTable(S)} should behave exactly the same way as
-{\tt Table(String,S)}.  See \ref{TableXmpPage} on page~\pageref{TableXmpPage}
+{\tt Table(String,S)}.  See \domainref{Table}
 for general information about tables.
 
 This creates a new table whose keys are strings.
@@ -47602,8 +47472,8 @@ for s in split("My name is Ian Watt.",char " ")
 \end{verbatim}
 \returnType{Void}
 
-\section{Symbol}
-\label{SymbolXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Symbol}
  
 Symbols are one of the basic types manipulated by Axiom.  The 
 {\tt Symbol} domain provides ways to create symbols of many varieties.
@@ -47871,8 +47741,8 @@ presup: List OutputForm,
 presub: List OutputForm,
 args: List OutputForm)}
 
-\section{Table}
-\label{TableXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Table}
 
 The {\tt Table} constructor provides a general structure for
 associative storage.  This type provides hash tables in which data
@@ -48047,30 +47917,26 @@ This allows new entries to be appended onto the front 
of the list
 to cover up old entries.
 This is useful when table entries need to be stacked or when
 frequent list traversals are required.
-See \ref{AssociationListXmpPage} on page~\pageref{AssociationListXmpPage} 
-for more information.
+See \domainref{AssociationList} for more information.
 \item {\tt EqTable} gives tables in which keys are considered
 equal only when they are in fact the same instance of a structure.
-See \ref{EqTableXmpPage} on page~\pageref{EqTableXmpPage} for more information.
+See \domainref{EqTable} for more information.
 \item {\tt StringTable} should be used when the keys are known to
 be strings.
-See \ref{StringTableXmpPage} on page~\pageref{StringTableXmpPage} 
-for more information.
+See \domainref{StringTable} for more information.
 \item {\tt SparseTable} provides tables with default
 entries, so
 lookup never fails.  The {\tt GeneralSparseTable} constructor
 can be used to make any table type behave this way.
-See \ref{SparseTableXmpPage} on page~\pageref{SparseTableXmpPage} 
-for more information.
+See \domainref{SparseTable} for more information.
 \item {\tt KeyedAccessFile} allows values to be saved in a file,
 accessed as a table.
-See \ref{KeyedAccessFileXmpPage} on page~\pageref{KeyedAccessFileXmpPage} 
-for more information.
+See \domainref{KeyedAccessFile} for more information.
 \end{list}
 \noindent
 
-\section{TextFile}
-\label{TextFileXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{TextFile}
 
 The domain {\tt TextFile} allows Axiom to read and write
 character data and exchange text with other programs.
@@ -48161,19 +48027,16 @@ Finally, clean up.
 \spadcommand{)system rm /tmp/MOTD}
 
 For more information on related topics,  see
-\ref{FileXmpPage} on page~\pageref{FileXmpPage},
-\ref{KeyedAccessFileXmpPage} on page~\pageref{KeyedAccessFileXmpPage}, and
-\ref{LibraryXmpPage} on page~\pageref{LibraryXmpPage}.
+\domainref{File}, \domainref{KeyedAccessFile}, and \domainref{Library}.
 
-\section{TwoDimensionalArray}
-\label{TwoDimensionalArrayXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{TwoDimensionalArray}
 
 The {\tt TwoDimensionalArray} domain is used for storing data in a
 two dimensional data structure indexed by row and by column.  Such an array
 is a homogeneous data structure in that all the entries of the array
 must belong to the same Axiom domain (although see
-\ref{ugTypesAnyNonePage} on page~\pageref{ugTypesAnyNonePage} in Section 
-\ref{ugTypesAnyNoneNumber} on page~\pageref{ugTypesAnyNoneNumber}).  Each
+\sectionref{ugTypesAnyNonePage}. Each
 array has a fixed number of rows and columns specified by the user and
 arrays are not extensible.  In Axiom, the indexing of two-dimensional
 arrays is one-based.  This means that both the ``first'' row of an
@@ -48434,11 +48297,10 @@ $$
 For more information about the operations available for {\tt
 TwoDimensionalArray}, issue {\tt )show TwoDimensionalArray}.  For
 information on related topics, see 
-\ref{MatrixXmpPage} on page~\pageref{MatrixXmpPage} and
-\ref{OneDimensionalArrayXmpPage} on page~\pageref{OneDimensionalArrayXmpPage}.
+\domainref{Matrix} and \domainref{OneDimensionalArray}.
 
-\section{UnivariatePolynomial}
-\label{UnivariatePolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{UnivariatePolynomial}
 
 The domain constructor {\tt UnivariatePolynomial} (abbreviated {\tt
 UP}) creates domains of univariate polynomials in a specified
@@ -48824,23 +48686,18 @@ $$
 $$
 \returnType{Type: UnivariatePolynomial(b1,Fraction Polynomial Integer)}
 
-See \ref{ugProblemFactorPage} on page~\pageref{ugProblemFactorPage} in Section
-\ref{ugProblemFactorNumber} on page~\pageref{ugProblemFactorNumber}
+See \sectionref{ugProblemFactorPage} 
 for a discussion of the factorization facilities
 in Axiom for univariate polynomials.
 For more information on related topics, see
-\ref{ugIntroVariablesPage} on page~\pageref{ugIntroVariablesPage} in Section 
-\ref{ugIntroVariablesNumber} on page~\pageref{ugIntroVariablesNumber},
-\ref{ugTypesConvertPage} on page~\pageref{ugTypesConvertPage} in Section 
-\ref{ugTypesConvertNumber} on page~\pageref{ugTypesConvertNumber},
-\ref{PolynomialXmpPage} on page~\pageref{PolynomialXmpPage},
-\ref{MultivariatePolynomialXmpPage} on 
-page~\pageref{MultivariatePolynomialXmpPage}, and
-\ref{DistributedMultivariatePolynomialXmpPage} on 
-page~\pageref{DistributedMultivariatePolynomialXmpPage}.
-
-\section{UnivariateSkewPolynomial}
-\label{UnivariateSkewPolynomial}
+\sectionref{ugIntroVariablesPage},
+\sectionref{ugTypesConvertPage},
+\domainref{Polynomial}, \domainref{MultivariatePolynomial}, and
+\domainref{DistributedMultivariatePolynomial}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{UnivariateSkewPolynomial}
+
 Skew or Ore polynomial rings provide a unified framework to
 compute with differential and difference equations.
 
@@ -49313,9 +49170,8 @@ $$
 \right]}
 $$
 
-
-\section{UniversalSegment}
-\label{UniversalSegmentXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{UniversalSegment}
 
 The {\tt UniversalSegment} domain generalizes {\tt Segment}
 by allowing segments without a ``hi'' end point.
@@ -49328,7 +49184,7 @@ $$
 
 \spadcommand{nevens := (0..) by -2 }
 $$
-{0..} \mbox{\rm by\ } -2 
+{0..} \mbox{\rm\ by\ } -2 
 $$
 \returnType{Type: UniversalSegment NonNegativeInteger}
 
@@ -49393,13 +49249,11 @@ $$
 \returnType{Type: Stream Integer}
 
 For more information on related topics, see 
-\ref{SegmentXmpPage} on page~\pageref{SegmentXmpPage},
-\ref{SegmentBindingXmpPage} on page~\pageref{SegmentBindingXmpPage}, 
-\ref{ListXmpPage} on page~\pageref{ListXmpPage}, and
-\ref{StreamXmpPage} on page~\pageref{StreamXmpPage}.
+\domainref{Segment}, \domainref{SegmentBinding}, \domainref{List}, and
+\domainref{Stream}.
 
-\section{Vector}
-\label{VectorXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Vector}
 
 The {\tt Vector} domain is used for storing data in a one-dimensional
 indexed data structure.  A vector is a homogeneous data structure in
@@ -49409,8 +49263,7 @@ are not extensible.  This domain is similar to the
 {\tt OneDimensionalArray} domain, except that when the components of a 
 {\tt Vector} belong to a {\tt Ring}, arithmetic operations are provided.
 For more examples of operations that are defined for both {\tt Vector}
-and {\tt OneDimensionalArray}, see 
-\ref{OneDimensionalArrayXmpPage} on page~\pageref{OneDimensionalArrayXmpPage}.
+and {\tt OneDimensionalArray}, see \domainref{OneDimensionalArray}.
 
 As with the {\tt OneDimensionalArray} domain, a {\tt Vector} can
 be created by calling the operation \spadfunFrom{new}{Vector}, its components
@@ -49533,17 +49386,13 @@ $$
 \returnType{Type: Vector Integer}
 
 For more information about other aggregate domains, see the following:
-\ref{ListXmpPage} on page~\pageref{ListXmpPage}, 
-\ref{MatrixXmpPage} on page~\pageref{MatrixXmpPage},
-\ref{OneDimensionalArrayXmpPage} on page~\pageref{OneDimensionalArrayXmpPage},
-\ref{SetXmpPage} on page~\pageref{SetXmpPage},
-\ref{TableXmpPage} on page~\pageref{TableXmpPage}, and 
-\ref{TwoDimensionalArrayXmpPage} on page~\pageref{TwoDimensionalArrayXmpPage}.
+\domainref{List}, \domainref{Matrix}, \domainref{OneDimensionalArray},
+\domainref{Set}, \domainref{Table}, and \domainref{TwoDimensionalArray}.
 Issue the system command {\tt )show Vector} to display the full list of
 operations defined by {\tt Vector}.
 
-\section{Void}
-\label{VoidXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{Void}
 
 When an expression is not in a value context, it is given type 
 {\tt Void}.  For example, in the expression 
@@ -49588,8 +49437,8 @@ Once a value has been converted to {\tt Void}, it 
cannot be recovered.
 Cannot convert from type Void to PositiveInteger for value "()"
 \end{verbatim}
 
-\section{WuWenTsunTriangularSet}
-\label{WuWenTsunTriangularSetXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{WuWenTsunTriangularSet}
 
 The {\tt WuWenTsunTriangularSet} domain constructor implements the
 characteristic set method of Wu Wen Tsun.  This algorithm computes a
@@ -49838,8 +49687,8 @@ Note that the way of understanding triangular 
decompositions
 is detailed in the example of the {\tt RegularTriangularSet}
 constructor.
 
-\section{XPBWPolynomial}
-\label{XPBWPolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{XPBWPolynomial}
 
 Initialisations
 
@@ -50698,8 +50547,8 @@ $$
 $$
 \returnType{Type: XRecursivePolynomial(Symbol,Fraction Integer)}
 
-\section{XPolynomial}
-\label{XPolynomialXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{XPolynomial}
 
 The {\tt XPolynomial} domain constructor implements multivariate
 polynomials whose set of variables is {\tt Symbol}.  These variables
@@ -50884,8 +50733,8 @@ $$
 $$
 \returnType{Type: XPolynomial Integer}
 
-\section{XPolynomialRing}
-\label{XPolynomialRingXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{XPolynomialRing}
 
 The {\tt XPolynomialRing} domain constructor implements generalized
 polynomials with coefficients from an arbitrary {\tt Ring} (not
@@ -51199,8 +51048,8 @@ $$
 $$
 \returnType{Type: XPolynomialRing(SquareMatrix(2,Fraction 
Integer),OrderedFreeMonoid Symbol)}
 
-\section{ZeroDimensionalSolvePackage}
-\label{ZeroDimensionalSolvePackageXmpPage}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\domainhead{ZeroDimensionalSolvePackage}
 
 The {\tt ZeroDimensionalSolvePackage} package constructor provides
 operations for computing symbolically the complex or real roots of
@@ -54613,8 +54462,7 @@ There are many other things you can do.
 In fact, most everything you can do interactively using the
 three-di\-men\-sion\-al control panel (such as translating, zooming, resizing,
 coloring, perspective and lighting selections) can also be done
-directly by operations (see Chapter 
-\ref{ugGraph} on page~\pageref{ugGraph} for more details).
+directly by operations (see \sectionref{ugGraph} for more details).
 
 When you are done experimenting, say $reset(vp)$ to restore the
 picture to its original position and settings.
@@ -54720,15 +54568,14 @@ drawRibbons(flist, xrange) ==
 \end{figure}
 
 Here are some remarks on the syntax used in the {\bf drawRibbons} function
-(consult Chapter \ref{ugUser} on page~\pageref{ugUser} for more details).
+(consult \sectionref{ugUser} for more details).
 Unlike most other programming languages which use semicolons,
 parentheses, or {\it begin}--{\it end} brackets to delineate the
 structure of programs, the structure of an Axiom program is
 determined by indentation.
 The first line of the function definition always begins in column 1.
 All other lines of the function are indented with respect to the first
-line and form a {\it pile} (see \ref{ugLangBlocks} on 
-page~\pageref{ugLangBlocks}).
+line and form a {\it pile} (see \sectionref{ugLangBlocks}).
 
 The definition of {\bf drawRibbons}
 consists of a pile of expressions to be executed one after
@@ -55178,7 +55025,7 @@ We draw the complex valued function, again considering 
the
 $(x,y)$-plane as the complex plane, using $r$ as the
 height (or $z$-coordinate) and $\theta$ as the color.
 This is a standard plot---we learned how to do this in
-Chapter \ref{ugGraph} on page~\pageref{ugGraph}---
+\sectionref{ugGraph} ---
 but here we write a new program to illustrate
 the creation of polygon meshes, or grids.
 
@@ -55256,7 +55103,7 @@ Draw it with an odd number of steps to avoid the pole.
 \section{Functions Producing Functions}
 \label{ugIntProgFunctions}
 
-In \ref{ugUserMake} on page~\pageref{ugUserMake}, 
+In \sectionref{ugUserMake},
 you learned how to use the operation
 {\bf function} to create a function from symbolic formulas.
 Here we introduce a similar operation which not only
@@ -55456,11 +55303,10 @@ set-Imag-Steps
 set-Clip-Value
 }
 
-% Here and throughout the book we should use the terminology
-% "type of a function", rather than talking about source and target.
-% This is how the brave new world of SMWATT regards them. A function
-% is just an object that has a mapping type.
-%
+Here and throughout the book we should use the terminology
+"type of a function", rather than talking about source and target.
+A function is just an object that has a mapping type.
+
 \chapter{Packages}
 \label{ugPackages}
 
@@ -55472,14 +55318,14 @@ special functions to symbolic facilities for
 differential equations, symbolic integration, and limits.
 \index{package!constructor}
 
-In Chapter \ref{ugIntProg} on page~\pageref{ugIntProg}, 
+In \sectionref{ugIntProg},
 we developed several useful functions for drawing
 vector fields and complex functions.
 We now show you how you can add these functions to the
 Axiom library to make them available for general use.
 
-The way we created the functions in Chapter \ref{ugIntProg} 
-on page~\pageref{ugIntProg} is typical of how
+The way we created the functions in \sectionref{ugIntProg} 
+is typical of how
 you, as an advanced Axiom user, may interact with Axiom.
 You have an application.
 You go to your editor and create an input file defining some
@@ -55551,17 +55397,15 @@ DrawComplex(): Exports == Implementation where Type 
definition begins here
 \label{ugPackagesNames}
 %
 Each package has a name and an abbreviation.
-For a package of the complex draw functions from Chapter 
-\ref{ugIntProg} on page~\pageref{ugIntProg},
-we choose the name {\tt DrawComplex}
+For a package of the complex draw functions from
+\sectionref{ugIntProg}, we choose the name {\tt DrawComplex}
 and
 \index{abbreviation!constructor}
 abbreviation {\tt DRAWCX}.\footnote{An abbreviation can be any string
 of
 \index{constructor!abbreviation}
 between two and seven capital letters and digits, beginning with a letter.
-See \ref{ugTypesWritingAbbr} on page~\pageref{ugTypesWritingAbbr} 
-for more information.}
+See \sectionref{ugTypesWritingAbbr} for more information.}
 To be sure that you have not chosen a name or abbreviation already used by
 the system, issue the system command {\tt )show} for both the name and
 the abbreviation.
@@ -55585,8 +55429,7 @@ The macros are only usable from their point of 
definition until the
 end of the file.
 
 Consider the definition of
-{\tt DrawComplex} in 
-Figure \ref{fig-pak-cdraw} on page~\pageref{fig-pak-cdraw}.
+{\tt DrawComplex} in \figureref{fig-pak-cdraw}.
 After the macro
 \index{macro}
 definition
@@ -55661,8 +55504,7 @@ As an author of a package, you must ensure that
 the {\tt Implementation} part provides a function for each
 operation in the {\tt Exports} part.\footnote{The {\tt DrawComplex}
 package enhances the facility
-described in  Chapter 
-\ref{ugIntProgCompFuns} on page~\pageref{ugIntProgCompFuns} by allowing a
+described in \sectionref{ugIntProgCompFuns} by allowing a
 complex function to have
 arrows emanating from the surface to indicate the direction of the
 complex argument.}
@@ -55847,19 +55689,16 @@ The power of packages becomes evident when packages 
have parameters.
 Usually these parameters are domains and the exported operations have types
 involving these parameters.
 
-In Chapter \ref{ugTypes} on page~\pageref{ugTypes}, 
-you learned that categories denote classes of domains.
-Although we cover this notion in detail in the next
-chapter, we now give you a sneak preview of its usefulness.
+In \sectionref{ugTypes}, you learned that categories denote classes of
+domains.  Although we cover this notion in detail in the next chapter,
+we now give you a sneak preview of its usefulness.
 
-In \ref{ugUserBlocks} on page~\pageref{ugUserBlocks}, 
-we defined functions $bubbleSort(m)$ and
-$insertionSort(m)$ to sort a list of integers.
-If you look at the code for these functions, you see that they may be
-used to sort {\it any} structure $m$ with the right properties.
-Also, the functions can be used to sort lists of {\it any} elements---not
-just integers.
-Let us now recall the code for $bubbleSort$.
+In \sectionref{ugUserBlocks}, we defined functions $bubbleSort(m)$ and
+$insertionSort(m)$ to sort a list of integers.  If you look at the
+code for these functions, you see that they may be used to sort {\it
+any} structure $m$ with the right properties.  Also, the functions can
+be used to sort lists of {\it any} elements---not just integers.  Let
+us now recall the code for $bubbleSort$.
 
 \begin{verbatim}
 bubbleSort(m) ==
@@ -55881,8 +55720,7 @@ by your telling Axiom that $m$ has
 the ``attribute'' {\bf finiteAggregate}.
 An {\it attribute} is a property
 that a domain either has or does not have.
-As we show later in 
-\ref{ugCategoriesAttributes} on page~\pageref{ugCategoriesAttributes},
+As we show later in \sectionref{ugCategoriesAttributes},
 programs can query domains as to the presence or absence of an attribute.
 
 The operation {\bf swap} swaps elements of $m$.
@@ -56007,8 +55845,7 @@ corresponding two-argument functions with the operation
       insertionSort!(m) == insertionSort!(m,<$S)
 \end{verbatim}
 
-In \ref{ugUserBlocks} on page~\pageref{ugUserBlocks}, 
-we give an alternative definition of
+In \sectionref{ugUserBlocks}, we give an alternative definition of
 {\bf bubbleSort} using \spadfunFrom{first}{List} and
 \spadfunFrom{rest}{List} that is more efficient for a list (for
 which access to any element requires traversing the list from its
@@ -56189,7 +56026,7 @@ The third expression of the {\tt and} requires {\tt D1 
has
 IndexedAggregate(Integer, D2) with} two attributes.
 So the interpreter searches for an {\tt IndexedAggregate}
 among the ancestors of {\tt List (Integer)} (see
-\ref{ugCategoriesHier} on page~\pageref{ugCategoriesHier}).
+\sectionref{ugCategoriesHier}).
 It finds one: {\tt IndexedAggregate(Integer, Integer)}.
 The interpreter tries defining $D2$ as {\tt Integer}.
 After substituting for $D1$ and $D2$, the predicate
@@ -56227,8 +56064,7 @@ how they are defined in Axiom, and how you can extend 
the
 system to include new categories of your own.
 
 We assume that you have read the introductory material on domains
-and categories in \ref{ugTypesBasicDomainCons} on 
-page~\pageref{ugTypesBasicDomainCons}.
+and categories in \sectionref{ugTypesBasicDomainCons}.
 There you learned that the notion of packages covered in the
 previous chapter are special cases of domains.
 While this is in fact the case, it is useful here to regard domains
@@ -56306,8 +56142,7 @@ All parts of a category definition are then indented 
with respect to this
 \index{indentation}
 first line.
 
-In Chapter \ref{ugTypes} on page~\pageref{ugTypes}, 
-we talked about {\tt Ring} as denoting the
+In \sectionref{ugTypes}, we talked about {\tt Ring} as denoting the
 class of all domains that are rings, in short, the class of all
 rings.
 While this is the usual naming convention in Axiom, it is also
@@ -56559,8 +56394,7 @@ operations $*$ and $**$.
 
 We actually omitted the last \index{category!defaults} part of the
 definition of \index{default definitions} {\tt SemiGroup} in
-\ref{ugCategoriesHier} on page~\pageref{ugCategoriesHier}.  Here now
-is its complete Axiom definition.
+\sectionref{ugCategoriesHier}.  Here now is its complete Axiom definition.
 
 \begin{verbatim}
 SemiGroup(): Category == SetCategory with
@@ -56764,9 +56598,8 @@ have commutative multiplication?
 \spadcommand{Matrix Integer has commutative("*")}
 
 Attributes are used to conditionally export and define operations for
-a domain (see \ref{ugDomainsAssertions} on
-page~\pageref{ugDomainsAssertions}).  Attributes can also be asserted
-in a category definition.
+a domain (see \sectionref{ugDomainsAssertions}.
+Attributes can also be asserted in a category definition.
 
 After mentioning category {\tt Ring} many times in this book,
 it is high time that we show you its definition:
@@ -56914,18 +56747,18 @@ if R has IntegerNumberSystem then
 \end{verbatim}
 
 Here the predicate used is identical to the predicate in the {\tt
-Exports} part.  This need not be the case.  See \ref{ugPackagesConds}
-on page~\pageref{ugPackagesConds} for a more complicated example.
+Exports} part.  This need not be the case.  See \sectionref{ugPackagesConds}
+for a more complicated example.
 
 \section{Anonymous Categories}
 \label{ugCategoriesAndPackages}
 
 The part of a category to the right of a {\tt with} is also regarded
 as a category---an ``anonymous category.''  Thus you have already seen
-a category definition \index{category!anonymous} in Chapter
-\ref{ugPackages} on page~\pageref{ugPackages}.  The {\tt Exports} part
-of the package {\tt DrawComplex} (\ref{ugPackagesAbstract} on
-page~\pageref{ugPackagesAbstract}) is an anonymous category.  This is
+a category definition \index{category!anonymous} in 
+\sectionref{ugPackages}.  The {\tt Exports} part
+of the package {\tt DrawComplex} (\sectionref{ugPackagesAbstract})
+is an anonymous category.  This is
 not necessary.  We could, instead, give this category a name:
 
 %
@@ -56994,7 +56827,7 @@ element of the domain.
 If no exported operations mention {\tt \$}, then evidently there is
 nothing of interest to do with the objects of the domain.  You might
 then say that a package is a ``boring'' domain!  But, as you saw in
-Chapter \ref{ugPackages} on page~\pageref{ugPackages}, packages are a
+\sectionref{ugPackages}, packages are a
 very useful notion indeed.  The exported operations of a package
 depend solely on the parameters to the package constructor and other
 explicit domains.
@@ -57035,7 +56868,7 @@ A recommended format for the definition of a domain 
is:\newline
 Note: The brackets {\tt [ ]} here denote optionality.
 
 A complete domain constructor definition for {\tt QuadraticForm} is
-shown in Figure \ref{fig-quadform} on page~\pageref{fig-quadform}.
+shown in \figureref{fig-quadform}.
 Interestingly, this little domain illustrates all the new concepts you
 need to learn.
 
@@ -57111,8 +56944,7 @@ means that membership in a category does not depend on 
the values of
 the parameters to the domain constructor.  This part thus defines the
 link between the domains and the category hierarchies given on the
 inside covers of this book.  As described in
-\ref{ugCategoriesCorrectness} on
-page~\pageref{ugCategoriesCorrectness}, it is this link that makes it
+\sectionref{ugCategoriesCorrectness}, it is this link that makes it
 possible for you to pass objects of the domains as arguments to other
 operations in Axiom.
 
@@ -57129,8 +56961,7 @@ groups, it is possible to pass quadratic forms to 
algorithms that
 only assume arguments to have these abelian group
 properties.
 
-In \ref{ugCategoriesConditionals} on
-page~\pageref{ugCategoriesConditionals}, you saw that {\tt
+In \sectionref{ugCategoriesConditionals}, you saw that {\tt
 Fraction(R)}, a member of {\tt QuotientFieldCategory(R)}, is a member
 of {\tt OrderedSet} if $R$ is a member of {\tt OrderedSet}.  Likewise,
 from the {\tt Exports} part of the definition of {\tt ModMonic(R, S)},
@@ -57255,8 +57086,7 @@ The $Rep$ for quadratic forms is {\tt SquareMatrix(n, 
K)}.
 This means that all objects of the domain are required to be
 $n$ by $n$ matrices with elements from {\bf K}.
 
-The code for {\tt quadraticForm} in Figure \ref{fig-quadform}
-on page \pageref{fig-quadform}
+The code for {\tt quadraticForm} in \figureref{fig-quadform}
 checks that the matrix is symmetric and then converts it to
 {\tt \$}, which means, as usual, ``this domain.'' Such explicit
 conversions \index{conversion} are generally required by the
@@ -57266,13 +57096,11 @@ this function essentially does nothing.
 The {\frenchspacing\tt m :: \$} on line 28 coerces $m$ to a
 quadratic form.
 In fact, the quadratic form you created in step (3) of
-\ref{ugDomainsDemo} on page~\pageref{ugDomainsDemo} 
-is just the matrix you passed it in
+\sectionref{ugDomainsDemo} is just the matrix you passed it in
 disguise!
 Without seeing this definition, you would not know that.
 Nor can you take advantage of this fact now that you do know!
-When we try in the next step of \ref{ugDomainsDemo} on 
-page~\pageref{ugDomainsDemo} to regard
+When we try in the next step of \sectionref{ugDomainsDemo} to regard
 $q$ as a matrix by asking for {\bf nrows}, the number of
 its rows, Axiom gives you an error message saying, in
 effect, ``Good try, but this won't work!''
@@ -57348,8 +57176,7 @@ of polynomial implementation is used.
 Within a given domain, however, you define (at most) one
 representation.\footnote{You can make that representation a
 {\tt Union} type, however.
-See \ref{ugTypesUnions} on page~\pageref{ugTypesUnions} 
-for examples of unions.}
+See \sectionref{ugTypesUnions} for examples of unions.}
 If you want to have multiple representations (that is, several
 domains, each with its own representation), use a category to
 describe the {\tt Exports}, then define separate domains for each
@@ -57362,8 +57189,7 @@ representation.
 The capsule part of {\tt Implementation} defines functions that
 implement the operations exported by the domain---usually only
 some of the operations.
-In our demo in \ref{ugDomainsDemo} on page~\pageref{ugDomainsDemo}, 
-we asked for the value of
+In our demo in \sectionref{ugDomainsDemo}, we asked for the value of
 $3*q-q+q$.
 Where do the operations {\tt *}, {\tt +}, and
 {\tt -} come from?
@@ -57386,8 +57212,7 @@ So do $*$, $+$ and $-$ (from QuadraticForm) come from
 \section{Defaults}
 \label{ugDomainsDefaults}
 %
-In Chapter \ref{ugPackages} on page~\pageref{ugPackages}, 
-we saw that categories can provide
+In \sectionref{ugPackages}, we saw that categories can provide
 default implementations for their operations.
 How and when are they used?
 When Axiom finds that {\tt QuadraticForm(2, Fraction
@@ -57424,8 +57249,7 @@ Let's apply this search strategy for our example 
$3*q-q+q$.
 The scalar multiplication comes first.
 Axiom finds a default implementation in
 {\tt AbelianGroup\&}.
-Remember from \ref{ugCategoriesDefaults} on 
-page~\pageref{ugCategoriesDefaults} that
+Remember from \sectionref{ugCategoriesDefaults} that
 {\tt SemiGroup} provides a default definition for
 $x^n$ by repeated squaring?
 {\tt AbelianGroup} similarly provides a definition for
@@ -57570,8 +57394,7 @@ e_i \  e_j & = & -e_j \  e_i & \hbox{for } i \neq j
 \end{array}
 $$
 
-Now look at the snapshot of its definition given in Figure
-\ref{fig-clifalg} on page~\pageref{fig-clifalg}.
+Now look at the snapshot of its definition given in \figureref{fig-clifalg}.
 Lines 9-10 show part of the definitions of the
 {\tt Exports}.  A Clifford algebra over a field $K$ is asserted to be
 a ring, an algebra over $K$, and a vector space over $K$.  Its
@@ -58160,7 +57983,7 @@ First enter the search string {\tt Matrix} into the 
input area and
 click on {\bf Constructors}.
 What you get is the {\it constructor page} for {\tt Matrix}.
 We show and describe this page in detail in
-\ref{ugBrowseDomain} on page~\pageref{ugBrowseDomain}.
+\sectionref{ugBrowseDomain}.
 By convention, Axiom does a case-insensitive search for a
 match.
 Thus {\tt matrix} is just as good as {\tt Matrix}, has the same
@@ -58168,8 +57991,7 @@ effect as {\tt MaTrix}, and so on.
 We recommend that you generally use small letters for names
 however.
 A search string with only capital letters has a special meaning
-(see \ref{ugBrowseCapitalizationConvention} on 
-page~\pageref{ugBrowseCapitalizationConvention}).
+(see \sectionref{ugBrowseCapitalizationConvention}).
 
 
 Click on \UpBitmap{} to return to the Browse front page.
@@ -58192,12 +58014,6 @@ the string ``{\tt matrix}.''
 \caption{Table of exposed constructors matching {\tt *matrix*} .}
 \end{figure}
 
-%% Following para replaced 1995oct30 MGR
-%These are all the exposed constructors in
-%Axiom.
-%To see how to get all exposed and unexposed constructors in
-%Axiom, skip to the section entitled {\bf Exposure} in
-%\ref{ugBrowseOptions} on page~\pageref{ugBrowseOptions}.
 All constructors containing the string are listed, whether
 exposed or unexposed.
 You can hide the names of the unexposed constructors by clicking
@@ -58220,8 +58036,7 @@ Below the table is a {\it Views} panel.
 This panel contains buttons that let you view constructors in different
 ways.
 To learn about views of constructors, skip to
-\ref{ugBrowseViewsOfConstructors} on 
-page~\pageref{ugBrowseViewsOfConstructors}.
+\sectionref{ugBrowseViewsOfConstructors}.
 
 Click on \UpBitmap{} to return to the Browse front page.
 
@@ -58244,7 +58059,7 @@ the operations in Axiom of that name.
 At the bottom of an operation page is another kind of {\it Views} panel,
 one for operation pages.
 To learn more about these views, skip to
-\ref{ugBrowseViewsOfOperations} on page~\pageref{ugBrowseViewsOfOperations}.
+\sectionref{ugBrowseViewsOfOperations}.
 
 Click on \UpBitmap{} to return to the Browse front page.
 
@@ -58285,10 +58100,7 @@ matrix} as a part of their name.
 \end{figure}
 
 The summary gives you all the names under a heading when the number of
-entries is less than 10. % "less than 10." replaces the following:
-                        % sufficiently small%\footnote{See
-%\ref{ugBrowseOptions} to see how you can change this.}.
-%% MGR 1995oct31
+entries is less than 10. 
 
 Click on \UpBitmap{} to return to the Browse front page.
 
@@ -58409,7 +58221,7 @@ below.
 If you click on an operation name, you bring up a description
 page for the operations.
 For a detailed description of these pages, skip to
-\ref{ugBrowseViewsOfOperations} on page~\pageref{ugBrowseViewsOfOperations}.
+\sectionref{ugBrowseViewsOfOperations}.
 
 \subsubsection{Attributes}
 
@@ -59039,8 +58851,6 @@ with a {\it Views} panel at the bottom and the message 
to {\bf
 Select a view below}.
 To get the descriptions of all these operations as mentioned
 above, select the {\bf description} button.}
-%See the discussion of {\bf threshold} in
-%\ref{ugBrowseOptions}.} %% Removed MGR 1995oct31
 
 \begin{figure}[htbp]
 \begin{picture}(324,180)%(-54,0)
@@ -59106,73 +58916,6 @@ For example, for the category default package
 {\tt MATCAT-} since the corresponding category
 {\tt MatrixCategory} has abbreviation {\tt MATCAT}.
 
-%% *********************************************************************
-%\subsection{Browse Options}
-%\label{ugBrowseOptions}
-%% *********************************************************************
-%
-%You can set two options for using Browse: exposure and threshold.
-%
-%% *********************************************************************
-%\subsubsection{Exposure}
-%% *********************************************************************
-%
-%By default, the only constructors, operations, and attributes
-%shown by Browse are those from exposed constructors.
-%To change this, you can issue
-%\index{set hyperdoc browse exposure}
-%\begin{verbatim}
-%)set hyperdoc browse exposure on
-%\end{verbatim}
-%After you make this setting, you will see
-%both exposed and unexposed constructs.
-%By definition, an operation or attribute is exposed only if it is
-%exported from an exposed constructor.
-%Unexposed items are generally marked by Browse with an asterisk.
-%For more information on exposure, see \ref{ugTypesExpose}.
-%
-%With this setting, try the following experiment.
-%Starting with the main Browse page, enter {\tt *matrix*} into the
-%input area and click on {\bf Constructors}.
-%The result is the following table. %% This line  should be texonly. MGR
-%
-%\begin{figure}[htbp]
-%\begin{picture}(324,180)%(-54,0)
-%\hspace*{\baseLeftSkip}\special{psfile=ps/h-consearch2.ps}
-%\end{picture}
-%\caption{Table of all constructors matching {\tt *matrix*} .}
-%\end{figure}
-%
-%
-%% *********************************************************************
-%\subsubsection{Threshold}
-%% *********************************************************************
-%
-%For General, Documentation or Complete searches, a summary is presented
-%of all matches.
-%When the number of items of a given kind is less than a number called
-%{\bf threshold}, Axiom presents a table of names with the heading
-%for that kind.
-%
-%Also, when an operation name is chosen and there are less than {\bf
-%threshold} distinct operations, the operations are initially shown in
-%{\bf description} mode.
-%
-%The default value of {\bf threshold} is 10.
-%To change its value to say 5, issue
-%\index{set hyperdoc browse threshold}
-%\begin{verbatim}
-%)set hyperdoc browse threshold 5
-%\end{verbatim}
-%Notice that the headings in
-%the summary are active.
-%If you click on a heading, you bring up a separate page for those
-%entries.
-%%
-%% Above section removed by MGR, 1995oct30, as these two options do
-%% not exist.
-
-
 \setcounter{chapter}{14} % Chapter 15 
 
 \chapter{What's New in Axiom Version 2.0}
@@ -59284,7 +59027,7 @@ general, the correspondence to Axiom types is as 
follows.
 \end{itemize}
 (Exceptionally, for NAG EXTERNAL parameters -- ASPs in link parlance
 -- REAL and COMPLEX correspond to {\tt MachineFloat} and {\tt MachineComplex},
-respectively; see \ref{aspSection} on page~\pageref{aspSection}.)
+respectively; see \sectionref{aspSection}.)
 
 The correspondence for aggregates is as follows.
 \begin{itemize}
@@ -59298,8 +59041,7 @@ The correspondence for aggregates is as follows.
 Higher-dimensional arrays are not currently needed for the Nag Library.
 
 Arguments which are Fortran FUNCTIONs or SUBROUTINEs correspond
-to special ASP domains in Axiom. See \ref{aspSection} on 
-page~\pageref{aspSection}.
+to special ASP domains in Axiom. See \sectionref{aspSection}.
 
 % ----------------------------------------------------------------------
 \subsubsection{Classification of NAG parameters}
@@ -59472,7 +59214,7 @@ retractions from appropriate instantiations of {\tt 
Expression},
 \index{FortranCode}
 {\tt FortranCode} allows us to build arbitrarily complex ASPs via a
 kind of pseudo-code.  It is described fully in
-\ref{generalFortran} on page~\pageref{generalFortran}.
+\sectionref{generalFortran}.
 
 Every ASP exports two {\bf coerce} functions: one from
 {\tt FortranCode} and one from {\tt List FortranCode}.  There
@@ -59947,7 +59689,7 @@ by the {\tt nagd} daemon process which may run on a 
different host.
 The {\tt nagman} local agent is started by default whenever you
 start Axiom. The {\tt nagd} server must be started separately.
 Instructions for installing and running the server are supplied
-in \ref{nugNagd} on page~\pageref{nugNagd}. 
+in \sectionref{nugNagd}.
 Use the {\tt )set naglink host} system command
 to point your local agent to a server in your network.
 
@@ -59998,8 +59740,7 @@ the resulting program on the numeric part of the RPC 
stream.
 The {\tt leave} keyword has been replaced by the
 {\tt break} keyword for compatibility with the new Axiom
 extension language.
-See section \ref{ugLangLoopsBreak} on page~\pageref{ugLangLoopsBreak}
-for more information.
+See \sectionref{ugLangLoopsBreak} for more information.
 
 Curly braces are no longer used to create sets. Instead, use
 {\bf set} followed by a bracketed expression. For example,
@@ -60007,7 +59748,7 @@ Curly braces are no longer used to create sets. 
Instead, use
 \spadcommand{set [1,2,3,4]}
 
 Curly braces are now used to enclose a block (see section
-\ref{ugLangBlocks} on page~\pageref{ugLangBlocks}
+\sectionref{ugLangBlocks} 
 for more information). For compatibility, a block can still be 
 enclosed by parentheses as well.
 
@@ -60161,31 +59902,24 @@ HyperDoc.
 A section has been added to the graphics chapter, describing
 how to build two-di\-men\-sion\-al graphs from lists of points. An example is
 given showing how to read the points from a file.
-See section \ref{ugGraphTwoDbuild} on page~\pageref{ugGraphTwoDbuild}
-for details.
+See \sectionref{ugGraphTwoDbuild} for details.
 
 A further section has been added to that same chapter, describing
 how to add a two-di\-men\-sion\-al graph to a viewport which already
 contains other graphs.
-See section
-\ref{ugGraphTwoDappend} on page~\pageref{ugGraphTwoDappend}
-for details.
+See \sectionref{ugGraphTwoDappend} for details.
 
 Chapter 3 
 and the on-line HyperDoc help have been unified.
 
 An explanation of operation names ending in ``?'' and ``!'' has
 been added to the first chapter. 
-See the
-end of the section
-\ref{ugIntroCallFun} on page~\pageref{ugIntroCallFun}
-for details.
+See the end of the \sectionref{ugIntroCallFun} for details.
 
 An expanded explanation of using predicates has
 been added to the sixth chapter. See the
-example involving {\bf evenRule} in the middle of the section
-\ref{ugUserRules} on page~\pageref{ugUserRules}
-for details.
+example involving {\bf evenRule} in the middle of the 
+\sectionref{ugUserRules} for details.
 
 Documentation for the {\tt )compile}, {\tt )library} and
 {\tt )load} commands has been greatly changed. This reflects
@@ -60237,7 +59971,7 @@ are available at {\tt interpreter} level.
 The default user-level is {\tt interpreter}.
 \index{user-level}
 In addition to the {\tt )set} command (discussed in 
-\ref{ugSysCmdset} on page~\pageref{ugSysCmdset})
+\sectionref{ugSysCmdset}
 you can use the HyperDoc settings facility to change the {\it user-level.}
 
 
@@ -60899,9 +60633,7 @@ The sequence of commands
 will call the compiler, edit, and then call the compiler again
 on the file {\bf matrix.spad.}
 If you do not specify a {\it directory,} the working current
-directory (see 
-\ref{ugSysCmdcd} on page~\pageref{ugSysCmdcd})
-is searched for the file.
+directory (see \sectionref{ugSysCmdcd} is searched for the file.
 If the file is not found, the standard system directories are searched.
 
 If you do not give any options, all constructors within a file are
@@ -60930,8 +60662,7 @@ completely different.
 
 The {\tt )vartrace} option causes the compiler to generate
 extra code for the constructor to support conditional tracing of
-variable assignments. (see 
-\ref{ugSysCmdtrace} on page~\pageref{ugSysCmdtrace}). Without
+variable assignments. (see \sectionref{ugSysCmdtrace}). Without
 this option, this code is suppressed and one cannot use
 the {\tt )vars} option for the trace command.
 
@@ -61355,21 +61086,16 @@ Thus {\tt \%\%(-1)} is also the previous step,
 {\tt \%\%(-2)}, is the  step before that, and so on.
 If an invalid step number is given, Axiom will signal an error.
 
-The {\it environment} information can either be saved in a file or entirely in
-memory (the default).
-Each frame 
-(\ref{ugSysCmdframe} on page~\pageref{ugSysCmdframe})
-has its own history database.
-When it is kept in a file, some of it may also be kept in memory for
-efficiency.
-When the information is saved in a file, the name of the file is
-of the form {\bf FRAME.axh} where ``{\bf FRAME}'' is the name of the
-current frame.
-The history file is placed in the current working directory
-(see \ref{ugSysCmdcd} on page~\pageref{ugSysCmdcd}).
-Note that these history database files are not text files (in fact,
-they are directories themselves), and so are not in human-readable
-format.
+The {\it environment} information can either be saved in a file or
+entirely in memory (the default).  Each frame
+(\sectionref{ugSysCmdframe}) has its own history database.  When it is
+kept in a file, some of it may also be kept in memory for efficiency.
+When the information is saved in a file, the name of the file is of
+the form {\bf FRAME.axh} where ``{\bf FRAME}'' is the name of the
+current frame.  The history file is placed in the current working
+directory (see \sectionref{ugSysCmdcd}).  Note that these history
+database files are not text files (in fact, they are directories
+themselves), and so are not in human-readable format.
 
 The options to the {\tt )history} command are as follows:
 
@@ -61426,16 +61152,14 @@ would clear the current workspace and load the 
contents of the named
 saved session. If no saved session name is specified, the system looks
 for a file called {\bf last.axh}.
 
-\item[{\tt )save} {\it savedHistoryName}]
-is used to save  a snapshot of the environment in a file.
-This file is placed in the current working directory
-(see \ref{ugSysCmdcd} on page~\pageref{ugSysCmdcd}).
-Use {\tt )history )restore} to restore the environment to the state
-preserved in the file.
-This option also creates an input file containing all the lines of input
-since you created the workspace frame (for example, by starting your
-Axiom session) or last did a {\tt )clear all} or
-{\tt )clear completely}.
+\item[{\tt )save} {\it savedHistoryName}] is used to save a snapshot
+of the environment in a file.  This file is placed in the current
+working directory (see \sectionref{ugSysCmdcd}).  Use {\tt )history
+)restore} to restore the environment to the state preserved in the
+file.  This option also creates an input file containing all the lines
+of input since you created the workspace frame (for example, by
+starting your Axiom session) or last did a {\tt )clear all} or {\tt
+)clear completely}.
 
 \item[{\tt )show} \lanb{}{\it n}\ranb{} \lanb{}{\tt both}\ranb{}]
 can show previous input lines and output results.
@@ -61614,74 +61338,6 @@ command may be used to  drop out  of Axiom  into 
Common Lisp.
 
 This command is obsolete. Use {\tt )library} instead.
 
-%% BEGIN OBSOLETE
-
-% The {\tt )load} command is used to bring in the compiled library code
-% for constructors and update internal system tables with information
-% about the constructors.
-% This command is usually only used by Axiom library developers.
-%
-% The abbreviation of a constructor serves as part of the name of the
-% directory in which the compiled code is stored (see
-% \ref{ugSysCmdabbreviation} for a discussion of defining and querying
-% abbreviations).
-% The abbreviation is used in the {\tt )load} command.
-% For example, to load the constructors {\tt Integer},
-% {\tt NonNegativeInteger} and {\tt List} which have
-% abbreviations {\tt INT}, {\tt NNI} and {\tt LIST},
-% respectively, issue the command
-% \begin{verbatim}
-% )load INT NNI LIST
-% \end{verbatim}
-% To load constructors only if they have not already been
-% loaded (that is., load {\it conditionally}), use the {\tt )cond}
-% option:
-% \begin{verbatim}
-% )load INT NNI LIST )cond
-% \end{verbatim}
-% To query whether particular constructors have been loaded, use the
-% {\tt )query} option:
-% \begin{verbatim}
-% )load I NNI L )query
-% \end{verbatim}
-% When constructors are loaded from Axiom system directories, some
-% checks and updates are not performed because it is assumed that the system
-% knows about these constructors.
-% To force these checks and updates to occur, add the {\tt )update}
-% option to the command:
-% \begin{verbatim}
-% )load INT NNI LIST )update
-% )load INT NNI LIST )cond )update
-% \end{verbatim}
-% The only time it is really necessary to use the {\tt )load} command is
-% when a new constructor has been compiled or an existing constructor has
-% been modified and then compiled.
-% If an {\tt )abbreviate} command has been issued for a constructor, it
-% will be automatically loaded when needed.
-% In particular, any constructor that comes with the Axiom system
-% will be automatically loaded.
-%
-% If you write several interdependent constructors it is important that
-% they all get loaded when needed.
-% To accomplish this, either load them manually or issue
-% {\tt )abbreviate} commands for each of the constructors so that they
-% will be automatically loaded when needed.
-%
-% Constructors are automatically exposed in the frame in which you load
-% them unless you use the {\tt )noexpose} option.
-% \begin{verbatim}
-% )load MATCAT- )noexpose
-% \end{verbatim}
-% See \ref{ugTypesExpose}
-% for more information about constructor exposure.
-%
-% \par\noindent{\bf Also See:}
-% {\tt )abbreviation} \index{ugSysCmdabbreviation} and
-% {\tt )compile} \index{ugSysCmdcompile}.
-
-%% END OBSOLETE
-
-
 \section{)trace}
 \index{ugSysCmdltrace}
 
@@ -61845,8 +61501,7 @@ The command
 will read the contents of the file {\bf matrix.input} into
 Axiom.
 The ``.input'' file extension is optional.
-See \ref{ugInOutIn} on page~\pageref{ugInOutIn} 
-for more information about {\bf .input} files.
+See \sectionref{ugInOutIn} for more information about {\bf .input} files.
 
 This command remembers the previous file you edited, read or compiled.
 If you do not specify a file name, the previous file will be read.
@@ -62369,23 +62024,16 @@ causes a Common Lisp break loop to be entered after
 the assignment to any of the listed variables in the traced
 function.
 
-\item[{\tt )vars}]
-causes the display of the value of any variable after it is
-assigned in the traced function.
-Note that library code must
-have been compiled (see \ref{ugSysCmdcompile} on 
-page~\pageref{ugSysCmdcompile})
-using the {\tt )vartrace} option in order
-to support this option.
-
-\item[{\tt )vars} {\it var1 \lanb{}... varN\ranb{}}]
-causes the display of the value of any of the specified variables
-after they are assigned in the traced function.
-Note that library code must
-have been compiled (see \ref{ugSysCmdcompile} on 
-page~\pageref{ugSysCmdcompile})
-using the {\tt )vartrace} option in order
-to support this option.
+\item[{\tt )vars}] causes the display of the value of any variable
+after it is assigned in the traced function.  Note that library code
+must have been compiled (see \sectionref{ugSysCmdcompile} using the
+{\tt )vartrace} option in order to support this option.
+
+\item[{\tt )vars} {\it var1 \lanb{}... varN\ranb{}}] causes the
+display of the value of any of the specified variables after they are
+assigned in the traced function.  Note that library code must have
+been compiled (see \sectionref{ugSysCmdcompile} using the {\tt
+)vartrace} option in order to support this option.
 
 \item[{\tt )within} {\it executingFunction}]
 causes the display of trace information only if the traced
@@ -62607,8 +62255,7 @@ The command synonym  {\tt )apropos} is equivalent to
 
 This is a listing of all categories in the Axiom library at the
 time this book was produced.
-Use the Browse facility (described in Chapter 
-\ref{ugBrowse} on page~\pageref{ugBrowse})
+Use the Browse facility (described in \sectionref{ugBrowse})
 to get more information about these constructors.
 
 This sample entry will help you read the following table:
@@ -63081,8 +62728,7 @@ $\hbox{{\rm op}}_{j}$ & is an operation exported by the 
category.
 
 This is a listing of all domains in the Axiom library at the
 time this book was produced.
-Use the Browse facility (described in Chapter 
-\ref{ugBrowse} on page~\pageref{ugBrowse})
+Use the Browse facility (described in \sectionref{ugBrowse})
 to get more information about these constructors.
 
 This sample entry will help you read the following table:
@@ -64323,8 +63969,7 @@ $\hbox{{\rm op}}_{j}$ & is an operation exported by the 
domain.
 
 This is a listing of all packages in the Axiom library at the
 time this book was produced.
-Use the Browse facility (described in Chapter 
-\ref{ugBrowse} on page~\pageref{ugBrowse})
+Use the Browse facility (described in \sectionref{ugBrowse})
 to get more information about these constructors.
 
 This sample entry will help you read the following table:
@@ -65642,7 +65287,7 @@ Additionally, the plane curve function takes
 a second parameter: the current parameter of {\it spaceCurve}.
 This allows the plane curve to change shape
 as it goes around the space curve.
-See \ref{ugFimagesFive} for an example of this.
+See \sectionref{ugFimagesFive} for an example of this.
 %
 \begin{verbatim}
 ntubeDraw: (ThreeCurve,TwoCurve,S,S) -> VIEW3D
diff --git a/changelog b/changelog
index 559c761..be24ef0 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20090404 tpd src/axiom-website/patches.html 20090404.01.tpd.patch      
+20090404 tpd books/bookvol0 fix cross references
 20090403 tpd src/axiom-website/patches.html 20090403.02.tpd.patch      
 20090403 tpd src/input/Makefile add unittest3
 20090403 tpd src/input/unittest3.input unit test top level loop variables
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index b90f94a..782bc59 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1042,5 +1042,7 @@ download.html add more binaries<br/>
 remove gcl-2.6.7, gcl-2.6.8pre<br/>
 <a href="patches/20090403.02.tpd.patch">20090403.02.tpd.patch</a>
 bookvol5 collect top level loop code<br/>
+<a href="patches/20090404.01.tpd.patch">20090404.01.tpd.patch</a>
+bookvol0 fix cross references<br/>
  </body>
 </html>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]