diff --git a/Doc/lib/liboperator.tex b/Doc/lib/liboperator.tex
index d4b7ca9..812ca13 100644
--- a/Doc/lib/liboperator.tex
+++ b/Doc/lib/liboperator.tex
@@ -4,187 +4,121 @@
 \label{module-operator}
 \bimodindex{operator}
 
-The \code{operator} module exports a set of functions implemented in C
+The \module{operator} module exports a set of functions implemented in C
 corresponding to the intrinsic operators of Python.  For example,
 \code{operator.add(x, y)} is equivalent to the expression \code{x+y}.  The
 function names are those used for special class methods; variants without
 leading and trailing \samp{__} are also provided for convenience.
 
-The \code{operator} module defines the following functions:
-
-\setindexsubitem{(in module operator)}
+The \module{operator} module defines the following functions:
 
 \begin{funcdesc}{add}{a, b}
-Return \var{a} \code{+} \var{b}, for \var{a} and \var{b} numbers.
-\end{funcdesc}
-
-\begin{funcdesc}{__add__}{a, b}
+\funcline{__add__}{a, b}
 Return \var{a} \code{+} \var{b}, for \var{a} and \var{b} numbers.
 \end{funcdesc}
 
 \begin{funcdesc}{sub}{a, b}
-Return \var{a} \code{-} \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__sub__}{a, b}
+\funcline{__sub__}{a, b}
 Return \var{a} \code{-} \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{mul}{a, b}
-Return \var{a} \code{*} \var{b}, for \var{a} and \var{b} numbers.
-\end{funcdesc}
-
-\begin{funcdesc}{__mul__}{a, b}
+\funcline{__mul__}{a, b}
 Return \var{a} \code{*} \var{b}, for \var{a} and \var{b} numbers.
 \end{funcdesc}
 
 \begin{funcdesc}{div}{a, b}
-Return \var{a} \code{/} \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__div__}{a, b}
+\funcline{__div__}{a, b}
 Return \var{a} \code{/} \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{mod}{a, b}
-Return \var{a} \code{\%} \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__mod__}{a, b}
+\funcline{__mod__}{a, b}
 Return \var{a} \code{\%} \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{neg}{o}
-Return \var{o} negated.
-\end{funcdesc}
-
-\begin{funcdesc}{__neg__}{o}
+\funcline{__neg__}{o}
 Return \var{o} negated.
 \end{funcdesc}
 
 \begin{funcdesc}{pos}{o}
-Return \var{o} positive.
-\end{funcdesc}
-
-\begin{funcdesc}{__pos__}{o}
+\funcline{__pos__}{o}
 Return \var{o} positive.
 \end{funcdesc}
 
 \begin{funcdesc}{abs}{o}
-Return the absolute value of \var{o}.
-\end{funcdesc}
-
-\begin{funcdesc}{__abs__}{o}
+\funcline{__abs__}{o}
 Return the absolute value of \var{o}.
 \end{funcdesc}
 
 \begin{funcdesc}{inv}{o}
-Return the inverse of \var{o}.
-\end{funcdesc}
-
-\begin{funcdesc}{__inv__}{o}
+\funcline{__inv__}{o}
 Return the inverse of \var{o}.
 \end{funcdesc}
 
 \begin{funcdesc}{lshift}{a, b}
-Return \var{a} shifted left by \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__lshift__}{a, b}
+\funcline{__lshift__}{a, b}
 Return \var{a} shifted left by \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{rshift}{a, b}
-Return \var{a} shifted right by \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__rshift__}{a, b}
+\funcline{__rshift__}{a, b}
 Return \var{a} shifted right by \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{and_}{a, b}
-Return the bitwise and of \var{a} and \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__and__}{a, b}
+\funcline{__and__}{a, b}
 Return the bitwise and of \var{a} and \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{or_}{a, b}
-Return the bitwise or of \var{a} and \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__or__}{a, b}
+\funcline{__or__}{a, b}
 Return the bitwise or of \var{a} and \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{concat}{a, b}
-Return \var{a} \code{+} \var{b} for \var{a} and \var{b} sequences.
-\end{funcdesc}
-
-\begin{funcdesc}{__concat__}{a, b}
+\funcline{__concat__}{a, b}
 Return \var{a} \code{+} \var{b} for \var{a} and \var{b} sequences.
 \end{funcdesc}
 
 \begin{funcdesc}{repeat}{a, b}
-Return \var{a} \code{*} \var{b} where \var{a} is a sequence and
-\var{b} is an integer.
-\end{funcdesc}
-
-\begin{funcdesc}{__repeat__}{a, b}
+\funcline{__repeat__}{a, b}
 Return \var{a} \code{*} \var{b} where \var{a} is a sequence and
 \var{b} is an integer.
 \end{funcdesc}
 
 \begin{funcdesc}{getitem}{a, b}
-Return the value of \var{a} at index \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__getitem__}{a, b}
+\funcline{__getitem__}{a, b}
 Return the value of \var{a} at index \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{setitem}{a, b, c}
-Set the value of \var{a} at index \var{b} to \var{c}.
-\end{funcdesc}
-
-\begin{funcdesc}{__setitem__}{a, b, c}
+\funcline{__setitem__}{a, b, c}
 Set the value of \var{a} at index \var{b} to \var{c}.
 \end{funcdesc}
 
 \begin{funcdesc}{delitem}{a, b}
-Remove the value of \var{a} at index \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__delitem__}{a, b}
+\funcline{__delitem__}{a, b}
 Remove the value of \var{a} at index \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{getslice}{a, b, c}
-Return the slice of \var{a} from index \var{b} to index \var{c}\code{-1}.
-\end{funcdesc}
-
-\begin{funcdesc}{__getslice__}{a, b, c}
+\funcline{__getslice__}{a, b, c}
 Return the slice of \var{a} from index \var{b} to index \var{c}\code{-1}.
 \end{funcdesc}
 
 \begin{funcdesc}{setslice}{a, b, c, v}
-Set the slice of \var{a} from index \var{b} to index \var{c}\code{-1} to the
-sequence \var{v}.
-\end{funcdesc}
-
-\begin{funcdesc}{__setslice__}{a, b, c, v}
+\funcline{__setslice__}{a, b, c, v}
 Set the slice of \var{a} from index \var{b} to index \var{c}\code{-1} to the
 sequence \var{v}.
 \end{funcdesc}
 
 \begin{funcdesc}{delslice}{a, b, c}
+\funcline{__delslice__}{a, b, c}
 Delete the slice of \var{a} from index \var{b} to index \var{c}\code{-1}.
 \end{funcdesc}
 
-\begin{funcdesc}{__delslice__}{a, b, c}
-Delete the slice of \var{a} from index \var{b} to index \var{c}\code{-1}.
-\end{funcdesc}
 
 Example: Build a dictionary that maps the ordinals from \code{0} to
 \code{256} to their character equivalents.
diff --git a/Doc/liboperator.tex b/Doc/liboperator.tex
index d4b7ca9..812ca13 100644
--- a/Doc/liboperator.tex
+++ b/Doc/liboperator.tex
@@ -4,187 +4,121 @@
 \label{module-operator}
 \bimodindex{operator}
 
-The \code{operator} module exports a set of functions implemented in C
+The \module{operator} module exports a set of functions implemented in C
 corresponding to the intrinsic operators of Python.  For example,
 \code{operator.add(x, y)} is equivalent to the expression \code{x+y}.  The
 function names are those used for special class methods; variants without
 leading and trailing \samp{__} are also provided for convenience.
 
-The \code{operator} module defines the following functions:
-
-\setindexsubitem{(in module operator)}
+The \module{operator} module defines the following functions:
 
 \begin{funcdesc}{add}{a, b}
-Return \var{a} \code{+} \var{b}, for \var{a} and \var{b} numbers.
-\end{funcdesc}
-
-\begin{funcdesc}{__add__}{a, b}
+\funcline{__add__}{a, b}
 Return \var{a} \code{+} \var{b}, for \var{a} and \var{b} numbers.
 \end{funcdesc}
 
 \begin{funcdesc}{sub}{a, b}
-Return \var{a} \code{-} \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__sub__}{a, b}
+\funcline{__sub__}{a, b}
 Return \var{a} \code{-} \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{mul}{a, b}
-Return \var{a} \code{*} \var{b}, for \var{a} and \var{b} numbers.
-\end{funcdesc}
-
-\begin{funcdesc}{__mul__}{a, b}
+\funcline{__mul__}{a, b}
 Return \var{a} \code{*} \var{b}, for \var{a} and \var{b} numbers.
 \end{funcdesc}
 
 \begin{funcdesc}{div}{a, b}
-Return \var{a} \code{/} \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__div__}{a, b}
+\funcline{__div__}{a, b}
 Return \var{a} \code{/} \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{mod}{a, b}
-Return \var{a} \code{\%} \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__mod__}{a, b}
+\funcline{__mod__}{a, b}
 Return \var{a} \code{\%} \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{neg}{o}
-Return \var{o} negated.
-\end{funcdesc}
-
-\begin{funcdesc}{__neg__}{o}
+\funcline{__neg__}{o}
 Return \var{o} negated.
 \end{funcdesc}
 
 \begin{funcdesc}{pos}{o}
-Return \var{o} positive.
-\end{funcdesc}
-
-\begin{funcdesc}{__pos__}{o}
+\funcline{__pos__}{o}
 Return \var{o} positive.
 \end{funcdesc}
 
 \begin{funcdesc}{abs}{o}
-Return the absolute value of \var{o}.
-\end{funcdesc}
-
-\begin{funcdesc}{__abs__}{o}
+\funcline{__abs__}{o}
 Return the absolute value of \var{o}.
 \end{funcdesc}
 
 \begin{funcdesc}{inv}{o}
-Return the inverse of \var{o}.
-\end{funcdesc}
-
-\begin{funcdesc}{__inv__}{o}
+\funcline{__inv__}{o}
 Return the inverse of \var{o}.
 \end{funcdesc}
 
 \begin{funcdesc}{lshift}{a, b}
-Return \var{a} shifted left by \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__lshift__}{a, b}
+\funcline{__lshift__}{a, b}
 Return \var{a} shifted left by \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{rshift}{a, b}
-Return \var{a} shifted right by \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__rshift__}{a, b}
+\funcline{__rshift__}{a, b}
 Return \var{a} shifted right by \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{and_}{a, b}
-Return the bitwise and of \var{a} and \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__and__}{a, b}
+\funcline{__and__}{a, b}
 Return the bitwise and of \var{a} and \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{or_}{a, b}
-Return the bitwise or of \var{a} and \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__or__}{a, b}
+\funcline{__or__}{a, b}
 Return the bitwise or of \var{a} and \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{concat}{a, b}
-Return \var{a} \code{+} \var{b} for \var{a} and \var{b} sequences.
-\end{funcdesc}
-
-\begin{funcdesc}{__concat__}{a, b}
+\funcline{__concat__}{a, b}
 Return \var{a} \code{+} \var{b} for \var{a} and \var{b} sequences.
 \end{funcdesc}
 
 \begin{funcdesc}{repeat}{a, b}
-Return \var{a} \code{*} \var{b} where \var{a} is a sequence and
-\var{b} is an integer.
-\end{funcdesc}
-
-\begin{funcdesc}{__repeat__}{a, b}
+\funcline{__repeat__}{a, b}
 Return \var{a} \code{*} \var{b} where \var{a} is a sequence and
 \var{b} is an integer.
 \end{funcdesc}
 
 \begin{funcdesc}{getitem}{a, b}
-Return the value of \var{a} at index \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__getitem__}{a, b}
+\funcline{__getitem__}{a, b}
 Return the value of \var{a} at index \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{setitem}{a, b, c}
-Set the value of \var{a} at index \var{b} to \var{c}.
-\end{funcdesc}
-
-\begin{funcdesc}{__setitem__}{a, b, c}
+\funcline{__setitem__}{a, b, c}
 Set the value of \var{a} at index \var{b} to \var{c}.
 \end{funcdesc}
 
 \begin{funcdesc}{delitem}{a, b}
-Remove the value of \var{a} at index \var{b}.
-\end{funcdesc}
-
-\begin{funcdesc}{__delitem__}{a, b}
+\funcline{__delitem__}{a, b}
 Remove the value of \var{a} at index \var{b}.
 \end{funcdesc}
 
 \begin{funcdesc}{getslice}{a, b, c}
-Return the slice of \var{a} from index \var{b} to index \var{c}\code{-1}.
-\end{funcdesc}
-
-\begin{funcdesc}{__getslice__}{a, b, c}
+\funcline{__getslice__}{a, b, c}
 Return the slice of \var{a} from index \var{b} to index \var{c}\code{-1}.
 \end{funcdesc}
 
 \begin{funcdesc}{setslice}{a, b, c, v}
-Set the slice of \var{a} from index \var{b} to index \var{c}\code{-1} to the
-sequence \var{v}.
-\end{funcdesc}
-
-\begin{funcdesc}{__setslice__}{a, b, c, v}
+\funcline{__setslice__}{a, b, c, v}
 Set the slice of \var{a} from index \var{b} to index \var{c}\code{-1} to the
 sequence \var{v}.
 \end{funcdesc}
 
 \begin{funcdesc}{delslice}{a, b, c}
+\funcline{__delslice__}{a, b, c}
 Delete the slice of \var{a} from index \var{b} to index \var{c}\code{-1}.
 \end{funcdesc}
 
-\begin{funcdesc}{__delslice__}{a, b, c}
-Delete the slice of \var{a} from index \var{b} to index \var{c}\code{-1}.
-\end{funcdesc}
 
 Example: Build a dictionary that maps the ordinals from \code{0} to
 \code{256} to their character equivalents.
