diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst
index 0b0e9d3..c76fe60 100644
--- a/Doc/library/argparse.rst
+++ b/Doc/library/argparse.rst
@@ -124,7 +124,9 @@
 ArgumentParser objects
 ----------------------
 
-.. class:: ArgumentParser([description], [epilog], [prog], [usage], [add_help], [argument_default], [parents], [prefix_chars], [conflict_handler], [formatter_class])
+.. class:: ArgumentParser([description], [epilog], [prog], [usage], [add_help], \
+                          [argument_default], [parents], [prefix_chars], \
+                          [conflict_handler], [formatter_class])
 
    Create a new :class:`ArgumentParser` object.  Each parameter has its own more
    detailed description below, but in short they are:
@@ -576,7 +578,9 @@
 The add_argument() method
 -------------------------
 
-.. method:: ArgumentParser.add_argument(name or flags..., [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest])
+.. method:: ArgumentParser.add_argument(name or flags..., [action], [nargs], \
+                           [const], [default], [type], [choices], [required], \
+                           [help], [metavar], [dest])
 
    Define how a single command-line argument should be parsed.  Each parameter
    has its own more detailed description below, but in short they are:
@@ -718,7 +722,7 @@
 
 * ``'version'`` - This expects a ``version=`` keyword argument in the
   :meth:`~ArgumentParser.add_argument` call, and prints version information
-  and exits when invoked.
+  and exits when invoked::
 
     >>> import argparse
     >>> parser = argparse.ArgumentParser(prog='PROG')
@@ -770,8 +774,8 @@
 different number of command-line arguments with a single action.  The supported
 values are:
 
-* ``N`` (an integer).  ``N`` arguments from the command line will be gathered together into a
-  list.  For example::
+* ``N`` (an integer).  ``N`` arguments from the command line will be gathered
+  together into a list.  For example::
 
      >>> parser = argparse.ArgumentParser()
      >>> parser.add_argument('--foo', nargs=2)
@@ -840,7 +844,7 @@
 
 * ``argparse.REMAINDER``.  All the remaining command-line arguments are gathered
   into a list.  This is commonly useful for command line utilities that dispatch
-  to other command line utilities.
+  to other command line utilities::
 
      >>> parser = argparse.ArgumentParser(prog='PROG')
      >>> parser.add_argument('--foo')
@@ -863,7 +867,8 @@
 
 * When :meth:`~ArgumentParser.add_argument` is called with
   ``action='store_const'`` or ``action='append_const'``.  These actions add the
-  ``const`` value to one of the attributes of the object returned by :meth:`~ArgumentParser.parse_args`. See the action_ description for examples.
+  ``const`` value to one of the attributes of the object returned by
+  :meth:`~ArgumentParser.parse_args`. See the action_ description for examples.
 
 * When :meth:`~ArgumentParser.add_argument` is called with option strings
   (like ``-f`` or ``--foo``) and ``nargs='?'``.  This creates an optional
@@ -1539,7 +1544,7 @@
      >>> args.func(args)
      ((XYZYX))
 
-   This way, you can let :meth:`parse_args` does the job of calling the
+   This way, you can let :meth:`parse_args` do the job of calling the
    appropriate function after argument parsing is complete.  Associating
    functions with actions like this is typically the easiest way to handle the
    different actions for each of your subparsers.  However, if it is necessary
@@ -1564,21 +1569,21 @@
    The :class:`FileType` factory creates objects that can be passed to the type
    argument of :meth:`ArgumentParser.add_argument`.  Arguments that have
    :class:`FileType` objects as their type will open command-line arguments as files
-   with the requested modes and buffer sizes:
+   with the requested modes and buffer sizes::
 
-   >>> parser = argparse.ArgumentParser()
-   >>> parser.add_argument('--output', type=argparse.FileType('wb', 0))
-   >>> parser.parse_args(['--output', 'out'])
-   Namespace(output=<open file 'out', mode 'wb' at 0x...>)
+      >>> parser = argparse.ArgumentParser()
+      >>> parser.add_argument('--output', type=argparse.FileType('wb', 0))
+      >>> parser.parse_args(['--output', 'out'])
+      Namespace(output=<open file 'out', mode 'wb' at 0x...>)
 
    FileType objects understand the pseudo-argument ``'-'`` and automatically
    convert this into ``sys.stdin`` for readable :class:`FileType` objects and
-   ``sys.stdout`` for writable :class:`FileType` objects:
+   ``sys.stdout`` for writable :class:`FileType` objects::
 
-   >>> parser = argparse.ArgumentParser()
-   >>> parser.add_argument('infile', type=argparse.FileType('r'))
-   >>> parser.parse_args(['-'])
-   Namespace(infile=<open file '<stdin>', mode 'r' at 0x...>)
+      >>> parser = argparse.ArgumentParser()
+      >>> parser.add_argument('infile', type=argparse.FileType('r'))
+      >>> parser.parse_args(['-'])
+      Namespace(infile=<open file '<stdin>', mode 'r' at 0x...>)
 
 
 Argument groups
