diff --git a/Doc/lib/libtempfile.tex b/Doc/lib/libtempfile.tex
new file mode 100644
index 0000000..84bd641
--- /dev/null
+++ b/Doc/lib/libtempfile.tex
@@ -0,0 +1,50 @@
+\section{Built-in module \sectcode{tempfile}}
+\stmodindex{tempfile}
+\indexii{temporary}{file name}
+\indexii{temporary}{file}
+
+\renewcommand{\indexsubitem}{(in module tempfile)}
+
+This module generates temporary file names.  It is not UNIX specific,
+but it may require some help on non-UNIX systems.
+
+Note: the modules does not create temporary files, nor does it
+automatically remove them when the current process exits or dies.
+
+The module defines a single user-callable function:
+
+\begin{funcdesc}{mktemp}{}
+Return a unique temporary filename.  This is an absolute pathname of a
+file that does not exist at the time the call is made.  No two calls
+will return the same filename.
+\end{funcdesc}
+
+The module uses two global variables that tell it how to construct a
+temporary name.  The caller may assign values to them; by default they
+are initialized at the first call to \code{mktemp()}.
+
+\begin{datadesc}{tempdir}
+When set to a value other than \code{None}, this variable defines the
+directory in which filenames returned by \code{mktemp()} reside.  The
+default is taken from the environment variable \code{TMPDIR}; if this
+is not set, either \code{/usr/tmp} is used (on UNIX), or the current
+working directory (all other systems).  No check is made to see
+whether its value is valid.
+\end{datadesc}
+\ttindex{TMPDIR}
+
+\begin{datadesc}{template}
+When set to a value other than \code{None}, this variable defines the
+prefix of the final component of the filenames returned by
+\code{mktemp()}.  A string of decimal digits is added to generate
+unique filenames.  The default is either ``\code{@\var{pid}.}'' where
+\var{pid} is the current process ID (on UNIX), or ``\code{tmp}'' (all
+other systems).
+\end{datadesc}
+
+Warning: if a UNIX process uses \code{mktemp()}, then calls
+\code{fork()} and both parent and child continue to use
+\code{mktemp()}, the processes will generate conflicting temporary
+names.  To resolve this, the child process should assign \code{None}
+to \code{template}, to force recomputing the default on the next call
+to \code{mktemp()}.
diff --git a/Doc/lib/libtraceback.tex b/Doc/lib/libtraceback.tex
new file mode 100644
index 0000000..38d91ea
--- /dev/null
+++ b/Doc/lib/libtraceback.tex
@@ -0,0 +1,54 @@
+\section{Built-in module \sectcode{traceback}}
+\stmodindex{traceback}
+
+\renewcommand{\indexsubitem}{(in module traceback)}
+
+This module provides a standard interface to format and print stack
+traces of Python programs.  It exactly mimics the behavior of the
+Python interpreter when it prints a stack trace.  This is useful when
+you want to print stack traces under program control, e.g. in a
+``wrapper'' around the interpreter.
+
+The module uses traceback objects --- this is the object type
+that is stored in the variables \code{sys.exc_traceback} and
+\code{sys.last_traceback}.
+
+The module defines the following functions:
+
+\begin{funcdesc}{print_tb}{traceback\optional{\, limit}}
+Print up to \var{limit} stack trace entries from \var{traceback}.  If
+\var{limit} is omitted or \code{None}, all entries are printed.
+\end{funcdesc}
+
+\begin{funcdesc}{extract_tb}{traceback\optional{\, limit}}
+Return a list of up to \var{limit} ``pre-processed'' stack trace
+entries extracted from \var{traceback}.  It is useful for alternate
+formatting of stack traces.  If \var{limit} is omitted or \code{None},
+all entries are extracted.  A ``pre-processed'' stack trace entry is a
+quadruple (\var{filename}, \var{line number}, \var{function name},
+\var{line text}) representing the information that is usually printed
+for a stack trace.  The \var{line text} is a string with leading and
+trailing whitespace stripped; if the source is not available it is
+\code{None}.
+\end{funcdesc}
+
+\begin{funcdesc}{print_exception}{type\, value\, traceback\optional{\, limit}}
+Print exception information and up to \var{limit} stack trace entries
+from \var{traceback}.  This differs from \code{print_tb} in the
+following ways: (1) if \var{traceback} is not \code{None}, it prints a
+header ``\code{Traceback (innermost last):}''; (2) it prints the
+exception \var{type} and \var{value} after the stack trace; (3) if
+\var{type} is \code{SyntaxError} and \var{value} has the appropriate
+format, it prints the line where the syntax error occurred with a
+caret indication the approximate position of the error.
+\end{funcdesc}
+
+\begin{funcdesc}{print_exc}{\optional{limit}}
+This is a shorthand for \code{print_exception(sys.exc_type,}
+\code{sys.exc_value,} \code{sys.exc_traceback,} \code{limit)}.
+\end{funcdesc}
+
+\begin{funcdesc}{print_last}{\optional{limit}}
+This is a shorthand for \code{print_exception(sys.last_type,}
+\code{sys.last_value,} \code{sys.last_traceback,} \code{limit)}.
+\end{funcdesc}
diff --git a/Doc/libtempfile.tex b/Doc/libtempfile.tex
new file mode 100644
index 0000000..84bd641
--- /dev/null
+++ b/Doc/libtempfile.tex
@@ -0,0 +1,50 @@
+\section{Built-in module \sectcode{tempfile}}
+\stmodindex{tempfile}
+\indexii{temporary}{file name}
+\indexii{temporary}{file}
+
+\renewcommand{\indexsubitem}{(in module tempfile)}
+
+This module generates temporary file names.  It is not UNIX specific,
+but it may require some help on non-UNIX systems.
+
+Note: the modules does not create temporary files, nor does it
+automatically remove them when the current process exits or dies.
+
+The module defines a single user-callable function:
+
+\begin{funcdesc}{mktemp}{}
+Return a unique temporary filename.  This is an absolute pathname of a
+file that does not exist at the time the call is made.  No two calls
+will return the same filename.
+\end{funcdesc}
+
+The module uses two global variables that tell it how to construct a
+temporary name.  The caller may assign values to them; by default they
+are initialized at the first call to \code{mktemp()}.
+
+\begin{datadesc}{tempdir}
+When set to a value other than \code{None}, this variable defines the
+directory in which filenames returned by \code{mktemp()} reside.  The
+default is taken from the environment variable \code{TMPDIR}; if this
+is not set, either \code{/usr/tmp} is used (on UNIX), or the current
+working directory (all other systems).  No check is made to see
+whether its value is valid.
+\end{datadesc}
+\ttindex{TMPDIR}
+
+\begin{datadesc}{template}
+When set to a value other than \code{None}, this variable defines the
+prefix of the final component of the filenames returned by
+\code{mktemp()}.  A string of decimal digits is added to generate
+unique filenames.  The default is either ``\code{@\var{pid}.}'' where
+\var{pid} is the current process ID (on UNIX), or ``\code{tmp}'' (all
+other systems).
+\end{datadesc}
+
+Warning: if a UNIX process uses \code{mktemp()}, then calls
+\code{fork()} and both parent and child continue to use
+\code{mktemp()}, the processes will generate conflicting temporary
+names.  To resolve this, the child process should assign \code{None}
+to \code{template}, to force recomputing the default on the next call
+to \code{mktemp()}.
diff --git a/Doc/libtraceback.tex b/Doc/libtraceback.tex
new file mode 100644
index 0000000..38d91ea
--- /dev/null
+++ b/Doc/libtraceback.tex
@@ -0,0 +1,54 @@
+\section{Built-in module \sectcode{traceback}}
+\stmodindex{traceback}
+
+\renewcommand{\indexsubitem}{(in module traceback)}
+
+This module provides a standard interface to format and print stack
+traces of Python programs.  It exactly mimics the behavior of the
+Python interpreter when it prints a stack trace.  This is useful when
+you want to print stack traces under program control, e.g. in a
+``wrapper'' around the interpreter.
+
+The module uses traceback objects --- this is the object type
+that is stored in the variables \code{sys.exc_traceback} and
+\code{sys.last_traceback}.
+
+The module defines the following functions:
+
+\begin{funcdesc}{print_tb}{traceback\optional{\, limit}}
+Print up to \var{limit} stack trace entries from \var{traceback}.  If
+\var{limit} is omitted or \code{None}, all entries are printed.
+\end{funcdesc}
+
+\begin{funcdesc}{extract_tb}{traceback\optional{\, limit}}
+Return a list of up to \var{limit} ``pre-processed'' stack trace
+entries extracted from \var{traceback}.  It is useful for alternate
+formatting of stack traces.  If \var{limit} is omitted or \code{None},
+all entries are extracted.  A ``pre-processed'' stack trace entry is a
+quadruple (\var{filename}, \var{line number}, \var{function name},
+\var{line text}) representing the information that is usually printed
+for a stack trace.  The \var{line text} is a string with leading and
+trailing whitespace stripped; if the source is not available it is
+\code{None}.
+\end{funcdesc}
+
+\begin{funcdesc}{print_exception}{type\, value\, traceback\optional{\, limit}}
+Print exception information and up to \var{limit} stack trace entries
+from \var{traceback}.  This differs from \code{print_tb} in the
+following ways: (1) if \var{traceback} is not \code{None}, it prints a
+header ``\code{Traceback (innermost last):}''; (2) it prints the
+exception \var{type} and \var{value} after the stack trace; (3) if
+\var{type} is \code{SyntaxError} and \var{value} has the appropriate
+format, it prints the line where the syntax error occurred with a
+caret indication the approximate position of the error.
+\end{funcdesc}
+
+\begin{funcdesc}{print_exc}{\optional{limit}}
+This is a shorthand for \code{print_exception(sys.exc_type,}
+\code{sys.exc_value,} \code{sys.exc_traceback,} \code{limit)}.
+\end{funcdesc}
+
+\begin{funcdesc}{print_last}{\optional{limit}}
+This is a shorthand for \code{print_exception(sys.last_type,}
+\code{sys.last_value,} \code{sys.last_traceback,} \code{limit)}.
+\end{funcdesc}
