diff --git a/Doc/lib/libmath.tex b/Doc/lib/libmath.tex
index 935b940..f70c741 100644
--- a/Doc/lib/libmath.tex
+++ b/Doc/lib/libmath.tex
@@ -7,56 +7,92 @@
 It provides access to the mathematical functions defined by the C
 standard.
 They are:
-\iftexi
+
 \begin{funcdesc}{acos}{x}
-\funcline{asin}{x}
-\funcline{atan}{x}
-\funcline{atan2}{x, y}
-\funcline{ceil}{x}
-\funcline{cos}{x}
-\funcline{cosh}{x}
-\funcline{exp}{x}
-\funcline{fabs}{x}
-\funcline{floor}{x}
-\funcline{fmod}{x, y}
-\funcline{frexp}{x}
-\funcline{hypot}{x, y}
-\funcline{ldexp}{x, y}
-\funcline{log}{x}
-\funcline{log10}{x}
-\funcline{modf}{x}
-\funcline{pow}{x, y}
-\funcline{sin}{x}
-\funcline{sinh}{x}
-\funcline{sqrt}{x}
-\funcline{tan}{x}
-\funcline{tanh}{x}
+Return the arc cosine of \var{x}.
 \end{funcdesc}
-\else
-\code{acos(\varvars{x})},
-\code{asin(\varvars{x})},
-\code{atan(\varvars{x})},
-\code{atan2(\varvars{x\, y})},
-\code{ceil(\varvars{x})},
-\code{cos(\varvars{x})},
-\code{cosh(\varvars{x})},
-\code{exp(\varvars{x})},
-\code{fabs(\varvars{x})},
-\code{floor(\varvars{x})},
-\code{fmod(\varvars{x\, y})},
-\code{frexp(\varvars{x})},
-\code{hypot(\varvars{x\, y})},
-\code{ldexp(\varvars{x\, y})},
-\code{log(\varvars{x})},
-\code{log10(\varvars{x})},
-\code{modf(\varvars{x})},
-\code{pow(\varvars{x\, y})},
-\code{sin(\varvars{x})},
-\code{sinh(\varvars{x})},
-\code{sqrt(\varvars{x})},
-\code{tan(\varvars{x})},
-\code{tanh(\varvars{x})}.
-\fi
+
+\begin{funcdesc}{asin}{x}
+Return the arc sine of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{atan}{x}
+Return the arc tangent of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{atan2}{x, y}
+Return \code{atan(x / y)}.
+\end{funcdesc}
+
+\begin{funcdesc}{ceil}{x}
+Return the ceiling of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{cos}{x}
+Return the cosine of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{cosh}{x}
+Return the hyperbolic cosine of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{exp}{x}
+Return the exponential value $\mbox{e}^x$.
+\end{funcdesc}
+
+\begin{funcdesc}{fabs}{x}
+Return the absolute value of the real \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{floor}{x}
+Return the floor of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{fmod}{x, y}
+Return \code{x \% y}.
+\end{funcdesc}
+
+\begin{funcdesc}{frexp}{x}
+Return the matissa and exponent for \var{x}.  The mantissa is
+positive.
+\end{funcdesc}
+
+\begin{funcdesc}{hypot}{x, y}
+Return the Euclidean distance, \code{sqrt(x*x + y*y)}.
+\end{funcdesc}
+
+\begin{funcdesc}{ldexp}{x, i}
+Return $x {\times} 2^i$.
+\end{funcdesc}
+
+\begin{funcdesc}{modf}{x}
+Return the fractional and integer parts of \var{x}.  Both results
+carry the sign of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{pow}{x, y}
+Return $x^y$.
+\end{funcdesc}
+
+\begin{funcdesc}{sin}{x}
+Return the sine of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{sinh}{x}
+Return the hyperbolic sine of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{sqrt}{x}
+Return the square root of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{tan}{x}
+Return the tangent of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{tanh}{x}
+Return the hyperbolic tangent of \var{x}.
+\end{funcdesc}
 
 Note that \code{frexp} and \code{modf} have a different call/return
 pattern than their C equivalents: they take a single argument and
@@ -64,14 +100,13 @@
 value through an `output parameter' (there is no such thing in Python).
 
 The module also defines two mathematical constants:
-\iftexi
-\begin{datadesc}{pi}
-\dataline{e}
-\end{datadesc}
-\else
-\code{pi} and \code{e}.
-\fi
 
-\begin{seealso}
-\seealso{cmath}{versions of these functions that can handle complex numbers}
-\end{seealso}
+\begin{datadesc}{pi}
+The mathematical constant \emph{pi}.
+\end{datadesc}
+
+\begin{datadesc}{e}
+The mathematical constant \emph{e}.
+\end{datadesc}
+
+See also the \code{cmath} versions of many of these functions.
diff --git a/Doc/libmath.tex b/Doc/libmath.tex
index 935b940..f70c741 100644
--- a/Doc/libmath.tex
+++ b/Doc/libmath.tex
@@ -7,56 +7,92 @@
 It provides access to the mathematical functions defined by the C
 standard.
 They are:
-\iftexi
+
 \begin{funcdesc}{acos}{x}
-\funcline{asin}{x}
-\funcline{atan}{x}
-\funcline{atan2}{x, y}
-\funcline{ceil}{x}
-\funcline{cos}{x}
-\funcline{cosh}{x}
-\funcline{exp}{x}
-\funcline{fabs}{x}
-\funcline{floor}{x}
-\funcline{fmod}{x, y}
-\funcline{frexp}{x}
-\funcline{hypot}{x, y}
-\funcline{ldexp}{x, y}
-\funcline{log}{x}
-\funcline{log10}{x}
-\funcline{modf}{x}
-\funcline{pow}{x, y}
-\funcline{sin}{x}
-\funcline{sinh}{x}
-\funcline{sqrt}{x}
-\funcline{tan}{x}
-\funcline{tanh}{x}
+Return the arc cosine of \var{x}.
 \end{funcdesc}
-\else
-\code{acos(\varvars{x})},
-\code{asin(\varvars{x})},
-\code{atan(\varvars{x})},
-\code{atan2(\varvars{x\, y})},
-\code{ceil(\varvars{x})},
-\code{cos(\varvars{x})},
-\code{cosh(\varvars{x})},
-\code{exp(\varvars{x})},
-\code{fabs(\varvars{x})},
-\code{floor(\varvars{x})},
-\code{fmod(\varvars{x\, y})},
-\code{frexp(\varvars{x})},
-\code{hypot(\varvars{x\, y})},
-\code{ldexp(\varvars{x\, y})},
-\code{log(\varvars{x})},
-\code{log10(\varvars{x})},
-\code{modf(\varvars{x})},
-\code{pow(\varvars{x\, y})},
-\code{sin(\varvars{x})},
-\code{sinh(\varvars{x})},
-\code{sqrt(\varvars{x})},
-\code{tan(\varvars{x})},
-\code{tanh(\varvars{x})}.
-\fi
+
+\begin{funcdesc}{asin}{x}
+Return the arc sine of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{atan}{x}
+Return the arc tangent of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{atan2}{x, y}
+Return \code{atan(x / y)}.
+\end{funcdesc}
+
+\begin{funcdesc}{ceil}{x}
+Return the ceiling of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{cos}{x}
+Return the cosine of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{cosh}{x}
+Return the hyperbolic cosine of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{exp}{x}
+Return the exponential value $\mbox{e}^x$.
+\end{funcdesc}
+
+\begin{funcdesc}{fabs}{x}
+Return the absolute value of the real \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{floor}{x}
+Return the floor of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{fmod}{x, y}
+Return \code{x \% y}.
+\end{funcdesc}
+
+\begin{funcdesc}{frexp}{x}
+Return the matissa and exponent for \var{x}.  The mantissa is
+positive.
+\end{funcdesc}
+
+\begin{funcdesc}{hypot}{x, y}
+Return the Euclidean distance, \code{sqrt(x*x + y*y)}.
+\end{funcdesc}
+
+\begin{funcdesc}{ldexp}{x, i}
+Return $x {\times} 2^i$.
+\end{funcdesc}
+
+\begin{funcdesc}{modf}{x}
+Return the fractional and integer parts of \var{x}.  Both results
+carry the sign of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{pow}{x, y}
+Return $x^y$.
+\end{funcdesc}
+
+\begin{funcdesc}{sin}{x}
+Return the sine of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{sinh}{x}
+Return the hyperbolic sine of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{sqrt}{x}
+Return the square root of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{tan}{x}
+Return the tangent of \var{x}.
+\end{funcdesc}
+
+\begin{funcdesc}{tanh}{x}
+Return the hyperbolic tangent of \var{x}.
+\end{funcdesc}
 
 Note that \code{frexp} and \code{modf} have a different call/return
 pattern than their C equivalents: they take a single argument and
@@ -64,14 +100,13 @@
 value through an `output parameter' (there is no such thing in Python).
 
 The module also defines two mathematical constants:
-\iftexi
-\begin{datadesc}{pi}
-\dataline{e}
-\end{datadesc}
-\else
-\code{pi} and \code{e}.
-\fi
 
-\begin{seealso}
-\seealso{cmath}{versions of these functions that can handle complex numbers}
-\end{seealso}
+\begin{datadesc}{pi}
+The mathematical constant \emph{pi}.
+\end{datadesc}
+
+\begin{datadesc}{e}
+The mathematical constant \emph{e}.
+\end{datadesc}
+
+See also the \code{cmath} versions of many of these functions.
