Clean up some markup cruft.  A number of the macros that take no
parameters (like \UNIX) are commonly entered using an empty group to
separate the markup from a following inter-word space; this is not
needed when the next character is punctuation, or the markup is the
last thing in the enclosing group.  These cases were marked
inconsistently; the empty group is now *only* used when needed.
diff --git a/Doc/ext/embedding.tex b/Doc/ext/embedding.tex
index 453a939..a44b89c 100644
--- a/Doc/ext/embedding.tex
+++ b/Doc/ext/embedding.tex
@@ -272,14 +272,14 @@
 % (what to watch out for)
 
 
-\section{Embedding Python in \Cpp{}
+\section{Embedding Python in \Cpp
      \label{embeddingInCplusplus}}
 
 It is also possible to embed Python in a \Cpp{} program; precisely how this
 is done will depend on the details of the \Cpp{} system used; in general you
-will need to write the main program in \Cpp{}, and use the \Cpp{} compiler
+will need to write the main program in \Cpp, and use the \Cpp{} compiler
 to compile and link your program.  There is no need to recompile Python
-itself using \Cpp{}.
+itself using \Cpp.
 
 
 \section{Linking Requirements
diff --git a/Doc/ext/extending.tex b/Doc/ext/extending.tex
index 49a561c..22623e9 100644
--- a/Doc/ext/extending.tex
+++ b/Doc/ext/extending.tex
@@ -1,4 +1,4 @@
-\chapter{Extending Python with C or \Cpp{} \label{intro}}
+\chapter{Extending Python with C or \Cpp \label{intro}}
 
 
 It is quite easy to add new built-in modules to Python, if you know
@@ -499,14 +499,14 @@
 \constant{METH_VARARGS} flag; this is described in section
 \ref{methodTable}, ``The Module's Method Table and Initialization
 Function.''  The \cfunction{PyArg_ParseTuple()} function and its
-arguments are documented in section \ref{parseTuple}, ``Extracting
+arguments are documented in section~\ref{parseTuple}, ``Extracting
 Parameters in Extension Functions.''
 
 The macros \cfunction{Py_XINCREF()} and \cfunction{Py_XDECREF()}
 increment/decrement the reference count of an object and are safe in
 the presence of \NULL{} pointers (but note that \var{temp} will not be 
-\NULL{} in this context).  More info on them in section
-\ref{refcounts}, ``Reference Counts.''
+\NULL{} in this context).  More info on them in
+section~\ref{refcounts}, ``Reference Counts.''
 
 Later, when it is time to call the function, you call the C function
 \cfunction{PyEval_CallObject()}.  This function has two arguments, both
@@ -544,7 +544,7 @@
 even (especially!) if you are not interested in its value.
 
 Before you do this, however, it is important to check that the return
-value isn't \NULL{}.  If it is, the Python function terminated by
+value isn't \NULL.  If it is, the Python function terminated by
 raising an exception.  If the C code that called
 \cfunction{PyEval_CallObject()} is called from Python, it should now
 return an error indication to its Python caller, so the interpreter
@@ -652,7 +652,7 @@
 
 \item[\samp{z} (string or \code{None}) {[char *]}]
 Like \samp{s}, but the Python object may also be \code{None}, in which
-case the C pointer is set to \NULL{}.
+case the C pointer is set to \NULL.
 
 \item[\samp{z\#} (string or \code{None} or any read buffer compatible object) 
 {[char *, int]}]
@@ -680,7 +680,7 @@
 second a pointer to a pointer to a character buffer (\var{**buffer},
 the buffer used for storing the encoded data).
 
-The encoding name must map to a registered codec. If set to \NULL{},
+The encoding name must map to a registered codec. If set to \NULL,
 the default encoding is used.
 
 \cfunction{PyArg_ParseTuple()} will allocate a buffer of the needed
@@ -705,7 +705,7 @@
 storing the encoded data) and the third one a pointer to an integer
 (\var{*buffer_length}, the buffer length).
 
-The encoding name must map to a registered codec. If set to \NULL{},
+The encoding name must map to a registered codec. If set to \NULL,
 the default encoding is used.
 
 There are two modes of operation: 
@@ -766,7 +766,7 @@
 Store a Python object (without any conversion) in a C object pointer.
 The C program thus receives the actual object that was passed.  The
 object's reference count is not increased.  The pointer stored is not
-\NULL{}.
+\NULL.
 
 \item[\samp{O!} (object) {[\var{typeobject}, PyObject *]}]
 Store a Python object in a C object pointer.  This is similar to
@@ -945,7 +945,7 @@
 The \var{arg} and \var{format} parameters are identical to those of the
 \cfunction{PyArg_ParseTuple()} function.  The \var{kwdict} parameter
 is the dictionary of keywords received as the third parameter from the
-Python runtime.  The \var{kwlist} parameter is a \NULL{}-terminated
+Python runtime.  The \var{kwlist} parameter is a \NULL-terminated
 list of strings which identify the parameters; the names are matched
 with the type information from \var{format} from left to right.  On
 success, \cfunction{PyArg_ParseTupleAndKeywords()} returns true,
@@ -1055,11 +1055,11 @@
 
 \item[\samp{s} (string) {[char *]}]
 Convert a null-terminated C string to a Python object.  If the C
-string pointer is \NULL{}, \code{None} is used.
+string pointer is \NULL, \code{None} is used.
 
 \item[\samp{s\#} (string) {[char *, int]}]
 Convert a C string and its length to a Python object.  If the C string
-pointer is \NULL{}, the length is ignored and \code{None} is
+pointer is \NULL, the length is ignored and \code{None} is
 returned.
 
 \item[\samp{z} (string or \code{None}) {[char *]}]
@@ -1171,10 +1171,10 @@
 \section{Reference Counts
          \label{refcounts}}
 
-In languages like C or \Cpp{}, the programmer is responsible for
+In languages like C or \Cpp, the programmer is responsible for
 dynamic allocation and deallocation of memory on the heap.  In C,
 this is done using the functions \cfunction{malloc()} and
-\cfunction{free()}.  In \Cpp{}, the operators \keyword{new} and
+\cfunction{free()}.  In \Cpp, the operators \keyword{new} and
 \keyword{delete} are used with essentially the same meaning; they are
 actually implemented using \cfunction{malloc()} and
 \cfunction{free()}, so we'll restrict the following discussion to the
@@ -1423,7 +1423,7 @@
 references generally return \NULL{} only to indicate that an
 exception occurred.  The reason for not testing for \NULL{}
 arguments is that functions often pass the objects they receive on to
-other function --- if each function were to test for \NULL{},
+other function --- if each function were to test for \NULL,
 there would be a lot of redundant tests and the code would run more
 slowly.
 
@@ -1458,10 +1458,10 @@
 % description.
 
 
-\section{Writing Extensions in \Cpp{}
+\section{Writing Extensions in \Cpp
          \label{cplusplus}}
 
-It is possible to write extension modules in \Cpp{}.  Some restrictions
+It is possible to write extension modules in \Cpp.  Some restrictions
 apply.  If the main program (the Python interpreter) is compiled and
 linked by the C compiler, global or static objects with constructors
 cannot be used.  This is not a problem if the main program is linked
diff --git a/Doc/ext/unix.tex b/Doc/ext/unix.tex
index 7e6dfd2..396909e 100644
--- a/Doc/ext/unix.tex
+++ b/Doc/ext/unix.tex
@@ -13,7 +13,7 @@
 that reflects various system variables determined by configure when
 the Python interpreter was built, so people building module's don't
 have to resupply these settings.  This vastly simplifies the process
-of building extensions and custom interpreters on Unix systems.
+of building extensions and custom interpreters on \UNIX{} systems.
 
 The make file make file is distributed as the file
 \file{Misc/Makefile.pre.in} in the Python source distribution.  The
diff --git a/Doc/ext/windows.tex b/Doc/ext/windows.tex
index 2068bb9..d42263b 100644
--- a/Doc/ext/windows.tex
+++ b/Doc/ext/windows.tex
@@ -3,7 +3,7 @@
 
 
 This chapter briefly explains how to create a Windows extension module
-for Python using Microsoft Visual \Cpp{}, and follows with more
+for Python using Microsoft Visual \Cpp, and follows with more
 detailed background information on how it works.  The explanatory
 material is useful for both the Windows programmer learning to build
 Python extensions and the \UNIX{} programmer interested in producing
@@ -66,7 +66,7 @@
 loading of code.  Before you try to build a module that can be
 dynamically loaded, be aware of how your system works.
 
-In \UNIX{}, a shared object (\file{.so}) file contains code to be used by the
+In \UNIX, a shared object (\file{.so}) file contains code to be used by the
 program, and also the names of functions and data that it expects to
 find in the program.  When the file is joined to the program, all
 references to those functions and data in the file's code are changed
@@ -80,7 +80,7 @@
 DLL's lookup table, and the lookup table is modified at runtime to
 point to the functions and data.
 
-In \UNIX{}, there is only one type of library file (\file{.a}) which
+In \UNIX, there is only one type of library file (\file{.a}) which
 contains code from several object files (\file{.o}).  During the link
 step to create a shared object file (\file{.so}), the linker may find
 that it doesn't know where an identifier is defined.  The linker will
@@ -99,7 +99,7 @@
 future DLLs that depend on the symbols in the application or DLL.
 
 Suppose you are building two dynamic-load modules, B and C, which should
-share another block of code A.  On \UNIX{}, you would \emph{not} pass
+share another block of code A.  On \UNIX, you would \emph{not} pass
 \file{A.a} to the linker for \file{B.so} and \file{C.so}; that would
 cause it to be included twice, so that B and C would each have their
 own copy.  In Windows, building \file{A.dll} will also build
@@ -109,14 +109,14 @@
 
 In Windows, using an import library is sort of like using \samp{import
 spam}; it gives you access to spam's names, but does not create a
-separate copy.  On \UNIX{}, linking with a library is more like
+separate copy.  On \UNIX, linking with a library is more like
 \samp{from spam import *}; it does create a separate copy.
 
 
 \section{Using DLLs in Practice \label{win-dlls}}
 \sectionauthor{Chris Phoenix}{cphoenix@best.com}
 
-Windows Python is built in Microsoft Visual \Cpp{}; using other
+Windows Python is built in Microsoft Visual \Cpp; using other
 compilers may or may not work (though Borland seems to).  The rest of
 this section is MSV\Cpp{} specific.