2 % python.sty for the Python docummentation [works only with with Latex2e]
5 \NeedsTeXFormat{LaTeX2e
}[1995/
12/
01]
6 \ProvidesPackage{python
}
7 [1998/
01/
11 LaTeX package (Python markup)
]
9 % Uncomment these two lines to ignore the paper size and make the page
10 % size more like a typical published manual.
11 %\renewcommand{\paperheight}{9in}
12 %\renewcommand{\paperwidth}{8.5in} % typical squarish manual
13 %\renewcommand{\paperwidth}{7in} % O'Reilly ``Programmming Python''
15 % These packages can be used to add marginal annotations which indicate
16 % index entries and labels; useful for reviewing this messy documentation!
18 %\RequirePackage{showkeys}
19 %\RequirePackage{showidx}
21 % for PDF output, use maximal compression & a lot of other stuff
22 % (test for PDF recommended by Tanmoy Bhattacharya <tanmoy@qcd.lanl.gov>)
24 \newif\ifpy@doing@page@targets
25 \py@doing@page@targetsfalse
27 \ifx\pdfoutput\undefined\else\ifcase\pdfoutput
30 \let\py@LinkColor=
\NavyBlue
31 \let\py@NormalColor=
\Black
33 \pdfpagewidth=
\paperwidth % page width of PDF output
34 \pdfpageheight=
\paperheight % page height of PDF output
36 % Pad the number with '0' to 3 digits wide so no page name is a prefix
39 \newcommand{\py@targetno
}[1]{\ifnum#1<
100 0\fi\ifnum#1<
10 0\fi#1}
40 \newcommand{\py@pageno
}{\py@targetno
\thepage}
42 % This definition allows the entries in the page-view of the ToC to be
43 % active links. Some work, some don't.
45 \let\py@OldContentsline=
\contentsline
47 % Macro that takes two args: the name to link to and the content of
48 % the link. This takes care of the PDF magic, getting the colors
49 % the same for each link, and avoids having lots of garbage all over
51 \newcommand{\py@linkToName
}[2]{%
52 \pdfannotlink attr
{/Border
[0 0 0]} goto name
{#1}%
53 \py@LinkColor
#2\py@NormalColor
%
56 % Compute the padded page number separately since we end up with a pair of
57 % \relax tokens; this gets the right string computed and works.
58 \renewcommand{\contentsline}[3]{%
59 \def\my@pageno
{\py@targetno
{#3}}%
60 \py@OldContentsline
{#1}{\py@linkToName
{page
\my@pageno
}{#2}}{#3}%
63 \InputIfFileExists{\jobname.bkm
}{\pdfcatalog{/PageMode /UseOutlines
}}{}
65 \newcommand{\py@target
}[1]{%
66 \ifpy@doing@page@targets
%
67 {\pdfdest name
{#1} xyz
}%
70 \let\py@OldLabel=
\label
71 \renewcommand{\label}[1]{%
75 % This stuff adds a page# destination to every PDF page, where # is three
76 % digits wide, padded with leading zeros. This doesn't really help with
77 % the frontmatter, but does fine with the body.
79 % This is *heavily* based on the hyperref package.
86 \let\H@old@thehead\@thehead
87 \global\def\@foo
{\py@target
{page
\py@pageno
}}%
88 \expandafter\ifx\expandafter\@empty
\H@old@thehead
89 \def\H@old@thehead
{\hfil}\fi
90 \def\@thehead
{\@foo
\relax\H@old@thehead
}%
94 % Increase printable page size (copied from fullpage.sty)
96 \advance \topmargin by -
\headheight
97 \advance \topmargin by -
\headsep
99 % attempt to work a little better for A4 users
100 \textheight \paperheight
101 \advance\textheight by -
2in
105 %\evensidemargin -.25in % for ``manual size'' documents
106 \marginparwidth 0.5in
108 \textwidth \paperwidth
109 \advance\textwidth by -
2in
112 % Style parameters and macros used by most documents here
117 \hbadness =
5000 % don't print trivial gripes
119 \pagestyle{empty
} % start this way; change for
120 \pagenumbering{roman
} % ToC & chapters
122 % Use this to set the font family for headers and other decor:
123 \newcommand{\py@HeaderFamily
}{\sffamily}
125 % Redefine the 'normal' header/footer style when using "fancyhdr" package:
126 \@ifundefined
{fancyhf
}{}{
127 % Use \pagestyle{normal} as the primary pagestyle for text.
128 \fancypagestyle{normal
}{
130 \fancyfoot[LE,RO
]{{\py@HeaderFamily
\thepage}}
131 \fancyfoot[LO
]{{\py@HeaderFamily
\nouppercase{\rightmark}}}
132 \fancyfoot[RE
]{{\py@HeaderFamily
\nouppercase{\leftmark}}}
133 \renewcommand{\headrulewidth}{0pt
}
134 \renewcommand{\footrulewidth}{0.4pt
}
136 % Update the plain style so we get the page number & footer line,
137 % but not a chapter or section title. This is to keep the first
138 % page of a chapter and the blank page between chapters `clean.'
139 \fancypagestyle{plain
}{
141 \fancyfoot[LE,RO
]{{\py@HeaderFamily
\thepage}}
142 \renewcommand{\headrulewidth}{0pt
}
143 \renewcommand{\footrulewidth}{0.4pt
}
145 % Redefine \cleardoublepage so that the blank page between chapters
146 % gets the plain style and not the fancy style. This is described
147 % in the documentation for the fancyhdr package by Piet von Oostrum.
148 \@ifundefined
{chapter
}{}{
149 \renewcommand{\cleardoublepage}{
150 \clearpage\if@openright
\ifodd\c@page
\else
152 \thispagestyle{plain
}
154 \if@twocolumn
\hbox{}\newpage\fi\fi\fi
159 % This sets up the {verbatim} environment to be indented and a minipage,
160 % and to have all the other mostly nice properties that we want for
163 \let\py@OldVerbatim=
\verbatim
164 \let\py@OldEndVerbatim=
\endverbatim
165 \RequirePackage{verbatim
}
167 % Variable used by begin code command
168 \newlength{\py@codewidth
}
170 \renewcommand{\verbatim}{%
171 \setlength{\parindent}{1cm
}%
172 % Calculate the text width for the minipage:
173 \setlength{\py@codewidth
}{\linewidth}%
174 \addtolength{\py@codewidth
}{-
\parindent}%
177 \begin{minipage
}[t
]{\py@codewidth
}%
181 \renewcommand{\endverbatim}{%
187 \newcommand{\py@modulebadkey
}{{--just-some-junk--
}}
190 %% Lots of index-entry generation support.
192 % Command to wrap around stuff that refers to function / module /
193 % attribute names in the index. Default behavior: like \code{}. To
194 % just keep the index entries in the roman font, uncomment the second
195 % definition; it matches O'Reilly style more.
197 \newcommand{\py@idxcode
}[1]{\texttt{#1}}
198 %\renewcommand{\py@idxcode}[1]{#1}
200 % Command to generate two index entries (using subentries)
201 \newcommand{\indexii}[2]{\index{#1!
#2}\index{#2!
#1}}
203 % And three entries (using only one level of subentries)
204 \newcommand{\indexiii}[3]{\index{#1!
#2 #3}\index{#2!
#3,
#1}\index{#3!
#1 #2}}
206 % And four (again, using only one level of subentries)
207 \newcommand{\indexiv}[4]{
214 % Command to generate a reference to a function, statement, keyword,
216 \newcommand{\kwindex}[1]{\indexii{keyword
}{#1@
{\py@idxcode
{#1}}}}
217 \newcommand{\stindex}[1]{\indexii{statement
}{#1@
{\py@idxcode
{#1}}}}
218 \newcommand{\opindex}[1]{\indexii{operator
}{#1@
{\py@idxcode
{#1}}}}
219 \newcommand{\exindex}[1]{\indexii{exception
}{#1@
{\py@idxcode
{#1}}}}
220 \newcommand{\obindex}[1]{\indexii{object
}{#1}}
221 \newcommand{\bifuncindex}[1]{\withsubitem{(built-in function)
}{\ttindex{#1()
}}}
223 % Add an index entry for a module
224 \newcommand{\py@refmodule
}[2]{\index{#1@
{\py@idxcode
{#1}} (
#2module)
}}
225 \newcommand{\refmodindex}[1]{\py@refmodule
{#1}{}}
226 \newcommand{\refbimodindex}[1]{\py@refmodule
{#1}{built-in
}}
227 \newcommand{\refexmodindex}[1]{\py@refmodule
{#1}{extension
}}
228 \newcommand{\refstmodindex}[1]{\py@refmodule
{#1}{standard
}}
230 % Refer to a module's documentation using a hyperlink of the module's
231 % name, at least if we're building PDF:
232 \@ifundefined
{pdfannotlink
}{%
233 \newcommand{\refmodule}[2][\py@modulebadkey
]{\module{#2}}
235 \newcommand{\refmodule}[2][\py@modulebadkey
]{%
236 \ifx\py@modulebadkey
#1\def\py@modulekey
{#2}\else\def\py@modulekey
{#1}\fi%
237 \py@linkToName
{label-module-
\py@modulekey
}{\module{#2}}%
241 % support for the module index
242 \newif\ifpy@UseModuleIndex
243 \py@UseModuleIndexfalse
245 \newcommand{\makemodindex}{
246 \newwrite\modindexfile
247 \openout\modindexfile=mod
\jobname.idx
248 \py@UseModuleIndextrue
251 % Add the defining entry for a module
252 \newcommand{\py@modindex
}[2]{%
253 \renewcommand{\py@thismodule
}{#1}
254 \setindexsubitem{(in module
#1)
}%
255 \index{#1@
{\py@idxcode
{#1}} (
#2module)|textbf
}%
256 \ifpy@UseModuleIndex
%
257 \@ifundefined
{py@modplat@
\py@thismodulekey
}{
258 \write\modindexfile{\protect\indexentry{#1@
{\texttt{#1}}}{\thepage}}%
259 }{\write\modindexfile{\protect\indexentry{#1@
{\texttt{#1} %
260 \emph{(
\py@platformof
[\py@thismodulekey
]{})
}}}{\thepage}}%
265 % *** XXX *** THE NEXT FOUR MACROS ARE NOW OBSOLETE !!! ***
267 % built-in & Python modules in the main distribution
268 \newcommand{\bimodindex}[1]{\py@modindex
{#1}{built-in
}%
269 \typeout{*** MACRO bimodindex IS OBSOLETE -- USE declaremodule INSTEAD!
}}
270 \newcommand{\stmodindex}[1]{\py@modindex
{#1}{standard
}%
271 \typeout{*** MACRO stmodindex IS OBSOLETE -- USE declaremodule INSTEAD!
}}
273 % Python & extension modules outside the main distribution
274 \newcommand{\modindex}[1]{\py@modindex
{#1}{}%
275 \typeout{*** MACRO modindex IS OBSOLETE -- USE declaremodule INSTEAD!
}}
276 \newcommand{\exmodindex}[1]{\py@modindex
{#1}{extension
}%
277 \typeout{*** MACRO exmodindex IS OBSOLETE -- USE declaremodule INSTEAD!
}}
279 % Additional string for an index entry
280 \newcommand{\index@subitem
}{}
281 \newcommand{\setindexsubitem}[1]{\renewcommand{\index@subitem
}{#1}}
282 \newcommand{\ttindex}[1]{\index{#1@
{\py@idxcode
{#1}} \index@subitem
}}
284 \newcommand{\withsubitem}[2]{%
286 \def\index@subitem
{#1}#2%
291 % Module synopsis processing -----------------------------------------------
293 \newcommand{\py@thisclass
}{}
294 \newcommand{\py@thismodule
}{}
295 \newcommand{\py@thismodulekey
}{}
296 \newcommand{\py@thismoduletype
}{}
298 \newcommand{\py@standardIndexModule
}[1]{\py@modindex
{#1}{standard
}}
299 \newcommand{\py@builtinIndexModule
}[1]{\py@modindex
{#1}{built-in
}}
300 \newcommand{\py@extensionIndexModule
}[1]{\py@modindex
{#1}{extension
}}
301 \newcommand{\py@IndexModule
}[1]{\py@modindex
{#1}{}}
303 \newif\ifpy@HaveModSynopsis
\py@HaveModSynopsisfalse
304 \newif\ifpy@ModSynopsisFileIsOpen
\py@ModSynopsisFileIsOpenfalse
305 \newif\ifpy@HaveModPlatform
\py@HaveModPlatformfalse
307 % \declaremodule[key]{type}{name}
308 \newcommand{\declaremodule}[3][\py@modulebadkey
]{
309 \py@openModSynopsisFile
310 \renewcommand{\py@thismoduletype
}{#2}
311 \ifx\py@modulebadkey
#1
312 \renewcommand{\py@thismodulekey
}{#3}
314 \renewcommand{\py@thismodulekey
}{#1}
316 \@ifundefined
{py@
#2IndexModule
}{%
317 \typeout{*** MACRO declaremodule called with unknown module type: `
#2'
}
320 \csname py@
#2IndexModule
\endcsname{#3}%
322 \label{module-
\py@thismodulekey
}
324 \newif\ifpy@ModPlatformFileIsOpen
\py@ModPlatformFileIsOpenfalse
325 \newcommand{\py@ModPlatformFilename
}{\jobname.pla
}
326 \newcommand{\platform}[1]{
327 \ifpy@ModPlatformFileIsOpen
\else
328 \newwrite\py@ModPlatformFile
329 \openout\py@ModPlatformFile=
\py@ModPlatformFilename
330 \py@ModPlatformFileIsOpentrue
333 \InputIfFileExists{\jobname.pla
}{}{}
334 \newcommand{\py@platformof
}[2][\py@modulebadkey
]{%
335 \ifx\py@modulebadkey
#1 \def\py@key
{#2}%
336 \else \def\py@key
{#1}%
338 \csname py@modplat@
\py@key
\endcsname%
340 \newcommand{\ignorePlatformAnnotation}[1]{}
342 % \moduleauthor{name}{email}
343 \newcommand{\moduleauthor}[2]{}
345 % \sectionauthor{name}{email}
346 \newcommand{\sectionauthor}[2]{}
349 \newcommand{\py@defsynopsis
}{Module has no synopsis.
}
350 \newcommand{\py@modulesynopsis
}{\py@defsynopsis
}
351 \newcommand{\modulesynopsis}[1]{
352 \py@HaveModSynopsistrue
353 \renewcommand{\py@modulesynopsis
}{#1}
357 \newwrite\py@ModSynopsisFile
359 % hacked from \addtocontents from latex.ltx:
360 \long\def\py@writeModSynopsisFile
#1{%
361 \protected@write
\py@ModSynopsisFile
%
362 {\let\label\@gobble
\let\index\@gobble
\let\glossary\@gobble
}%
365 \newcommand{\py@closeModSynopsisFile
}{
366 \ifpy@ModSynopsisFileIsOpen
367 \closeout\py@ModSynopsisFile
368 \py@ModSynopsisFileIsOpenfalse
371 \newcommand{\py@openModSynopsisFile
}{
372 \ifpy@ModSynopsisFileIsOpen
\else
373 \openout\py@ModSynopsisFile=
\py@ModSynopsisFilename
374 \py@ModSynopsisFileIsOpentrue
378 \newcommand{\py@ProcessModSynopsis
}{
379 \ifpy@HaveModSynopsis
380 \py@writeModSynopsisFile
{\modulesynopsis%
381 {\py@thismodulekey
}{\py@thismodule
}%
382 {\py@thismoduletype
}{\py@modulesynopsis
}}%
383 \py@HaveModSynopsisfalse
385 \renewcommand{\py@modulesynopsis
}{\py@defsynopsis
}
387 \AtEndDocument{\py@ProcessModSynopsis
\py@closeModSynopsisFile
}
390 \long\def\py@writeModPlatformFile
#1{%
391 \protected@write
\py@ModPlatformFile
%
392 {\let\label\@gobble
\let\index\@gobble
\let\glossary\@gobble
}%
397 \newcommand{\localmoduletable}{
398 \IfFileExists{\py@ModSynopsisFilename
}{
399 \begin{synopsistable
}
400 \input{\py@ModSynopsisFilename
}
405 \@ifundefined
{pdfoutput
}{
406 \newcommand{\py@ModSynopsisSummary
}[4]{\bfcode{#2} &
#4\\
}
408 \newcommand{\py@ModSynopsisSummary
}[4]{%
409 \py@linkToName
{label-module-
#1}{\bfcode{#2}} &
#4\\
412 \newenvironment{synopsistable
}{
413 % key, name, type, synopsis
414 \let\modulesynopsis=
\py@ModSynopsisSummary
420 % --------------------------------------------------------------------------
423 \newcommand{\py@reset
}{
424 \py@ProcessModSynopsis
425 \renewcommand{\py@thisclass
}{}
426 \renewcommand{\py@thismodule
}{}
427 \renewcommand{\py@thismodulekey
}{}
428 \renewcommand{\py@thismoduletype
}{}
431 % Augment the sectioning commands used to get our own font family in place,
432 % and reset some internal data items:
433 \renewcommand{\section}{\py@reset
%
434 \@startsection
{section
}{1}{\z@
}%
435 {-
3.5ex \@plus -
1ex \@minus -
.2ex
}%
437 {\reset@font
\Large\py@HeaderFamily
}}
438 \renewcommand{\subsection}{\@startsection
{subsection
}{2}{\z@
}%
439 {-
3.25ex\@plus -
1ex \@minus -
.2ex
}%
441 {\reset@font
\large\py@HeaderFamily
}}
442 \renewcommand{\subsubsection}{\@startsection
{subsubsection
}{3}{\z@
}%
443 {-
3.25ex\@plus -
1ex \@minus -
.2ex
}%
445 {\reset@font
\normalsize\py@HeaderFamily
}}
446 \renewcommand{\paragraph}{\@startsection
{paragraph
}{4}{\z@
}%
447 {3.25ex \@plus1ex \@minus
.2ex
}%
449 {\reset@font
\normalsize\py@HeaderFamily
}}
450 \renewcommand{\subparagraph}{\@startsection
{subparagraph
}{5}{\parindent}%
451 {3.25ex \@plus1ex \@minus
.2ex
}%
453 {\reset@font
\normalsize\py@HeaderFamily
}}
456 % This gets the underscores closer to the right width; the only change
457 % from standard LaTeX is the width specified.
459 \DeclareTextCommandDefault{\textunderscore}{%
460 \leavevmode \kern.06em
\vbox{\hrule\@width
.55em
}}
462 % Underscore hack (only act like subscript operator if in math mode)
464 % The following is due to Mark Wooding (the old version didn't work with
467 \DeclareRobustCommand\hackscore{%
468 \ifmmode_\else\textunderscore\fi%
473 \AtBeginDocument{\catcode`
\_\active\def_{\hackscore{}}}%
475 \expandafter\endgroup\next
478 % Now for a lot of semantically-loaded environments that do a ton of magical
479 % things to get the right formatting and index entries for the stuff in
480 % Python modules and C API.
483 % {fulllineitems} is used in one place in libregex.tex, but is really for
484 % internal use in this file.
486 \newcommand{\py@itemnewline
}[1]{%
487 \@tempdima
\linewidth%
488 \advance\@tempdima
\leftmargin\makebox[\@tempdima
][l
]{#1}%
491 \newenvironment{fulllineitems
}{
492 \begin{list
}{}{\labelwidth \leftmargin \labelsep 0pt
493 \rightmargin 0pt
\topsep -
\parskip \partopsep \parskip
495 \let\makelabel=
\py@itemnewline
}
498 % \optional is mostly for use in the arguments parameters to the various
499 % {*desc} environments defined below, but may be used elsewhere. Known to
500 % be used in the debugger chapter.
504 % \begin{funcdesc}{myfunc}{reqparm\optional{, optparm}}
506 % No space here No space here
508 % When a function has multiple optional parameters, \optional should be
509 % nested, not chained. This is right:
511 % \begin{funcdesc}{myfunc}{\optional{parm1\optional{, parm2}}}
513 \newcommand{\optional}[1]{%
514 {\textnormal{\Large[}}{#1}\hspace{0.5mm
}{\textnormal{\Large]}}}
516 % C functions ------------------------------------------------------------
517 % \begin{cfuncdesc}{type}{name}{arglist}
518 \newenvironment{cfuncdesc
}[3]{
519 \begin{fulllineitems
}
520 \item[\code{#1 \bfcode{#2}(
\py@varvars
{#3})
}\index{#2@
{\py@idxcode
{#2()
}}}]
521 }{\end{fulllineitems
}}
523 % C variables ------------------------------------------------------------
524 % \begin{cvardesc}{type}{name}
525 \newenvironment{cvardesc
}[2]{
526 \begin{fulllineitems
}
527 \item[\code{#1 \bfcode{#2}}\index{#2@
{\py@idxcode
{#2}}}]
528 }{\end{fulllineitems
}}
530 % C data types -----------------------------------------------------------
531 % \begin{ctypedesc}{typedef name}
532 \newenvironment{ctypedesc
}[1]{
533 \begin{fulllineitems
}
534 \item[\bfcode{#1}\ttindex{#1}]
535 }{\end{fulllineitems
}}
537 % simple functions (not methods) -----------------------------------------
538 % \begin{funcdesc}{name}{args}
539 \newcommand{\funcline}[2]{\funclineni{#1}{#2}\ttindex{#1()
}}
540 \newenvironment{funcdesc
}[2]{
541 \begin{fulllineitems
}
543 }{\end{fulllineitems
}}
545 % similar to {funcdesc}, but doesn't add to the index
546 \newcommand{\funclineni}[2]{\item[\code{\bfcode{#1}(
\py@varvars
{#2})
}]}
547 \newenvironment{funcdescni
}[2]{
548 \begin{fulllineitems
}
550 }{\end{fulllineitems
}}
552 % classes ----------------------------------------------------------------
553 % \begin{classdesc}{name}{constructor args}
554 \newenvironment{classdesc
}[2]{
555 % Using \renewcommand doesn't work for this, for unknown reasons:
556 \global\def\py@thisclass
{#1}
557 \begin{fulllineitems
}
558 \item[\code{\bfcode{#1}(
\py@varvars
{#2})
}%
559 \withsubitem{(class in
\py@thismodule)
}{\ttindex{#1}}]
560 }{\end{fulllineitems
}}
563 \let\py@classbadkey=\@undefined
565 % object method ----------------------------------------------------------
566 % \begin{methoddesc}[classname]{methodname}{args}
567 \newcommand{\methodline}[3][\py@classbadkey
]{
568 \methodlineni{#2}{#3}
570 \withsubitem{(
\py@thisclass\ method)
}{\ttindex{#2()
}}
572 \withsubitem{(
#1 method)
}{\ttindex{#2()
}}
575 \newenvironment{methoddesc
}[3][\py@classbadkey
]{
576 \begin{fulllineitems
}
580 \def\py@thisclass
{#1}
581 \methodline[#1]{#2}{#3}
583 }{\end{fulllineitems
}}
585 % similar to {methoddesc}, but doesn't add to the index
586 % (never actually uses the optional argument)
587 \newcommand{\methodlineni}[3][\py@classbadkey
]{%
588 \item[\code{\bfcode{#2}(
\py@varvars
{#3})
}]}
589 \newenvironment{methoddescni
}[3][\py@classbadkey
]{
590 \begin{fulllineitems
}
591 \methodlineni{#2}{#3}
592 }{\end{fulllineitems
}}
594 % object data attribute --------------------------------------------------
595 % \begin{memberdesc}[classname]{membername}
596 \newcommand{\memberline}[2][\py@classbadkey
]{%
599 \withsubitem{(
\py@thisclass\ attribute)
}{\ttindex{#2}}
602 \withsubitem{(
#1 attribute)
}{\ttindex{#2}}
605 \newenvironment{memberdesc
}[2][\py@classbadkey
]{
606 \begin{fulllineitems
}
610 \def\py@thisclass
{#1}
613 }{\end{fulllineitems
}}
615 % similar to {memberdesc}, but doesn't add to the index
616 % (never actually uses the optional argument)
617 \newcommand{\memberlineni}[2][\py@classbadkey
]{\item[\bfcode{#2}]}
618 \newenvironment{memberdescni
}[2][\py@classbadkey
]{
619 \begin{fulllineitems
}
621 }{\end{fulllineitems
}}
623 % For exceptions: --------------------------------------------------------
624 % \begin{excdesc}{name}
625 % -- need support for constructor; maybe use optional parameter?
626 \newenvironment{excdesc
}[1]{
627 \begin{fulllineitems
}
628 \item[\bfcode{#1}\ttindex{#1}]
629 }{\end{fulllineitems
}}
631 % Module data or constants: ----------------------------------------------
632 % \begin{datadesc}{name}
633 \newcommand{\dataline}[1]{\datalineni{#1}\ttindex{#1}}
634 \newenvironment{datadesc
}[1]{
635 \begin{fulllineitems
}
637 }{\end{fulllineitems
}}
639 % similar to {datadesc}, but doesn't add to the index
640 \newcommand{\datalineni}[1]{\item[\bfcode{#1}]\nopagebreak}
641 \newenvironment{datadescni
}[1]{
642 \begin{fulllineitems
}
644 }{\end{fulllineitems
}}
646 % bytecode instruction ---------------------------------------------------
647 % \begin{opcodedesc}{name}{var}
649 \newenvironment{opcodedesc
}[2]{
650 \begin{fulllineitems
}
651 \item[\bfcode{#1}\quad\var{#2}]
652 }{\end{fulllineitems
}}
655 \newcommand{\nodename}[1]{\label{#1}}
657 % For these commands, use \command{} to get the typography right, not
658 % {\command}. This works better with the texinfo translation.
659 \newcommand{\ABC}{{\sc abc
}}
660 \newcommand{\UNIX}{{\sc Unix
}}
661 \newcommand{\POSIX}{POSIX
}
662 \newcommand{\ASCII}{{\sc ascii
}}
663 \newcommand{\Cpp}{C
\protect\raisebox{.18ex
}{++
}}
665 \newcommand{\EOF}{{\sc eof
}}
666 \newcommand{\NULL}{\constant{NULL
}}
668 % Also for consistency: spell Python "Python", not "python"!
670 % code is the most difficult one...
671 \newcommand{\code}[1]{{\@vobeyspaces\@noligs
\def\
{{\char`\
{}\def\
}{\char`\
}}\def\~
{\char`\~
}\def\^
{\char`\^
}\def\e{\char`\\
}\def\$
{\char`\$
}\def\#
{\char`\#
}\def\&
{\char`\&
}\def\%
{\char`\%
}%
674 \newcommand{\bfcode}[1]{\code{\bfseries#1}} % bold-faced code font
675 \newcommand{\kbd}[1]{\code{#1}}
676 \newcommand{\samp}[1]{`
\code{#1}'
}
677 % This weird definition of \var{} allows it to always appear in roman
678 % italics, and won't get funky in code fragments when we play around
679 % with fonts. This also works directly in math mode.
680 \newcommand{\var}[1]{%
682 \hbox{\normalsize\textrm{\textit{#1\/
}}}%
684 \normalsize\textrm{\textit{#1\/
}}%
687 \renewcommand{\emph}[1]{{\em #1}}
688 \newcommand{\dfn}[1]{\emph{#1}}
689 \newcommand{\strong}[1]{{\bf #1}}
690 % let's experiment with a new font:
691 \newcommand{\file}[1]{`
{\small\textsf{#1}}'
}
692 \newcommand{\filenq}[1]{{\small\textsf{#1}}}
694 % Use this def/redef approach for \url{} since hyperref defined this already,
695 % but only if we actually used hyperref:
696 \@ifundefined
{pdfannotlink
}{
697 \newcommand{\py@url
}[1]{\mbox{\small\textsf{#1}}}
699 \newcommand{\py@url
}[1]{{%
700 \pdfannotlink attr
{/Border
[0 0 0]} user
{/S /URI /URI (
#1)
}%
701 \py@LinkColor
% color of the link text
702 \mbox{\small\textsf{#1}}%
703 \py@NormalColor
% Turn it back off; these are declarative
704 \pdfendlink}% and don't appear bound to the current
708 \newcommand{\email}[1]{{\small\textsf{#1}}}
709 \newcommand{\newsgroup}[1]{{\small\textsf{#1}}}
711 \newcommand{\py@varvars
}[1]{{\def\,
{\/
{\char`\,
}}\var{#1}}}
712 % let's see if this breaks anything now; we may be able to simplify...
713 \renewcommand{\py@varvars
}[1]{\var{#1}}
715 % I'd really like to get rid of this!
716 \newif\iftexi\texifalse
718 % This is used to get l2h to put the copyright and abstract on
719 % a separate HTML page.
720 \newif\ifhtml\htmlfalse
723 % These should be used for all references to identifiers which are
724 % used to refer to instances of specific language constructs. See the
725 % names for specific semantic assignments.
727 % For now, don't do anything really fancy with them; just use them as
728 % logical markup. This might change in the future.
730 \newcommand{\module}[1]{\texttt{#1}}
731 \newcommand{\keyword}[1]{\texttt{#1}}
732 \newcommand{\exception}[1]{\texttt{#1}}
733 \newcommand{\class}[1]{\texttt{#1}}
734 \newcommand{\function}[1]{\texttt{#1}}
735 \newcommand{\member}[1]{\texttt{#1}}
736 \newcommand{\method}[1]{\texttt{#1}}
738 \newcommand{\pytype}[1]{#1} % built-in Python type
740 \newcommand{\cfunction}[1]{\texttt{#1}}
741 \newcommand{\ctype}[1]{\texttt{#1}} % C struct or typedef name
742 \newcommand{\cdata}[1]{\texttt{#1}} % C variable, typically global
744 \newcommand{\mimetype}[1]{{\small\textsf{#1}}}
745 % The \! is a "negative thin space" in math mode.
746 \newcommand{\regexp}[1]{%
747 {\tiny$^
{^
\lceil}\!\!$
%
748 {\normalsize\code{#1}}%
751 \newcommand{\envvar}[1]{%
752 \$
#1% $ <-- bow to font-lock 3 times!
754 \index{environment variables!
{\$
#1}}% $
756 \newcommand{\makevar}[1]{#1} % variable in a Makefile
757 \newcommand{\character}[1]{\samp{#1}}
759 % constants defined in Python modules or C headers, not language constants:
760 \newcommand{\constant}[1]{\code{#1}} % manifest constant, not syntactic
762 \newcommand{\manpage}[2]{{\emph{#1}(
#2)
}}
763 \newcommand{\rfc}[1]{RFC
#1\index{RFC!RFC
#1}}
764 \newcommand{\program}[1]{\strong{#1}}
765 \newcommand{\programopt}[1]{\strong{#1}}
767 % cited titles: \citetitle{Title of Work}
768 % online: \citetitle[url-to-resource]{Title of Work}
769 \newcommand{\citetitle}[2][URL
]{\emph{#1}}
773 % Should be extended to allow an index / list of deprecated stuff. But
774 % there's a lot of stuff that needs to be done to make that automatable.
776 % First parameter is the release number that deprecates the feature, the
777 % second is the action the should be taken by users of the feature.
780 % \deprecated{1.5.1}{Use \method{frobnicate()} instead.}
782 \newcommand{\deprecated}[2]{%
783 \strong{Deprecated since release
#1.
} #2\par}
786 % This should be used to mark things which have been added to the
787 % development tree but that aren't in the release, but are documented.
788 % This allows release of documentation that already includes updated
789 % descriptions. Place at end of descriptor environment.
792 % \versionadded{1.5.2}
794 \newcommand{\versionadded}[1]{%
795 { New in version
#1.
}}
796 \newcommand{\versionchanged}[1]{%
797 { Changed in version
#1.
}}
802 \newenvironment{tableii
}[4]{%
804 \def\lineii#
#1#
#2{\csname#2\endcsname{#
#1}&#
#2\\
}%
805 \begin{tabular
}{#1}\strong{#3}&
\strong{#4} \\
\hline%
811 \newenvironment{tableiii
}[5]{%
813 \def\lineiii#
#1#
#2#
#3{\csname#2\endcsname{#
#1}&#
#2&#
#3\\
}%
814 \begin{tabular
}{#1}\strong{#3}&
\strong{#4}&
\strong{#5} \\
\hline%
820 \newenvironment{tableiv
}[6]{%
822 \def\lineiv#
#1#
#2#
#3#
#4{\csname#2\endcsname{#
#1}&#
#2&#
#3&#
#4\\
}%
823 \begin{tabular
}{#1}\strong{#3}&
\strong{#4}&
\strong{#5}&
\strong{#6} \\%
830 % Cross-referencing (AMK, new impl. FLD)
833 % \seemodule{rand}{Uniform random number generator.}; % Module xref
834 % \seetext{\emph{Encyclopedia Britannica}}. % Ref to a book
836 % % A funky case: module name contains '_'; have to supply an optional key
837 % \seemodule[copyreg]{copy_reg}{Interface constructor registration for
841 % Note that the last parameter for \seemodule and \seetext should be complete
842 % sentences and be terminated with the proper punctuation.
844 \@ifundefined
{pdfannotlink
}{%
845 \newcommand{\py@seemodule
}[3][\py@modulebadkey
]{%
847 \ifx\py@modulebadkey
#1\def\py@modulekey
{#2}\else\def\py@modulekey
{#1}\fi%
848 \begin{fulllineitems
}
849 \item[Module
\module{#2} (section
\ref{module-
\py@modulekey
}):
]
853 }{\newcommand{\py@seemodule
}[3][\py@modulebadkey
]{%
855 \ifx\py@modulebadkey
#1\def\py@modulekey
{#2}\else\def\py@modulekey
{#1}\fi%
856 \begin{fulllineitems
}
857 \item[\py@linkToName
{label-module-
\py@modulekey
}{Module
\module{#2}}
858 (section
\ref{module-
\py@modulekey
}):
]
863 \newenvironment{seealso
}[0]{
865 \strong{See Also:
}\par
866 \def\seetext#
#1{\par{#
#1}}
867 \let\seemodule=
\py@seemodule
871 % Allow the Python release number to be specified independently of the
872 % \date{}. This allows the date to reflect the document's date and
873 % release to specify the Python release that is documented.
875 \newcommand{\py@release
}{}
876 \newcommand{\version}{}
877 \newcommand{\releasename}{Release
}
878 \newcommand{\release}[1]{%
879 \renewcommand{\py@release
}{\releasename\space\version}%
880 \renewcommand{\version}{#1}}
882 % Allow specification of the author's address separately from the
883 % author's name. This can be used to format them differently, which
886 \newcommand{\py@authoraddress
}{}
887 \newcommand{\authoraddress}[1]{\renewcommand{\py@authoraddress
}{#1}}
888 \let\developersaddress=
\authoraddress
889 \let\developer=
\author
890 \let\developers=
\author
892 % This sets up the fancy chapter headings that make the documents look
893 % at least a little better than the usual LaTeX output.
895 \@ifundefined
{ChTitleVar
}{}{
896 \ChNameVar{\raggedleft\normalsize\py@HeaderFamily
}
897 \ChNumVar{\raggedleft \bfseries\Large\py@HeaderFamily
}
898 \ChTitleVar{\raggedleft \rm\Huge\py@HeaderFamily
}
899 % This creates chapter heads without the leading \vspace*{}:
900 \def\@makechapterhead
#1{%
901 {\parindent \z@
\raggedright \normalfont
902 \ifnum \c@secnumdepth >
\m@ne
912 % Definition lists; requested by AMK for HOWTO documents. Probably useful
913 % elsewhere as well, so keep in in the general style support.
915 \newenvironment{definitions
}{%
917 \def\term#
#1{\item[#
#1]\mbox{}\\*
[0mm
]}
922 % Tell TeX about pathological hyphenation cases:
923 \hyphenation{Base-HTTP-Re-quest-Hand-ler
}