diff options
Diffstat (limited to 'Doc/python.sty')
-rw-r--r-- | Doc/python.sty | 623 |
1 files changed, 623 insertions, 0 deletions
diff --git a/Doc/python.sty b/Doc/python.sty new file mode 100644 index 0000000..73c14b0 --- /dev/null +++ b/Doc/python.sty @@ -0,0 +1,623 @@ +% +% myformat.sty for the Python docummentation [works only with with Latex2e] +% + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{python} + [1998/01/11 LaTeX package (Python manual markup)] + +% The "fncychap" package is used to get the nice chapter headers. The +% .sty file is distributed with Python, so you should not need to disable +% it. You'd also end up with a mixed page style; uglier than stock LaTeX! +% +\RequirePackage[Bjarne]{fncychap}\typeout{Using nice chapter headings.} + + +% for PDF output, use maximal compression +\@ifundefined{pdfannotlink}{ + \let\LinkColor=\relax + \let\NormalColor=\relax +}{% + \input{pdfcolor} + \let\LinkColor=\NavyBlue + \let\NormalColor=\Black + \pdfcompresslevel=9 + \let\OldContentsline=\contentsline + \renewcommand{\contentsline}[3]{% + \OldContentsline{#1}{% + \pdfannotlink attr{/Border [0 0 0]} goto name{page.#3}% + \LinkColor#2\NormalColor% + \pdfendlink% + }{#3}% + } + \let\OldLabel=\label + \renewcommand{\label}[1]{% + \OldLabel{#1}% + {\pdfdest name{label.#1} fit}% + } + % This stuff adds a page.# destination to every PDF page, where # has + % the same formatting as the displayed page number. This doesn't really + % help with the frontmatter, but does fine with the body. + % + % This is *heavily* based on the hyperref package. + % + \def\@begindvi{% + \unvbox \@begindvibox + \@hyperfixhead + \global\let \@begindvi \@hyperfixhead + } + \def\hyperpageanchor{% + \hyper@anchorstart{page.\thepage}\hyper@anchorend + } + \let\HYPERPAGEANCHOR\hyperpageanchor + \def\@hyperfixhead{% + \let\H@old@thehead\@thehead + \gdef\@foo{\pdfdest name{page.\thepage} fit}% + \expandafter\ifx\expandafter\@empty\H@old@thehead + \def\H@old@thehead{\hfil}\fi + \def\@thehead{\@foo\relax\H@old@thehead}% + } +} + +% Increase printable page size (copied from fullpage.sty) +\topmargin 0pt +\advance \topmargin by -\headheight +\advance \topmargin by -\headsep + +% attempt to work a little better for A4 users +\@ifundefined{paperheight}{ + \textheight 9in +}{ + \textheight \paperheight + \advance\textheight by -2in +} + +\oddsidemargin 0pt +\evensidemargin \oddsidemargin +\marginparwidth 0.5in + +\@ifundefined{paperwidth}{ + \textwidth 6.5in +}{ + \textwidth \paperwidth + \advance\textwidth by -2in +} + + +% Style parameters and macros used by most documents here +\raggedbottom +\sloppy +\parindent = 0mm +\parskip = 2mm +\hbadness = 5000 % don't print trivial gripes + +\pagestyle{empty} % start this way; change for +\pagenumbering{roman} % ToC & chapters +\setcounter{secnumdepth}{1} + +% Use this to set the font family for headers and other decor: +\newcommand{\HeaderFamily}{\sffamily} + +% Redefine the 'normal' header/footer style when using "fancyhdr" package: +\@ifundefined{fancyhf}{}{ + % Use \pagestyle{normal} as the primary pagestyle for text. + \fancypagestyle{normal}{ + \fancyhf{} + \fancyfoot[LE,RO]{{\HeaderFamily\thepage}} + \fancyfoot[LO]{{\HeaderFamily\nouppercase{\rightmark}}} + \fancyfoot[RE]{{\HeaderFamily\nouppercase{\leftmark}}} + \renewcommand{\headrulewidth}{0pt} + \renewcommand{\footrulewidth}{0.4pt} + } + % Update the plain style so we get the page number & footer line, + % but not a chapter or section title. This is to keep the first + % page of a chapter and the blank page between chapters `clean.' + \fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[LE,RO]{{\HeaderFamily\thepage}} + \renewcommand{\headrulewidth}{0pt} + \renewcommand{\footrulewidth}{0.4pt} + } + % Redefine \cleardoublepage so that the blank page between chapters + % gets the plain style and not the fancy style. This is described + % in the documentation for the fancyhdr package by Piet von Oostrum. + \renewcommand{\cleardoublepage}{ + \clearpage\if@openright \ifodd\c@page\else + \hbox{} + \thispagestyle{plain} + \newpage + \if@twocolumn\hbox{}\newpage\fi\fi\fi} +} + +% old code font selections: +\let\codefont=\tt +\let\sectcodefont=\tt + +% (Haven't found a new one that gets <, >, and _ right without being +% monospaced.) + + +% This sets up the {verbatim} environment to be indented and a minipage, +% and to have all the other mostly nice properties that we want for +% code samples. + +% Variable used by begin code command +\newlength{\codewidth} + +\newcommand{\examplevspace}{2mm} +\newcommand{\exampleindent}{1cm} + +\let\OldVerbatim=\verbatim +\let\OldEndVerbatim=\endverbatim +\renewcommand{\verbatim}{% + \begingroup% + \setlength{\parindent}\exampleindent% + % Calculate the text width for the minipage: + \setlength{\codewidth}{\linewidth}% + \addtolength{\codewidth}{-\parindent}% + % + \par% + \vspace\examplevspace% + \indent% + \begin{minipage}[t]{\codewidth}% + \small% + \OldVerbatim% +} +\renewcommand{\endverbatim}{% + \OldEndVerbatim% + \end{minipage}% + \endgroup% +} + +% Augment the sectioning commands used to get our own font family in place: +\renewcommand{\section}{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\reset@font\Large\HeaderFamily}} +\renewcommand{\subsection}{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\reset@font\large\HeaderFamily}} +\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\reset@font\normalsize\HeaderFamily}} +\renewcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\reset@font\normalsize\HeaderFamily}} +\renewcommand{\subparagraph}{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\reset@font\normalsize\HeaderFamily}} + + +% Underscore hack (only act like subscript operator if in math mode) +% +% The following is due to Mark Wooding (the old version didn't work with +% Latex 2e. + +\DeclareRobustCommand\hackscore{% + \ifmmode_\else\textunderscore\fi% +} +\begingroup +\catcode`\_\active +\def\next{% + \AtBeginDocument{\catcode`\_\active\def_{\hackscore{}}}% +} +\expandafter\endgroup\next + +% +% This is the old hack, which didn't work with 2e. +% You should not need this since the rest of the documentation is now +% LaTeX2e-only. +% +%\def\_{\ifnum\fam=\ttfamily \char'137\else{\tt\char'137}\fi} +%\catcode`\_=12 +%\catcode`\_=\active\def_{\ifnum\fam=\ttfamily \char'137 \else{\tt\char'137}\fi} + + + +%% Lots of index-entry generation support. + +% Command to wrap around stuff that refers to function / module / +% attribute names in the index. Default behavior: like \code{}. To +% just keep the index entries in the roman font, uncomment the second +% definition to use instead; it matches O'Reilly style more. +% +\newcommand{\idxcode}[1]{\codefont{#1}} +%\renewcommand{\idxcode}[1]{#1} + +% Command to generate two index entries (using subentries) +\newcommand{\indexii}[2]{\index{#1!#2}\index{#2!#1}} + +% And three entries (using only one level of subentries) +\newcommand{\indexiii}[3]{\index{#1!#2 #3}\index{#2!#3, #1}\index{#3!#1 #2}} + +% And four (again, using only one level of subentries) +\newcommand{\indexiv}[4]{ +\index{#1!#2 #3 #4} +\index{#2!#3 #4, #1} +\index{#3!#4, #1 #2} +\index{#4!#1 #2 #3} +} + +% Command to generate a reference to a function, statement, keyword, +% operator. +\newcommand{\stindex}[1]{\indexii{statement}{#1@{\idxcode{#1}}}} +\newcommand{\opindex}[1]{\indexii{operator}{#1@{\idxcode{#1}}}} +\newcommand{\exindex}[1]{\indexii{exception}{#1@{\idxcode{#1}}}} +\newcommand{\obindex}[1]{\indexii{object}{#1}} +\newcommand{\bifuncindex}[1]{\index{#1@{\idxcode{#1()}} (built-in function)}} + +% Add an index entry for a module +\newcommand{\refmodule}[2]{\index{#1@{\idxcode{#1}} (#2module)}} +\newcommand{\refmodindex}[1]{\refmodule{#1}{}} +\newcommand{\refbimodindex}[1]{\refmodule{#1}{built-in }} +\newcommand{\refexmodindex}[1]{\refmodule{#1}{extension }} +\newcommand{\refstmodindex}[1]{\refmodule{#1}{standard }} + +% support for the module index +\newwrite\modindexfile +\openout\modindexfile=mod\jobname.idx + +% Add the defining entry for a module +\newcommand{\defmodindex}[2]{% + \index{#1@{\idxcode{#1}} (#2module)|textbf}% + \setindexsubitem{(in module #1)}% + \write\modindexfile{#1 \thepage}} + +% built-in & Python modules in the main distribution +\newcommand{\bimodindex}[1]{\defmodindex{#1}{built-in }} +\newcommand{\stmodindex}[1]{\defmodindex{#1}{standard }} + +% Python & extension modules outside the main distribution +\newcommand{\modindex}[1]{\defmodindex{#1}{}} +\newcommand{\exmodindex}[1]{\defmodindex{#1}{extension }} + +% Additional string for an index entry +\newcommand{\index@subitem}{} +\newcommand{\setindexsubitem}[1]{\renewcommand{\index@subitem}{#1}} +\newcommand{\ttindex}[1]{\index{#1@{\idxcode{#1}} \index@subitem}} + + +% {fulllineitems} is used in one place in libregex.tex, but is really for +% internal use in this file. +% +\newenvironment{fulllineitems}{ + \begin{list}{}{\labelwidth \leftmargin \labelsep 0pt + \rightmargin 0pt \topsep -\parskip \partopsep \parskip + \itemsep -\parsep + \let\makelabel=\itemnewline} +}{\end{list}} + + +% cfuncdesc should be called as +% \begin{cfuncdesc}{type}{name}{arglist} +% ... description ... +% \end{cfuncdesc} +\newenvironment{cfuncdesc}[3]{% + \begin{fulllineitems}% + \item[\code{#1 \bfcode{#2}(\varvars{#3})}]% + \index{#2@{\idxcode{#2()}}}% +}{\end{fulllineitems}} + +\newenvironment{cvardesc}[2]{% + \begin{fulllineitems}% + \item[\code{#1 \bfcode{#2}}]% + \index{#2@{\idxcode{#2}}}% +}{\end{fulllineitems}} + +\newenvironment{ctypedesc}[1]{% + \begin{fulllineitems}% + \item[\bfcode{#1}]\ttindex{#1} +}{\end{fulllineitems}} + +\newcommand{\funcline}[2]{\funclineni{#1}{#2}\ttindex{#1()}} +\newenvironment{funcdesc}[2]{% + \begin{fulllineitems}% + \funcline{#1}{#2}% +}{\end{fulllineitems}} + +\newcommand{\optional}[1]{% + {\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}} + +% similar to {funcdesc}, but doesn't add to the index +\newcommand{\funclineni}[2]{\item[\code{\bfcode{#1}(\varvars{#2})}]} +\newenvironment{funcdescni}[2]{% + \begin{fulllineitems}% + \funclineni{#1}{#2}% +}{\end{fulllineitems}} + +\newenvironment{classdesc}[2]{% + \begin{fulllineitems}% + \item[\code{\bfcode{#1}(\varvars{#2})}]% + \ttindex{#1}% + \def\baseclasses##1{}% +}{\end{fulllineitems}} + +\newenvironment{excdesc}[1]{% + \begin{fulllineitems}% + \item[\bfcode{#1}]\ttindex{#1}% +}{\end{fulllineitems}} + +\newcommand{\dataline}[1]{\datalineni{#1}\ttindex{#1}} +\newenvironment{datadesc}[1]{% + \begin{fulllineitems}% + \dataline{#1}% +}{\end{fulllineitems}} + +% similar to {datadesc}, but doesn't add to the index +\newcommand{\datalineni}[1]{\item[\bfcode{#1}]} +\newenvironment{datadescni}[1]{% + \begin{fulllineitems}% + \datalineni{#1}% +}{\end{fulllineitems}} + +\newenvironment{opcodedesc}[2]{% + \begin{fulllineitems}% + \item[\bfcode{#1}\quad\var{#2}]% +}{\end{fulllineitems}} + + +\let\nodename=\label + +% For these commands, use \command{} to get the typography right, not +% {\command}. This works better with the texinfo translation. +\newcommand{\ABC}{{\sc abc}} +\newcommand{\UNIX}{{\sc Unix}} +\newcommand{\POSIX}{POSIX} +\newcommand{\ASCII}{{\sc ascii}} +\newcommand{\Cpp}{C\protect\raisebox{.18ex}{++}} +\newcommand{\C}{C} +\newcommand{\EOF}{{\sc eof}} +\newcommand{\NULL}{\code{NULL}} + +% code is the most difficult one... +\newcommand{\code}[1]{{\@vobeyspaces\@noligs\def\{{\char`\{}\def\}{\char`\}}\def\~{\char`\~}\def\^{\char`\^}\def\e{\char`\\}\def\${\char`\$}\def\#{\char`\#}\def\&{\char`\&}\def\%{\char`\%}% +\mbox{\codefont{#1}}}} + +\newcommand{\bfcode}[1]{\code{\bfseries#1}} % bold-faced code font +\newcommand{\kbd}[1]{\mbox{\tt #1}} +\newcommand{\key}[1]{\mbox{\tt #1}} +\newcommand{\samp}[1]{\mbox{`\code{#1}'}} +% This weird definition of \var{} allows it to always appear in roman +% italics, and won't get funky in code fragments when we play around +% with fonts. +\newcommand{\var}[1]{\mbox{\normalsize\textrm{\textit{#1\/}}}} +\renewcommand{\emph}[1]{{\em #1\/}} +\newcommand{\dfn}[1]{\emph{#1}} +\newcommand{\strong}[1]{{\bf #1}} +% let's experiment with a new font: +\newcommand{\file}[1]{\mbox{`\small\textsf{#1}'}} + +% Use this def/redef approach for \url{} since hyperref defined this already, +% but only if we actually used hyperref: +\@ifundefined{pdfannotlink}{% + \newcommand{\pythonurl}[1]{\mbox{\small\textsf{#1}}}% +}{ + \newcommand{\pythonurl}[1]{{% + \pdfannotlink attr{/Border [0 0 0]} user{/S /URI /URI (#1)}% + \LinkColor% color of the link text + \mbox{\small\textsf{#1}}% + \NormalColor% Turn it back off; these are declarative + \pdfendlink}% and don't appear bound to the current + }% formatting "box". +} +\let\url=\pythonurl +\newcommand{\email}[1]{\mbox{\small\textsf{#1}}} + +\newcommand{\varvars}[1]{{\def\,{\/{\char`\,}}\var{#1}}} + +\newif\iftexi\texifalse +\newif\iflatex\latextrue + +% These should be used for all references to identifiers which are +% used to refer to instances of specific language constructs. See the +% names for specific semantic assignments. +% +% For now, don't do anything really fancy with them; just use them as +% logical markup. This might change in the future. +% +\let\module=\code +\let\keyword=\code +\let\exception=\code +\let\class=\code +\let\function=\code +\let\member=\code +\let\method=\code + +\let\cfunction=\code +\let\ctype=\code +\let\cdata=\code + +% constants defined in Python modules or C headers, not language constants: +\let\constant=\code + +\newcommand{\manpage}[2]{{\emph{#1}(#2)}} +\newcommand{\rfc}[1]{RFC #1\index{RFC!RFC #1}} +\newcommand{\program}[1]{\strong{#1}} + + +% Deprecation stuff. +% Should be extended to allow an index / list of deprecated stuff. But +% there's a lot of stuff that needs to be done to make that automatable. +% +% First parameter is the release number that deprecates the feature, the +% second is the action the should be taken by users of the feature. +% +% Example: +% +% \deprecated {1.5.1} +% {Use \method{frobnicate()} instead.} +% +\newcommand{\deprecated}[2]{% + \strong{Deprecated since release #1.} #2\par} + + +\newenvironment{tableii}[4]{% + \begin{center}% + \def\lineii##1##2{\csname#2\endcsname{##1}&##2\\}% + \begin{tabular}{#1}\hline \strong{#3}&\strong{#4} \\ \hline% +}{% + \hline% + \end{tabular}% + \end{center}% +} + +\newenvironment{tableiii}[5]{% + \begin{center}% + \def\lineiii##1##2##3{\csname#2\endcsname{##1}&##2&##3\\}% + \begin{tabular}{#1}\hline \strong{#3}&\strong{#4}&\strong{#5} \\ \hline% +}{% + \hline% + \end{tabular}% + \end{center}% +} + +\newcommand{\itemnewline}[1]{% + \@tempdima\linewidth% + \advance\@tempdima \leftmargin\makebox[\@tempdima][l]{#1}% +} + +\newcommand{\sectcode}[1]{{\sectcodefont{#1}}} + +% Cross-referencing (AMK) +% Sample usage: +% \begin{seealso} +% \seemodule{rand}{Uniform random number generator}; % Module xref +% \seetext{\emph{Encyclopedia Britannica}}. % Ref to a book +% \end{seealso} + +\newenvironment{seealso}[0]{ + \strong{See Also:}\par + % These should only be defined within the {seealso} environment: + \def\seemodule##1##2{\ref{module-##1}:\quad Module \module{##1}\quad (##2)} + \def\seetext##1{\par{##1}} +}{\par} + + +% Fix the theindex environment to add an entry to the Table of +% Contents; this is much nicer than just having to jump to the end of +% the book and flip around, especially with multiple indexes. +% +\let\OldTheindex=\theindex +\renewcommand{\theindex}{ + \cleardoublepage + \OldTheindex + \addcontentsline{toc}{chapter}{\indexname} +} + +% Use a similar trick to catch the end of the {abstract} environment, +% but here make sure the abstract is followed by a blank page if the +% 'openright' option is used. +% +\let\OldEndAbstract=\endabstract +\renewcommand{\endabstract}{ + \if@openright + \ifodd\value{page} + \typeout{Adding blank page after the abstract.} + \vfil\pagebreak + \fi + \fi + \OldEndAbstract +} + +% This wraps the \tableofcontents macro with all the magic to get the +% spacing right and have the right number of pages if the 'openright' +% option has been used. This eliminates a fair amount of crud in the +% individual document files. +% +\let\OldTableofcontents=\tableofcontents +\renewcommand{\tableofcontents}[0]{% + \setcounter{page}{1}% + \pagebreak% + \pagestyle{plain}% + {% + \parskip = 0mm% + \OldTableofcontents% + \if@openright% + \ifodd\value{page}% + \typeout{Adding blank page after the table of contents.}% + \pagebreak\hspace{0pt}% + \fi% + \fi% + }% + \cleardoublepage% + \pagenumbering{arabic}% + \@ifundefined{fancyhf}{}{\pagestyle{normal}}% +} + +% Allow the release number to be specified independently of the +% \date{}. This allows the date to reflect the document's date and +% release to specify the Python release that is documented. +% +\newcommand{\@release}{} +\newcommand{\version}{} +\newcommand{\releasename}{Release} +\newcommand{\release}[1]{% + \renewcommand{\@release}{\releasename\space\version}% + \renewcommand{\version}{#1}} + +% Allow specification of the author's address separately from the +% author's name. This can be used to format them differently, which +% is a good thing. +% +\newcommand{\@authoraddress}{} +\newcommand{\authoraddress}[1]{\renewcommand{\@authoraddress}{#1}} + +% Change the title page to look a bit better, and fit in with the +% fncychap ``Bjarne'' style a bit better. +% +\renewcommand{\maketitle}{% + \begin{titlepage}% + \let\footnotesize\small + \let\footnoterule\relax + \@ifundefined{ChTitleVar}{}{% + \mghrulefill{\RW}}% + \@ifundefined{pdfinfo}{}{ + \pdfinfo + author {\@author} + title {\@title} + } + \begin{flushright}% + {\rm\Huge\HeaderFamily \@title \par}% + {\em\LARGE\HeaderFamily \@release \par} + \vfill + {\LARGE\HeaderFamily \@author \par} + \vfill\vfill + {\large + \@date \par + \vskip 3em + \@authoraddress \par + }% + \end{flushright}%\par + \@thanks + \end{titlepage}% + \setcounter{footnote}{0}% + \let\thanks\relax\let\maketitle\relax + \gdef\@thanks{}\gdef\@author{}\gdef\@title{} +} + +% This sets up the fancy chapter headings that make the documents look +% at least a little better than the usual LaTeX output. +% +\@ifundefined{ChTitleVar}{}{ + \ChNameVar{\raggedleft\normalsize\HeaderFamily} + \ChNumVar{\raggedleft \bfseries\Large\HeaderFamily} + \ChTitleVar{\raggedleft \rm\Huge\HeaderFamily} + % This creates chapter heads without the leading \vspace*{}: + \def\@makechapterhead#1{% + {\parindent \z@ \raggedright \normalfont + \ifnum \c@secnumdepth >\m@ne + \DOCH + \fi + \interlinepenalty\@M + \DOTI{#1} + } + } + \typeout{Using fancy chapter headings.} +} + +% Tell TeX about pathological hyphenation cases: +\hyphenation{Base-HTTP-Re-quest-Hand-ler} |