mirror of https://github.com/python/cpython
New document: "Documenting Python".
This commit is contained in:
parent
1d8f07acbd
commit
acffaee46e
|
@ -0,0 +1,644 @@
|
|||
\documentclass{howto}
|
||||
\usepackage{ltxmarkup}
|
||||
|
||||
\title{Documenting Python}
|
||||
|
||||
\input{boilerplate}
|
||||
|
||||
% Now override the stuff that includes author information:
|
||||
|
||||
\author{Fred L. Drake, Jr.}
|
||||
\authoraddress{
|
||||
Corporation for National Research Initiatives (CNRI) \\
|
||||
1895 Preston White Drive, Reston, Va 20191, USA \\
|
||||
E-mail: \email{fdrake@acm.org}
|
||||
}
|
||||
\date{\today}
|
||||
|
||||
|
||||
\begin{document}
|
||||
|
||||
\maketitle
|
||||
|
||||
\begin{abstract}
|
||||
\noindent
|
||||
The Python language documentation has a substantial body of
|
||||
documentation, much of it contributed by various authors. The markup
|
||||
used for the Python documentation is based on \LaTeX{} and requires a
|
||||
significant set of macros written specifically for documenting Python.
|
||||
Maintaining the documentation requires substantial effort, in part
|
||||
because selecting the correct markup to use is not always easy.
|
||||
|
||||
This document describes the document classes and special markup used
|
||||
in the Python documentation. Authors may use this guide, in
|
||||
conjunction with the template files provided with the
|
||||
distribution, to create or maintain whole documents or sections.
|
||||
\end{abstract}
|
||||
|
||||
\tableofcontents
|
||||
|
||||
|
||||
\section{Introduction}
|
||||
|
||||
Python's documentation has long been considered to be good for a
|
||||
free programming language. There are a number of reasons for this,
|
||||
the most important being the early commitment of Python's creator,
|
||||
Guido van Rossum, to providing documentation on the language and its
|
||||
libraries, and the continuing involvement of the user community in
|
||||
providing assistance for creating and maintaining documentation.
|
||||
|
||||
The involvement of the community takes many forms, from authoring to
|
||||
bug reports to just plain complaining when aspects of the
|
||||
documentation could be easier to use. All of these forms of input
|
||||
from the community have proved useful during the time I've been
|
||||
involved in maintaining the documentation.
|
||||
|
||||
[Who is this document for?]
|
||||
|
||||
[What does it cover?]
|
||||
|
||||
\section{Directory Structure}
|
||||
|
||||
The source distribution for the standard Python documentation
|
||||
contains a large number of directories. While third-party documents
|
||||
do not need to be placed into this structure or need to be placed
|
||||
within a similar structure, it can be helpful to know where to look
|
||||
for examples and tools when developing new documents using the
|
||||
Python documentation tools. This section describes this directory
|
||||
structure.
|
||||
|
||||
The documentation sources are usually placed within the Python
|
||||
source distribution as the top-level subdirectory \file{Doc/}, but
|
||||
is independent of the Python source distribution.
|
||||
|
||||
The \file{Doc/} directory contains a few files and several
|
||||
subdirectories. The files are mostly self-explanatory, including a
|
||||
\file{README} and a \file{Makefile}. The directories fall into
|
||||
three categories:
|
||||
|
||||
\begin{definitions}
|
||||
\term{Document Sources}
|
||||
The \LaTeX{} sources for each document are placed in a
|
||||
separate directory. These directories are given short,
|
||||
three-character names.
|
||||
|
||||
\term{Format-Specific Output}
|
||||
Most output formats have a directory provided which contains a
|
||||
\file{Makefile} which controls the generation of that format
|
||||
and provides storage for the formatted documents. The only
|
||||
variation within this category is the Portable Document Format
|
||||
(PDF) and PostScript versions are placed in the directories
|
||||
\file{paper-a4/} and \file{paper-letter/}.
|
||||
|
||||
\term{Supplemental Files}
|
||||
Some additional directories are used to store supplemental
|
||||
files used for the various processes. Directories are
|
||||
included for the shared \LaTeX{} document classes, the
|
||||
\LaTeX2HTML support, template files for various document
|
||||
components, and the scripts used to perform various steps in
|
||||
the formatting processes.
|
||||
\end{definitions}
|
||||
|
||||
\section{Document Classes}
|
||||
|
||||
Two \LaTeX{} document classes are defined specifically for use with
|
||||
the Python documentation. The \code{manual} class is for large
|
||||
documents which are sectioned into chapters, and the \code{howto}
|
||||
class is for smaller documents.
|
||||
|
||||
The \code{manual} documents are larger and are used for most of the
|
||||
standard documents. This document class is based on the standard
|
||||
\LaTeX{} \code{report} class and is formatted very much like a long
|
||||
technical report.
|
||||
|
||||
The \code{howto} documents are shorter, and don't have the large
|
||||
structure of the \code{manual} documents. This class is based on
|
||||
the standard \LaTeX{} \code{article} class and is formatted somewhat
|
||||
like the Linux Documentation Project's ``HOWTO'' series as done
|
||||
originally using the LinuxDoc software. The original intent for the
|
||||
document class was that it serve a similar role as the LDP's HOWTO
|
||||
series, but the applicability of the class turns out to be somewhat
|
||||
more broad. This class is used for ``how-to'' documents (this
|
||||
document is an example) and for shorter reference manuals for small,
|
||||
fairly cohesive module libraries. Examples of the later use include
|
||||
the standard \emph{Macintosh Library Modules} and \emph{Using
|
||||
Kerberos from Python}, which contains reference material for an
|
||||
extension package. These documents are roughly equivalent to a
|
||||
single chapter from a larger work.
|
||||
|
||||
|
||||
\section{Python-specific Markup}
|
||||
|
||||
\subsection{Information Units \label{info-units}}
|
||||
|
||||
Most of the environments should be described here: \env{excdesc},
|
||||
\env{funcdesc}, etc.
|
||||
|
||||
\begin{envdesc}{datadesc}{\{\var{name}\}}
|
||||
\end{envdesc}
|
||||
\begin{envdesc}{datadesc}{\{\var{name}\}}
|
||||
Like \env{datadesc}, but without creating any index entries.
|
||||
\end{envdesc}
|
||||
|
||||
\begin{envdesc}{excdesc}{\{\var{name}\}}
|
||||
Describe an exception. This may be either a string exception or
|
||||
a class exception.
|
||||
\end{envdesc}
|
||||
|
||||
\begin{envdesc}{funcdesc}{\{\var{name}\}\{\var{parameter list}\}}
|
||||
\end{envdesc}
|
||||
\begin{envdesc}{funcdescni}{\{\var{name}\}\{\var{parameter list}\}}
|
||||
Like \env{funcdesc}, but without creating any index entries.
|
||||
\end{envdesc}
|
||||
|
||||
\begin{envdesc}{classdesc}{\{\var{name}\}\{\var{constructor parameter list}\}}
|
||||
\end{envdesc}
|
||||
|
||||
\begin{envdesc}{memberdesc}{\{\var{name}\}}
|
||||
\end{envdesc}
|
||||
\begin{envdesc}{memberdescni}{\{\var{name}\}}
|
||||
Like \env{memberdesc}, but without creating any index entries.
|
||||
\end{envdesc}
|
||||
|
||||
\begin{envdesc}{methoddesc}{{[}\var{class name}{]}\{\var{name}\}\{\var{parameter list}\}}
|
||||
\end{envdesc}
|
||||
\begin{envdesc}{methoddescni}{{[}\var{class name}{]}\{\var{name}\}\{\var{parameter list}\}}
|
||||
Like \env{methoddesc}, but without creating any index entries.
|
||||
\end{envdesc}
|
||||
|
||||
|
||||
\subsection{Inline Markup}
|
||||
|
||||
This is where to explain \macro{code}, \macro{function},
|
||||
\macro{email}, etc.
|
||||
|
||||
|
||||
\subsection{Module-specific Markup}
|
||||
|
||||
The markup described in this section is used to provide information
|
||||
about a module being documented. A typical use of this markup
|
||||
appears at the top of the section used to document a module. A
|
||||
typical example might look like this:
|
||||
|
||||
\begin{verbatim}
|
||||
\section{\module{spam} ---
|
||||
Access to the SPAM facility}
|
||||
|
||||
\declaremodule{extension}{spam}
|
||||
\platform{SomeOS}
|
||||
\modulesynopsis{Access to the SPAM facility of SomeOS.}
|
||||
\moduleauthor{John Doe}{john.doe@frobnication.org}
|
||||
\end{verbatim}
|
||||
|
||||
\begin{macrodesc}{declaremodule}{{[}\var{key}{]}\{\var{type}\}\{\var{name}\}}
|
||||
Requires two parameters: module type (standard, builtin,
|
||||
extension), and the module name. An optional parameter should be
|
||||
given as the basis for the module's ``key'' used for linking to or
|
||||
referencing the section. The ``key'' should only be given if the
|
||||
module's name contains underscores, and should be the name with the
|
||||
underscore's stripped. This should be the first thing after the
|
||||
\macro{section} used to introduce the module.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{platform}{\{\var{specifier}\}}
|
||||
Specifies the portability of the module. \var{specifier} is a
|
||||
comma-separated list of keys that specify what platforms the
|
||||
module is available on. The keys are short identifiers;
|
||||
examples that are in use include \samp{IRIX}, \samp{Mac},
|
||||
\samp{Windows}, and \samp{Unix}. It is important to use a key
|
||||
which has already been used when applicable.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{modulesynopsis}{\{\var{text}\}}
|
||||
The \var{text} is a short, ``one line'' description of the
|
||||
module that can be used as part of the chapter introduction.
|
||||
This is typically placed just after \macro{declaremodule}.
|
||||
The synopsis is used in building the contents of the table
|
||||
inserted as the \macro{localmoduletable}. No text is
|
||||
produced at the point of the markup.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{moduleauthor}{\{\var{name}\}\{\var{email}\}}
|
||||
This macro is used to encode information about who authored a
|
||||
module. This is currently not used to generate output, but can be
|
||||
used to help determine the origin of the module.
|
||||
\end{macrodesc}
|
||||
|
||||
|
||||
\subsection{Library-level Markup}
|
||||
|
||||
This markup is used when describing a selection of modules. For
|
||||
example, the \emph{Macintosh Library Modules} document uses this
|
||||
to help provide an overview of the modules in the collection, and
|
||||
many chapters in the \emph{Python Library Reference} use it for
|
||||
the same purpose.
|
||||
|
||||
\begin{macrodesc}{localmoduletable}{}
|
||||
No parameters. If a \file{.syn} file exists for the current
|
||||
chapter (or for the entire document in \code{howto} documents), a
|
||||
\env{synopsistable} is created with the contents loaded from the
|
||||
\file{.syn} file.
|
||||
\end{macrodesc}
|
||||
|
||||
|
||||
\subsection{Table Markup}
|
||||
|
||||
There are three general-purpose table environments defined which
|
||||
should be used whenever possible. These environments are defined
|
||||
to provide tables of specific widths and some convenience for
|
||||
formatting. These environments are not meant to be general
|
||||
replacements for the standard \LaTeX{} table environments, but can
|
||||
be used for an advantage when the documents are processed using
|
||||
the tools for Python documentation processing. In particular, the
|
||||
generated HTML looks good! There is also an advantage for the
|
||||
eventual conversion of the documentation to SGML; see Section
|
||||
\ref{futures}, ``Future Directions.''
|
||||
|
||||
Each environment is named \env{table\var{cols}}, where \var{cols}
|
||||
is the number of columns in the table specified in lower-case
|
||||
Roman numerals. Within each of these environments, an additional
|
||||
macro, \macro{line\var{cols}}, is defined, where \var{cols}
|
||||
matches the \var{cols} value of the corresponding table
|
||||
environment. These environments are all built on top of the
|
||||
\env{tabular} environment.
|
||||
|
||||
\begin{envdesc}{tableii}{\{\var{colspec}\}\{\var{col1font}\}\{\var{heading1}\}\{\var{heading2}\}}
|
||||
Create a two-column table using the \LaTeX{} column specifier
|
||||
\var{colspec}. The column specifier should indicate vertical
|
||||
bars between columns as appropriate for the specific table, but
|
||||
should not specify vertical bars on the outside of the table
|
||||
(that is considered a stylesheet issue). The \var{col1font}
|
||||
parameter is used as a stylistic treatment of the first column
|
||||
of the table: the first column is presented as
|
||||
\code{\e\var{col1font}\{column1\}}. To avoid treating the first
|
||||
column specially, \var{col1font} may be \code{textrm}. The
|
||||
column headings are taken from the values \var{heading1} and
|
||||
\var{heading2}.
|
||||
\end{envdesc}
|
||||
|
||||
\begin{macrodesc}{lineii}{\{\var{column1}\}\{\var{column2}\}}
|
||||
Create a single table row within a \env{tableii} environment.
|
||||
The text for the first column will be generated by applying the
|
||||
macro named by the \var{col1font} value when the \env{tableii}
|
||||
was opened.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{envdesc}{tableiii}{\{\var{colspec}\}\{\var{col1font}\}\{\var{heading1}\}\{\var{heading2}\}\{\var{heading3}\}}
|
||||
Like the \env{tableii} environment, but with a third column.
|
||||
The heading for the third column is given by \var{heading3}.
|
||||
\end{envdesc}
|
||||
|
||||
\begin{macrodesc}{lineiii}{\{\var{column1}\}\{\var{column2}\}\{\var{column3}\}}
|
||||
Like the \macro{lineii} macro, but with a third column. The
|
||||
text for the third column is given by \var{column3}.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{envdesc}{tableiv}{\{\var{colspec}\}\{\var{col1font}\}\{\var{heading1}\}\{\var{heading2}\}\{\var{heading3}\}\{\var{heading4}\}}
|
||||
Like the \env{tableiii} environment, but with a fourth column.
|
||||
The heading for the fourth column is given by \var{heading4}.
|
||||
\end{envdesc}
|
||||
|
||||
\begin{macrodesc}{lineiv}{\{\var{column1}\}\{\var{column2}\}\{\var{column3}\}\{\var{column4}\}}
|
||||
Like the \macro{lineiii} macro, but with a fourth column. The
|
||||
text for the fourth column is given by \var{column4}.
|
||||
\end{macrodesc}
|
||||
|
||||
|
||||
An additional table-like environment is \env{synopsistable}. The
|
||||
table generated by this environment contains two columns, and each
|
||||
row is defined by an alternate definition of
|
||||
\macro{modulesynopsis}. This environment is not normally use by
|
||||
the user, but is created by the \macro{localmoduletable} macro.
|
||||
|
||||
|
||||
\subsection{Reference List Markup \label{references}}
|
||||
|
||||
Many sections include a list of references to module documentation
|
||||
or external documents. These lists are created using the
|
||||
\env{seealso} environment. This environment defines some
|
||||
additional macros to support creating reference entries in a
|
||||
reasonable manner.
|
||||
|
||||
\begin{envdesc}{seealso}{}
|
||||
This environment creates a ``See also:'' heading and defines the
|
||||
markup used to describe individual references.
|
||||
\end{envdesc}
|
||||
|
||||
\begin{macrodesc}{seemodule}{{[}\var{key}{]}\{\var{name}\}\{\var{why}\}}
|
||||
Refer to another module. \var{why} should be a brief
|
||||
explanation of why the reference may be interesting. The module
|
||||
name is given in \var{name}, with the link key given in
|
||||
\var{key} if necessary. In the HTML and PDF conversions, the
|
||||
module name will be a hyperlink to the referred-to module.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{seetext}{\{\var{text}\}}
|
||||
Add arbitrary text \var{text} to the ``See also:'' list. This
|
||||
can be used to refer to off-line materials or on-line materials
|
||||
using the \macro{url} macro.
|
||||
\end{macrodesc}
|
||||
|
||||
|
||||
\subsection{Index-generating Markup \label{indexing}}
|
||||
|
||||
Effective index generation for technical documents can be very
|
||||
difficult, especially for someone familliar with the topic but not
|
||||
the creation of indexes. Much of the difficulty arises in the
|
||||
area of terminology: including the terms an expert would use for a
|
||||
concept is not sufficient. Coming up with the terms that a novice
|
||||
would look up is fairly difficult for an author who, hopefully, is
|
||||
an expert in the area she is writing on.
|
||||
|
||||
The truly difficult aspects of index generation are not something
|
||||
which the documentation tools can help with, unfortunately. Ease
|
||||
of producing the index once content decisions are make is within
|
||||
the scope of the tools. Markup is provided which the processing
|
||||
software is able to use to generate a variety of kinds of index
|
||||
entry with minimal effort. Additionally, many of the environments
|
||||
described in Section \ref{info-units}, ``Information Units,'' will
|
||||
generate appropriate entries into the general and module indexes.
|
||||
|
||||
The following macro can be used to control the generation of index
|
||||
data, and should be used in the document prologue:
|
||||
|
||||
\begin{macrodesc}{makemodindex}{}
|
||||
This should be used in the document prologue if a ``Module
|
||||
Index'' is desired for a document containing reference material
|
||||
on many modules. This causes a data file
|
||||
\code{lib\macro{jobname}.idx} to be created from the
|
||||
\macro{declaremodule} macros. This file can be processed by the
|
||||
\program{makeindex} program to generate a file which can be
|
||||
\macro{input} into the document at the desired location of the
|
||||
module index.
|
||||
\end{macrodesc}
|
||||
|
||||
There are a number of macros that are useful for adding index
|
||||
entries for particular concepts, many of which are specific to
|
||||
programming languages or even Python.
|
||||
|
||||
\begin{macrodesc}{bifuncindex}{\{\var{name}\}}
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{exindex}{\{\var{exception}\}}
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{kwindex}{\{\var{keyword}\}}
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{obindex}{\{\var{object type}\}}
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{opindex}{\{\var{operator}\}}
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{refmodindex}{{[}\var{key}{]}\{\var{module}\}}
|
||||
Add an index entry for module \var{module}; if \var{module}
|
||||
contains an underscore, the optional parameter \var{key} should
|
||||
be provided as the same string with underscores removed. An
|
||||
index entry ``\var{module} (module)'' will be generated. This
|
||||
is intended for use with non-standard modules implemented in
|
||||
Python.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{refexmodindex}{{[}\var{key}{]}\{\var{module}\}}
|
||||
As for \macro{refmodindex}, but the index entry will be
|
||||
``\var{module} (extension module).'' This is intended for use
|
||||
with non-standard modules not implemented in Python.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{refbimodindex}{{[}\var{key}{]}\{\var{module}\}}
|
||||
As for \macro{refmodindex}, but the index entry will be
|
||||
``\var{module} (built-in module).'' This is intended for use
|
||||
with standard modules not implemented in Python.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{refstmodindex}{{[}\var{key}{]}\{\var{module}\}}
|
||||
As for \macro{refmodindex}, but the index entry will be
|
||||
``\var{module} (standard module).'' This is intended for use
|
||||
with standard modules implemented in Python.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{stindex}{\{\var{statement}\}}
|
||||
\end{macrodesc}
|
||||
|
||||
|
||||
Additional macros are provided which are useful for conveniently
|
||||
creating general index entries which should appear at many places
|
||||
in the index by rotating a list of words. These are simple macros
|
||||
that simply use \macro{index} to build some number of index
|
||||
entries. Index entries build using these macros contain both
|
||||
primary and secondary text.
|
||||
|
||||
\begin{macrodesc}{indexii}{\{\var{word1}\}\{\var{word2}\}}
|
||||
Build two index entries. This is exactly equivalent to using
|
||||
\code{\e index\{\var{word1}!\var{word2}\}} and
|
||||
\code{\e index\{\var{word2}!\var{word1}\}}.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{indexiii}{\{\var{word1}\}\{\var{word2}\}\{\var{word3}\}}
|
||||
Build three index entries. This is exactly equivalent to using
|
||||
\code{\e index\{\var{word1}!\var{word2} \var{word3}\}},
|
||||
\code{\e index\{\var{word2}!\var{word3}, \var{word1}\}}, and
|
||||
\code{\e index\{\var{word3}!\var{word1} \var{word2}\}}.
|
||||
\end{macrodesc}
|
||||
|
||||
\begin{macrodesc}{indexiv}{\{\var{word1}\}\{\var{word2}\}\{\var{word3}\}\{\var{word4}\}}
|
||||
Build four index entries. This is exactly equivalent to using
|
||||
\code{\e index\{\var{word1}!\var{word2} \var{word3} \var{word4}\}},
|
||||
\code{\e index\{\var{word2}!\var{word3} \var{word4}, \var{word1}\}},
|
||||
\code{\e index\{\var{word3}!\var{word4}, \var{word1} \var{word2}\}},
|
||||
and
|
||||
\code{\e index\{\var{word4}!\var{word1} \var{word2} \var{word3}\}}.
|
||||
\end{macrodesc}
|
||||
|
||||
|
||||
\section{Special Names}
|
||||
|
||||
Many special names are used in the Python documentation, including
|
||||
the names of operating systems, programming languages, standards
|
||||
bodies, and the like. Many of these were assigned \LaTeX{} macros
|
||||
at some point in the distant past, and these macros lived on long
|
||||
past their usefulness. In the current markup, these entities are
|
||||
not assigned any special markup, but the preferred spellings are
|
||||
given here to aid authors in maintaining the consistency of
|
||||
presentation in the Python documentation.
|
||||
|
||||
\begin{description}
|
||||
\item[POSIX]
|
||||
The name assigned to a particular group of standards. This is
|
||||
always uppercase.
|
||||
|
||||
\item[Python]
|
||||
The name of our favorite programming language is always
|
||||
capitalized.
|
||||
\end{description}
|
||||
|
||||
|
||||
\section{Processing Tools}
|
||||
|
||||
\subsection{External Tools}
|
||||
|
||||
Many tools are needed to be able to process the Python
|
||||
documentation if all supported formats are required. This
|
||||
section lists the tools used and when each is required.
|
||||
|
||||
\begin{description}
|
||||
\item[\program{dvips}]
|
||||
This program is a typical part of \TeX{} installations. It is
|
||||
used to generate PostScript from the ``device independent''
|
||||
\file{.dvi} files. It is only needed for the conversion to
|
||||
PostScript.
|
||||
|
||||
\item[\program{emacs}]
|
||||
Emacs is the kitchen sink of programmers' editors, and a damn
|
||||
fine kitchen sink it is. It also comes with some of the
|
||||
processing needed to support the proper menu structures for
|
||||
Texinfo documents when an info conversion is desired. This is
|
||||
only needed for the info conversion. Using \program{xemacs}
|
||||
instead of FSF \program{emacs} may lead to instability in the
|
||||
conversion, but that's because nobody seems to maintain the
|
||||
Emacs Texinfo code in a portable manner.
|
||||
|
||||
\item[\program{latex}]
|
||||
This is a world-class typesetter by Donald Knuth. It is used
|
||||
for the conversion to PostScript, and is needed for the HTML
|
||||
conversion as well (\LaTeX2HTML requires one of the
|
||||
intermediate files it creates).
|
||||
|
||||
\item[\program{latex2html}]
|
||||
Probably the longest Perl script anyone ever attempted to
|
||||
maintain. This converts \LaTeX{} documents to HTML documents,
|
||||
and does a pretty reasonable job. It is required for the
|
||||
conversions to HTML and GNU info.
|
||||
|
||||
\item[\program{lynx}]
|
||||
This is a text-mode Web browser which includes an
|
||||
HTML-to-plain text conversion. This is used to convert
|
||||
\code{howto} documents to text.
|
||||
|
||||
\item[\program{make}]
|
||||
Just about any version should work for the standard documents,
|
||||
but GNU \program{make} is required for the experimental
|
||||
processes in \file{Doc/tools/sgmlconv/}, at least while
|
||||
they're experimental.
|
||||
|
||||
\item[\program{makeindex}]
|
||||
This is a standard program for converting \LaTeX{} index data
|
||||
to a formatted index; it should be included with all \LaTeX{}
|
||||
installations. It is needed for the PDF and PostScript
|
||||
conversions.
|
||||
|
||||
\item[\program{makeinfo}]
|
||||
GNU \program{makeinfo} is used to convert Texinfo documents to
|
||||
GNU info files. Since Texinfo is used as an intermediate
|
||||
format in the info conversion, this program is needed in that
|
||||
conversion.
|
||||
|
||||
\item[\program{pdflatex}]
|
||||
pdf\TeX{} is a relatively new variant of \TeX, and is used to
|
||||
generate the PDF version of the manuals. It is typically
|
||||
installed as part of most of the large \TeX{} distributions.
|
||||
\program{pdflatex} is PDF\TeX{} using the \LaTeX{} format.
|
||||
|
||||
\item[\program{perl}]
|
||||
Perl is required for \LaTeX2HTML{} and one of the scripts used
|
||||
to post-process \LaTeX2HTML output, as well as the
|
||||
HTML-to-Texinfo conversion. This is only required for
|
||||
the HTML and GNU info conversions.
|
||||
|
||||
\item[\program{python}]
|
||||
Python is used for many of the scripts in the
|
||||
\file{Doc/tools/} directory; it is required for all
|
||||
conversions. This shouldn't be a problem if you're interested
|
||||
in writing documentation for Python!
|
||||
\end{description}
|
||||
|
||||
|
||||
\subsection{Internal Tools}
|
||||
|
||||
This section describes the various scripts that are used to
|
||||
implement various stages of document processing or to orchestrate
|
||||
entire build sequences. Most of these tools are still only useful
|
||||
in the context of building the standard documentation, but some
|
||||
are more general.
|
||||
|
||||
\begin{description}
|
||||
\item[\program{mkhowto}]
|
||||
\end{description}
|
||||
|
||||
|
||||
\section{Future Directions \label{futures}}
|
||||
|
||||
The history of the Python documentation is full of changes, most of
|
||||
which have been fairly small and evolutionary. There has been a
|
||||
great deal of discussion about making large changes in the markup
|
||||
languages and tools used to process the documentation. This section
|
||||
deals with the nature of the changes and what appears to be the most
|
||||
likely path of future development.
|
||||
|
||||
\subsection{Structured Documentation \label{structured}}
|
||||
|
||||
Most of the small changes to the \LaTeX{} markup have been made
|
||||
with an eye to divorcing the markup from the presentation, making
|
||||
both a bit more maintainable. Over the course of 1998, a large
|
||||
number of changes were made with exactly this in mind; previously,
|
||||
changes had been made but in a less systematic manner and with
|
||||
more concern for not needing to update the existing content. The
|
||||
result has been a highly structured and semantically loaded markup
|
||||
language implemented in \LaTeX. With almost no basic \TeX{} or
|
||||
\LaTeX{} markup in use, however, the markup syntax is about the
|
||||
only evidence of \LaTeX{} in the actual document sources.
|
||||
|
||||
One side effect of this is that while we've been able to use
|
||||
standard ``engines'' for manipulating the documents, such as
|
||||
\LaTeX{} and \LaTeX2HTML, most of the actual transformations have
|
||||
been created specifically for this documentation. The \LaTeX{}
|
||||
document classes and \LaTeX2HTML support are both complete
|
||||
implementations of the specific markup designed for these
|
||||
documents.
|
||||
|
||||
Combining highly customized markup with the somewhat esoteric
|
||||
systems used to process the documents leads us to ask some
|
||||
questions: Can we do this more easily? and, Can we do this
|
||||
better? After a great deal of discussion with the community, we
|
||||
have determined that actively pursuing modern structured
|
||||
documentation systems worth some investment of time.
|
||||
|
||||
There appear to be two real contenders in this arena: the Standard
|
||||
General Markup Language (SGML), and the Extensible Markup Language
|
||||
(XML). Both of these standards have advantages and disadvantages,
|
||||
and many advantages are shared.
|
||||
|
||||
SGML offers advantages which may appeal most to authors,
|
||||
especially those using ordinary text editors. There are also
|
||||
additional abilities to define content models. A number of
|
||||
high-quality tools with demonstrated maturity is available, but
|
||||
most are not free; for those which are, portability issues remain
|
||||
a problem.
|
||||
|
||||
The advantages of XML include the availability of a large number
|
||||
of evolving tools. Unfortunately, many of the associated
|
||||
standards are still evolving, and the tools will have to follow
|
||||
along. This means that developing a robust tool set that uses
|
||||
more than the basic XML 1.0 recommendation is not possible in the
|
||||
short term. The promised availability of a wide variety of
|
||||
high-quality tools which support some of the most important
|
||||
related standards is not immediate. Many tools are likely to be
|
||||
free.
|
||||
|
||||
[Eventual migration to SGML/XML.]
|
||||
|
||||
\subsection{Discussion Forums \label{discussion}}
|
||||
|
||||
Discussion of the future of the Python documentation and related
|
||||
topics takes place in the ``Doc-SIG'' special interest group.
|
||||
Information on the group, including mailing list archives and
|
||||
subscriptions, is available at
|
||||
\url{http://www.python.org/sigs/doc-sig/}. The SIG is open to all
|
||||
interested parties.
|
||||
|
||||
Comments and bug reports on the standard documents should be sent
|
||||
to \email{python-docs@python.org}. This may include comments
|
||||
about formatting, content, or grammatical errors.
|
||||
|
||||
\end{document}
|
Loading…
Reference in New Issue