summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/revtex/source/ltxdocext.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/revtex/source/ltxdocext.dtx')
-rw-r--r--macros/latex/contrib/revtex/source/ltxdocext.dtx1259
1 files changed, 1259 insertions, 0 deletions
diff --git a/macros/latex/contrib/revtex/source/ltxdocext.dtx b/macros/latex/contrib/revtex/source/ltxdocext.dtx
new file mode 100644
index 0000000000..d3d8b772f5
--- /dev/null
+++ b/macros/latex/contrib/revtex/source/ltxdocext.dtx
@@ -0,0 +1,1259 @@
+% \iffalse meta-comment balanced on line 108
+% ltxdocext.dtx: package to extend the ltxdoc class of standard LaTeX
+% Copyright (c) 2008 Arthur Ogawa
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% License
+% You may distribute this file under the conditions of the
+% LaTeX Project Public License 1.3c or later
+% (http://www.latex-project.org/lppl.txt).
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% Maintenance Status
+% This work has the LPPL maintenance status "maintained";
+% Current Maintainer of this work is Arthur Ogawa.
+%
+% This work consists of the main source file ltxdocext.dtx
+% and the derived files
+% ltxdocext.sty, ltxdocext.pdf, ltxdocext.ins, ltxdocext.drv.
+% Distribution:
+% CTAN:macros/latex/contrib/revtex/
+%
+% Unpacking:
+% tex ltxdocext.dtx
+%
+% Documentation:
+% latex ltxdocext.dtx; ...
+%
+% Program calls to get the documentation (example):
+% pdflatex ltxdocext.dtx
+% makeindex -s gind.ist ltxdocext.idx
+% makeindex -s gglo.ist -o ltxdocext.gls ltxdocext.glo
+% pdflatex ltxdocext.dtx
+% makeindex -s gind.ist ltxdocext.idx
+% pdflatex ltxdocext.dtx
+%
+% Installation:
+% TDS:doc/latex/revtex/
+% TDS:source/latex/revtex/
+% TDS:tex/latex/revtex/
+%
+% Thanks, Heiko!
+% This method of letting a single .dtx file serve as both
+% documentation (via latex) and installer (via tex) follows
+% the example of Heiko Oberdiek. Thanks!
+%<*ignore>
+\begingroup
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase
+ 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi
+ \relax
+\else
+ \csname fi\endcsname
+%</ignore>
+%<*install>
+\input docstrip
+\preamble
+
+This is a generated file;
+altering it directly is inadvisable;
+instead, modify the original source file.
+See the URL in the file README.
+
+License
+ You may distribute this file under the conditions of the
+ LaTeX Project Public License 1.3c or later
+ (http://www.latex-project.org/lppl.txt).
+
+ This file is distributed WITHOUT ANY WARRANTY;
+ without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE.
+
+\endpreamble
+\askforoverwritefalse
+\keepsilent
+ \generate{%
+ %{ignore}
+%\usedir{tex/latex/revtex}%
+ \file{ltxdocext.sty}{%
+ \from{ltxdocext.dtx}{package,kernel}%
+ }%
+ % \file{acrofont.sty}{\from{ltxdocext.dtx}{fonts}}%
+ }%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* ltxdocext.sty}
+\Msg{* into a directory searched by TeX;}
+\Msg{* in a TDS-compliant installation:}
+\Msg{* texmf/tex/macros/latex/revtex/.}
+\Msg{*}
+\Msg{* To produce the documentation,
+ run ltxdocext.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+% \fi
+%
+% \GetFileInfo{ltxdocext.dtx}
+%
+% \iffalse ltxdoc klootch
+%<*ltxdocext>
+%%% @LaTeX-file{
+%%% filename = "ltxdocext.dtx",
+%%% version = "1.0a",
+%%% date = "2018/12/26",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2008 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon arthur_ogawa at sbcglobal.net",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, ltxdoc",
+%%% supported = "yes",
+%%% abstract = "extensions to the ltxdoc class",
+%%% }
+%</ltxdocext>
+% \fi
+%
+% \iffalse ltxdoc klootch
+% The following references the \file{README-LTXDOCEXT} file,
+% which contains basic information about this package.
+% The contents of this file are generated when
+% you typeset the programmer's documentation.
+% Search on "{filecontents*}{README-LTXDOCEXT}" to locate it.
+% \fi\input{README-LTXDOCEXT}%
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}
+%ltxdocext.dtx
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{latex ltxdocext.dtx}}%
+% Typesetting the source file under pdflatex
+% generates the readme and the documentation.
+%\begin{verbatim}
+%README ltxdocext.pdf
+%\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex ltxdocext.ins}}%
+% Typesetting this file with \TeX\ generates
+% the package file.
+%\begin{verbatim}
+%ltxdocext.sty acrofont.sty
+%\end{verbatim}
+%
+% \subsubsection{Documentation}%
+% The following are the online documentation:
+% \begin{verbatim}
+%ltxdocext.pdf
+% \end{verbatim}
+%
+% \subsubsection{Auxiliary}%
+% The following are auxiliary files generated
+% in the course of running \LaTeX:
+% \begin{verbatim}
+%ltxdocext.aux ltxdocext.idx ltxdocext.ind ltxdocext.log ltxdocext.toc
+% \end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% We want to require only one place in this file
+% where the version number is stated,
+% and we also want to ensure that the version
+% number is embedded into every generated file.
+%
+% Now we declare that
+% these files can only be used with \LaTeXe.
+% An appropriate message is displayed if
+% a different \TeX{} format is used.
+% \begin{macrocode}
+%<*driver|package|fonts>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%</driver|package|fonts>
+% \end{macrocode}
+% As desired, the following modules all
+% take common version information:
+% \begin{macrocode}
+%<package>\ProvidesFile{ltxdocext.sty}%
+%<fonts>\ProvidesFile{acrofont.sty}%
+%<*driver>
+\expandafter\ProvidesFile\expandafter{\jobname.dtx}%
+%</driver>
+% \end{macrocode}
+%
+% The following line contains, for once and for all,
+% the version and date information.
+% By various means, this information is reproduced
+% consistently in all generated files and in the
+% typeset documentation.
+% \begin{macrocode}
+%<version>
+ [2018/12/26 1.0a ltxdoc extensions package]% \fileversion
+% \end{macrocode}
+%
+%
+% \section{The driver module \texttt{doc}}
+%
+% This module, consisting of the present section,
+% typesets the programmer's documentation,
+% generating the \file{README-LTXDOCEXT} as required.
+%
+% Because the only uncommented-out lines of code at the beginning of
+% this file constitute the \file{doc} module itself,
+% we can simply typeset the \file{.dtx} file directly,
+% and there is thus rarely any need to
+% generate the ``doc'' {\sc docstrip} module.
+% Module delimiters are nonetheless required so that
+% this code does not find its way into the other modules.
+%
+% The \enve{document} command concludes the typesetting run.
+%
+% \begin{macrocode}
+%<*driver>
+% \end{macrocode}
+%
+% \subsection{The Preamble}
+% The programmers documentation is formatted
+% with the \classname{ltxdoc} document class, with local customizations,
+% and with the usual code line indexing.
+% \begin{macrocode}
+\documentclass[draft]{ltxdoc}
+\RequirePackage{ltxdocext}%
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+%\expandafter\ifx\csname package@font\endcsname\@undefined\else
+% \expandafter\RequirePackage\expandafter{\csname package@font\endcsname}%
+%\fi
+\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist ltxdocext
+\RecordChanges % makeindex -s gglo.ist -o ltxdocext.gls ltxdocext.glo
+% \end{macrocode}
+%
+% \subsubsection{Docstrip and info directives}
+% We use so many {\sc docstrip} modules that we set the
+% \texttt{StandardModuleDepth} counter to 1.
+% \begin{macrocode}
+\setcounter{StandardModuleDepth}{1}
+% \end{macrocode}
+% The following command retrieves the date and version information
+% from this file.
+% \begin{macrocode}
+\expandafter\GetFileInfo\expandafter{\jobname.dtx}%
+% \end{macrocode}
+%
+% \subsection{The ``Read Me'' File}
+% As promised above, here is the contents of the
+% ``Read Me'' file. That file serves a double purpose,
+% since it also constitutes the beginining of the
+% programmer's documentation. What better thing, after
+% all, to have appear at the beginning of the
+% typeset documentation?
+%
+% A good discussion of how to write a ReadMe file can be found in
+% Engst, Tonya, ``Writing a ReadMe File? Read This''
+% \emph{MacTech} October 1998, p. 58.
+%
+% Note the appearance of the
+% \cmd\StopEventually\ command, which marks the
+% dividing line between the user documentation
+% and the programmer documentation.
+%
+% The usual user will not be asked to
+% do a full build, not to speak
+% of the bootstrap.
+% Instructions for carrying these processes
+% begin the programmer's manual.
+%
+% \begin{macrocode}
+\begin{filecontents*}{README-LTXDOCEXT}
+\title{%
+ Extensions to the \classname{ltxdoc} class%
+ \thanks{%
+ This file has version number \fileversion,
+ last revised \filedate.%
+ }%
+ \thanks{%
+ Version \fileversion\ \copyright\ 2019 American Physical Society
+ }%
+}%
+\author{%
+Arthur Ogawa%
+ \thanks{\texttt{mailto:arthur\_ogawa at sbcglobal.net}}%
+}%
+%\iffalse
+% For version number and date,
+% search on "\fileversion" in the .dtx file,
+% or see the end of the README file.
+%\fi
+
+\maketitle
+
+This file embodies the \classname{ltxdocext} package,
+the implementation and its user documentation.
+
+The distribution point for this work is
+\url{journals.aps.org/revtex},
+which contains prebuilt runtime files, documentation, and full source,
+ready to add to a TDS-compliant \TeX\ installation.
+
+The \classname{ltxdocext} package was commissioned by the American Physical Society
+and is distributed under the terms of the \LaTeX\ Project Public License,
+the same license under which all the portions of \LaTeX\ itself are distributed.
+Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details.
+
+To use this document class, you must have a working
+\TeX\ installation equipped with \LaTeXe\
+and possibly pdftex and Adobe Acrobat Reader or equivalent.
+
+To install, retrieve the distribution,
+unpack it into a directory on the target computer,
+and move the files \file{ltxdocext.sty} and \file{acrofont.sty}
+into a location in your filesystem where they will be found by \LaTeX.
+
+If you will be using the \classname{acrofont} package, you must
+also install the virtual fonts
+\file{zpsynocmrv}, \file{zptmnocmr},
+\file{zptmnocmrm}, and \file{zpzcnocmry}.
+The corresponding \file{.tfm}, \file{.vf}, and \file{.vpl}
+files are part of this distribution.
+
+To use, read the user documentation \file{ltxdocext.pdf}.
+The \file{.dtx} file, \file{ltxdocext.dtx}, constitutes
+in itself an instance of use of the \classname{ltxdocext}
+package and the \classname{acrofont} package.
+
+\tableofcontents
+
+\section{Processing Instructions}
+
+The package files \file{ltxdocext.sty} and \file{acrofont.sty}
+are generated from this file, \file{ltxdocext.dtx},
+using the {\sc docstrip} facility of \LaTeX
+via |tex ltxdocext.dtx| (Note: do \emph{not} use \LaTeX\ for this step).
+The typeset documentation that you are now reading is generated from
+the same file by typesetting it with \LaTeX\ or pdftex
+via |latex ltxdocext.dtx| or |pdflatex ltxdocext.dtx|.
+
+\subsection{Build Instructions}
+
+You may bootstrap this suite of files solely from \file{ltxdocext.dtx}.
+Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer,
+then carry out the following steps:
+\begin{enumerate}
+\item
+Within an otherwise empty directory,
+typeset \file{ltxdocext.dtx} with \TeX\ or pdftex;
+thereby generating the package file \file{ltxdocext.sty},
+and the package file \file{acrofont.sty}.
+Make sure that {\sc docstrip} receives permission
+to overwrite existing versions of these packages.
+\item
+Now
+typeset \file{ltxdocext.dtx} with \LaTeX\ or pdflatex;
+you will obtain the typeset documentation you are now reading,
+along with
+the file \file{README}.
+
+Note: you will have to run \LaTeX, then
+\file{makeindex} \texttt{-s gind.ist ltxdocext.idx}, then
+\file{makeindex} \texttt{-s gglo.ist -o ltxdocext.gls ltxdocext.glo}, then
+\LaTeX\ again in order to obtain a valid index and table of contents.
+\item
+Install the following files into indicated locations within your
+TDS-compliant \texttt{texmf} tree (you may need root access):
+\begin{itemize}
+\item
+\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{ltxdocext.sty} and
+\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{acrofont.sty}
+\item
+\file{$TEXMF/}\file{source/}\file{latex/}\file{revtex/}\classname{ltxdocext.dtx}
+\item
+\file{$TEXMF/}\file{doc/}\file{latex/}\file{revtex/}\classname{ltxdocext.pdf}
+\end{itemize}
+where \file{$TEXMF/} stands for \file{texmf-local/}, or some other \texttt{texmf} tree
+in your installation.
+\item
+Run \texttt{mktexlsr} on \file{$TEXMF/} (you may need root access).
+\item
+Build and installation are now complete;
+now put a \cmd\usepackage\texttt{\{ltxutil\}} in your document preamble!
+\end{enumerate}
+
+\subsection{Change Log}
+\changes{1.0a}{2018/12/12}{(MD) Updated name of README file and use standard fonts when typesetting}%
+
+
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{The Document Body}
+%
+% Here is the document body, containing only a
+% \cmd\DocInput\ directive---referring to this very file.
+% This very cute self-reference is a common \classname{ltxdoc} idiom.
+% \begin{macrocode}
+\begin{document}%
+\expandafter\DocInput\expandafter{\jobname.dtx}%
+\PrintChanges
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \section{Using the \classname{ltxdoc} and \classname{acrofont} packages}%
+% These packages are an adjunct to the
+% standard \LaTeX\ \classname{ltxdoc} class and may be
+% simply invoked as follows:
+%\begin{verbatim}
+%\documentclass[draft]{ltxdoc}
+%\RequirePackage{ltxdocext}%
+%\RequirePackage{acrofont}%
+%\CodelineIndex\EnableCrossrefs
+%\end{verbatim}
+%
+% Your document should simply cleave to the standards of the
+% \classname{ltxdoc} class, with extensions and alterations as noted.
+%
+% \subsection{Extensions to the \classname{ltxdoc} class}%
+%
+% \subsubsection{Extensions to the \env{verbatim} environment and \cs{verb} command}%
+%
+% The delimiters \verb$<<$ and \verb$>>$ within the scope of the verbatim environment
+% or within the argument of the \cmd\verb\ command produce
+% italics surrounded by angle brackets.
+% This typographic convention usually indicates
+% \emph{metalanguage}, i.e., a placeholder.
+%
+% To obtain the angle bracket character per se,
+% double the character, viz., ``\verb$the delimiter \verb+<<<<+$''.
+%
+% \subsubsection{The -\texttt{matter} Commands Work}
+% The sectioning commands \cmd\frontmatter, \cmd\mainmatter, and \cmd\backmatter
+% of the standard \LaTeX\ \classname{book} class are operative in the
+% \classname{ltxdoc} class.
+%
+% \subsubsection{The \cs{GetFileInfo} command}\label{sec:GetFileInfo}
+% You can use the \cmd\GetFileInfo\ command to extract
+% the date, version, and file info of a file which has registered itself
+% via the \cmd\ProvidesFile\ or \cmd\ProvidesClass\ command
+% (employing the optional argument thereto).
+%
+% For instance, if your document contains the following:
+%\begin{verbatim}
+%\RequirePackage{ltxdocext}%
+%\GetFileInfo{ltxdocext.sty}%
+%\end{verbatim}
+% then the following control sequence names will have
+% a value corresponding to that package's \cmd\ProvidesFile\
+% command:
+% \cmd\filedate: the file's date,
+% \cmd\fileversion: the file's version, and
+% \cmd\fileinfo: the file's info.
+%
+% \subsubsection{Self-Indexing Commands}%
+% Certain commands automatically produce an index entry
+% (or several related entries) according to the meaning.
+%
+% \begin{unnumtable}
+% \begin{tabular}{ll}
+% meta-text &\cmd\marg\arg{text}\\
+% command &\cmd\cmd\cmd\csname\\
+% environment name &\cmd\env\arg{name}\\
+% \cmd\begin\verb`{foo}`&\cmd\envb\arg{foo}\\
+% \cmd\end\verb`{foo}` &\cmd\enve\arg{foo}\\
+% argument &\cmd\arg\arg{name}\\
+% optional &\cmd\oarg\arg{name}\\
+% filename &\cmd\file\arg{name}\\
+% url &\cmd\url\arg{name}\\
+% document class &\cmd\classname\arg{name}\\
+% document substyle &\cmd\substyle\arg{name}\\
+% class option &\cmd\classoption\arg{name}
+% \end{tabular}
+% \end{unnumtable}
+%
+% \subsubsection{Unnumbered Tables}%
+%
+% When your documentation requires the use of an unnumbered table,
+% use the \env{unnumtable} environment:
+% \begin{verbatim}
+%\begin{unnumtable}
+%\begin{tabular}{ll}
+%<table rows>
+%\end{tabular}
+%\end{unnumtable}
+% \end{verbatim}
+%
+% \subsubsection{Structuring Tables}%
+% The commands \cmd\toprule, \cmd\colrule, and \cmd\botrule
+% allow you to mark the beginning of the column heads
+% the beginning of the table body, and the end of
+% the table body, respectively.
+% In context,
+% \begin{verbatim}
+%\begin{tabular}{ll}
+%\toprule
+%<table head rows>
+%\colrule
+%<table rows>
+%\botrule
+%\end{tabular}
+% \end{verbatim}
+%
+% \subsubsection{A Sectioning Command Below \cs{subsection}}%
+% The \cmd\subsubsection\ command is defined.
+%
+%
+% \subsection{Alterations to the \classname{ltxdoc} class}%
+% The following involve no new markup, but they
+% do change the appearance of your formatted documentation:
+% \begin{enumerate}
+% \item
+% Using the \classname{acrofont} package causes your
+% document to be formatted using the standard
+% Acrobat fonts to the greatest extent possible.
+% This means that for most documents, Computer Modern
+% is not used at all.
+% Math that unavoidable must use CM still exists, however.
+% \item
+% An index will be produced at the end of the document
+% without your needing to explicitly mark it up, and
+% it will have an entry in the TOC.
+% \item
+% The \env{quote} environment has a slightly smaller left margin.
+% \item
+% Array columns are set tight by default.
+% \item
+% A host of \cmd\DoNotIndex\ directives are invoked.
+% I intend this list to grow to encompass
+% even more commands. Send me your suggestions.
+% \end{enumerate}
+%
+%
+%
+%\StopEventually{}
+%
+% \section{Extensions to the ltxdoc class}
+% The \file{package} {\sc docstrip} module comprises the
+% package \classname{ltxdocext.sty}, which provides extensions
+% to the standard \LaTeX\ \classname{ltxdoc} class.
+%
+% \subsection{Beginning of the \file{package} {\sc docstrip} module}
+% This portion of code is only present in the \LaTeX\ package (\texttt{.sty} file),
+% not in the kernel portion.
+% \begin{macrocode}
+%<*package>
+\def\class@name{ltxdocext}%
+\expandafter\PackageInfo\expandafter{\class@name}{%
+ An extension to the \protect\LaTeXe\space ltxdoc class
+ by A. Ogawa (arthur\_ogawa sbcglobal.net)%
+}%
+%</package>
+% \end{macrocode}
+%
+% \subsection{Beginning of the \file{kernel} {\sc docstrip} module}
+%
+% The bulk of the code is the kernel portion; a brief tail of \file{package} code then follows.
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% \subsection{Incorporate \classname{ltxguide.cls} extensions}
+%
+% Code extracted from \classname{ltxguide.cls}, by Alan Jeffrey.
+% ``This code stolen from \classname{ltxguide.cls}:
+% Some hacks with verbatim... NB: this would be better done with the
+% verbatim package, but this document has to run on any \LaTeX
+% installation.''
+% \begin{macrocode}
+\RequirePackage{verbatim}%
+\let\o@verbatim\verbatim
+\def\verbatim{%
+ \ifhmode\unskip\par\fi
+% \nopagebreak % Overridden by list penalty
+ \ifx\@currsize\normalsize
+ \small
+ \fi
+ \o@verbatim
+}%
+% \end{macrocode}
+%
+% Here we extend the font-setting command to include making \texttt{<>} active
+% (i.e., adjusting the input encoding).
+% \begin{macrocode}
+\renewcommand \verbatim@font {%
+ \normalfont \ttfamily
+ \catcode`\<=\active
+ \catcode`\>=\active
+}%
+% \end{macrocode}
+%
+% Make \verb$|...|$ a synonym for \cmd\verb\verb$|...|$.
+% \begin{macrocode}
+\RequirePackage{shortvrb}
+\AtBeginDocument{%
+ \MakeShortVerb{\|}%
+}%
+% \end{macrocode}
+%
+% Make active bracket characters produce italics surrounded by angle brackets
+% (used in \env{verbatim} and \cmd\verb).
+% \verb|<<| produces a less-than, and \verb|>>| produces a greater-than.
+% \begin{macrocode}
+\begingroup
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \gdef<{\@ifnextchar<\@lt\@meta}
+ \gdef>{\@ifnextchar>\@gt\@gtr@err}
+ \gdef\@meta#1>{\marg{#1}}
+ \gdef\@lt<{\char`\<}
+ \gdef\@gt>{\char`\>}
+\endgroup
+\def\@gtr@err{%
+ \ClassError{ltxguide}{%
+ Isolated \protect>%
+ }{%
+ In this document class, \protect<...\protect>
+ is used to indicate a parameter.\MessageBreak
+ I've just found a \protect> on its own.
+ Perhaps you meant to type \protect>\protect>?
+ }%
+}
+\def\verbatim@nolig@list{\do\`\do\,\do\'\do\-}
+% \end{macrocode}
+% End of code stolen from \file{ltxguide.cls}. Thanks, Alan.
+%
+% Add functionality from doc.dtx:
+% (code stolen from doc.dtx):
+% \begin{macrocode}
+\def\GetFileInfo#1{%
+ \def\filename{#1}%
+ \def\@tempb##1 ##2 ##3\relax##4\relax{%
+ \def\filedate{##1}%
+ \def\fileversion{##2}%
+ \def\fileinfo{##3}}%
+ \edef\@tempa{\csname ver@#1\endcsname}%
+ \expandafter\@tempb\@tempa\relax? ? \relax\relax}
+% \end{macrocode}
+% (end of code stolen from doc.dtx. Thanks FMi.)
+%
+% Various forms of self-indexing commands:
+% \begin{macrocode}
+\DeclareRobustCommand{\marg}[1]{%
+ \meta{#1}%
+ \index{#1=\string\meta{#1} placeholder}\index{placeholder>#1=\string\meta{#1}}%
+}%
+\DeclareRobustCommand\meta[1]{%
+ \mbox{\LANGLE\itshape#1\/\RANGLE}%
+}%
+\def\LANGLE{$\langle$}%
+\def\RANGLE{$\rangle$}%
+\DeclareRobustCommand{\arg}[1]{%
+ {\ttfamily\string{}\meta{#1}{\ttfamily\string}}%
+ \index{#1=\string\ttt{#1}, argument}\index{argument>#1=\string\ttt{#1}}%
+}%
+\let\oarg\undefined
+\DeclareRobustCommand{\oarg}[1]{%
+ {\ttfamily[%]
+ }\meta{#1}{\ttfamily%[
+ ]}%
+ \index{#1=\string\ttt{#1}, optional argument}%
+ \index{argument, optional>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\cmd{\begingroup\makeatletter\@cmd}%
+\long\def\@cmd#1{%
+ \endgroup
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\cmd@to@index\string#1\@nil
+}%
+\def\cmd@to@cs#1#2{\char\number`#2\relax}%
+\def\cmd@to@index#1#2\@nil{%
+ \index{#2=\string\cmd#1#2}%\index{command>#2=\string\cmd#1#2}%
+}%
+\DeclareRobustCommand\cs[1]{{\ttfamily\char`\\#1}}%
+\def\scmd#1{%
+ \cs{\expandafter\cmd@to@cs\string#1}%
+ \expandafter\scmd@to@index\string#1\@nil
+}%
+\def\scmd@to@index#1#2\@nil#3{%
+ \index{\string$#3=\string\cmd#1#2---#3}%
+%\index{command>\string$#3=\string\cmd#1#2---#3}%
+}%
+\DeclareRobustCommand\env{\name@idx{environment}}%
+\DeclareRobustCommand\envb[1]{%
+ {\ttfamily\string\begin\string{}\env{#1}{\ttfamily\string}}%
+}%
+\DeclareRobustCommand\enve[1]{{\ttfamily\string\end\string{}\env{#1}{\ttfamily\string}}}%
+\DeclareRobustCommand{\file}{\begingroup\@sanitize\@file}%
+\long\def\@file#1{\endgroup
+ {\ttfamily#1}%
+ \index{#1=\string\ttt{#1}}\index{file>#1=\string\ttt{#1}}%
+}%
+\DeclareRobustCommand\substyle{\name@idx{document substyle}}%
+\DeclareRobustCommand\classoption{\name@idx{document class option}}%
+\DeclareRobustCommand\classname{\name@idx{document class}}%
+\def\name@idx#1#2{%
+ {\ttfamily#2}%
+ \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}%
+}%
+\DeclareRobustCommand\url@ltxdocext{\begingroup\catcode`\/\active\catcode`\.\active\catcode`\:\active\@url}%
+\AtBeginDocument{%
+ \ifx\url\undefined\let\url\url@ltxdocext\fi
+}%
+\def\@url#1{%
+ \url@break{\ttfamily#1}%
+ \url@char\edef\@tempa{#1=\string\url{#1}}%
+ \expandafter\index\expandafter{\@tempa}%
+ \expandafter\index\expandafter{\expandafter u\expandafter r\expandafter l\expandafter >\@tempa}%
+ \endgroup
+}%
+{\catcode`\:\active\aftergroup\def\aftergroup:}{\active@colon}%
+\def\colon@break{\colon@char\allowbreak}%
+\def\colon@char{:}%
+{\catcode`\/\active\aftergroup\def\aftergroup/}{\active@slash}%
+\def\slash@break{\slash@char\allowbreak}%
+\def\slash@char{/}%
+{\catcode`\.\active\aftergroup\def\aftergroup.}{\active@dot}%
+\def\dot@break{\dot@char\allowbreak}%
+\def\dot@char{.}%
+\def\url@break{\let\active@slash\slash@break\let\active@dot\dot@break\let\active@colon\colon@break}%
+\def\url@char{\let\active@slash\slash@char\let\active@dot\dot@char\let\active@colon\colon@char}%
+% \end{macrocode}
+%
+% \subsection{Changes to the base class of the ltxdoc class}
+% Modify \env{theindex} environment so that it produces a TOC entry
+% \begin{macrocode}
+\renewenvironment{theindex}
+ {\if@twocolumn
+ \@restonecolfalse
+ \else
+ \@restonecoltrue
+ \fi
+ \columnseprule \z@
+ \columnsep 35\p@
+\def\see##1##2{\textit{See} ##1}%
+\def\seealso##1##2{\textit{See also} ##1}%
+\long\def\cmd##1{\cs{\expandafter\cmd@to@cs\string##1}}%
+\def\@url##1{\url@break\ttt{##1}\endgroup}%
+\def\ttt{\begingroup\@sanitize\ttfamily\@ttt}%
+\def\@ttt##1{##1\endgroup}%
+\mathchardef\save@secnumdepth\c@secnumdepth
+\c@secnumdepth\m@ne
+ \twocolumn[\section{\indexname}]%
+% \@mkboth{\MakeUppercase\indexname}%
+% {\MakeUppercase\indexname}%
+\c@secnumdepth\save@secnumdepth
+ \thispagestyle{plain}\parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \let\item\@idxitem}
+ {\if@restonecol\onecolumn\else\clearpage\fi}
+\renewenvironment{quote}
+ {\list{}{%
+ \leftmargin1em\relax
+ \rightmargin\leftmargin
+ }%
+ \item\relax}
+ {\endlist}
+% \end{macrocode}
+%
+% \subsection{Extensions to the base class of \classname{ltxdoc.cls}}
+%
+% Matter commands from \classname{book.cls}
+% \begin{macrocode}
+\newif\if@mainmatter
+\newif\if@openright
+\@openrighttrue
+\DeclareRobustCommand\frontmatter{%
+ \cleartorecto
+ \@mainmatterfalse
+ \pagenumbering{roman}%
+}%
+\DeclareRobustCommand\mainmatter{%
+ \cleartorecto
+ \@mainmattertrue
+ \pagenumbering{arabic}%
+}%
+\DeclareRobustCommand\backmatter{%
+ \if@openright
+ \cleartorecto
+ \else
+ \clearpage
+ \fi
+ \@mainmatterfalse
+}%
+\ifx\undefined\cleartorecto
+ \def\cleartorecto{\cleardoublepage}%
+\fi
+% \end{macrocode}
+%
+% Unnumbered tables
+%
+% \begin{environment}{unnumtable}
+% An unnumbered table does not float.
+% \begin{macrocode}
+\def\@to{to}%
+\newenvironment{unnumtable}{%
+ \par
+ \addpenalty\predisplaypenalty
+ \addvspace\abovedisplayskip
+ \hbox\@to\hsize\bgroup\hfil\ignorespaces
+ \let\@Hline\@empty
+}{%
+ \unskip\hfil\egroup
+ \penalty\postdisplaypenalty
+ \vskip\belowdisplayskip
+ \aftergroup\ignorespaces
+ \@endpetrue
+}%
+% \end{macrocode}
+% \end{environment}
+%
+% Emulate \cmd\toprule\ and friends
+% \begin{macrocode}
+\providecommand\toprule{\hline\hline}%
+\providecommand\colrule{\\\hline}%
+\providecommand\botrule{\\\hline\hline}%
+% \end{macrocode}
+%
+% Define sectioning command below \cmd\subsubsection.
+% \begin{macrocode}
+\DeclareRobustCommand\subsubsubsection{%
+ \@startsection{subsubsection}{4}%
+ {\z@}{-15\p@\@plus-5\p@\@minus-2\p@}%
+ {5\p@}{\normalfont\normalsize\itshape}%
+}%
+% \end{macrocode}
+%
+% \subsection{In lieu of \file{ltxdoc.cfg}}
+% We don't want everything to appear in the index
+% \begin{macrocode}
+\DoNotIndex{\',\.,\@M,\@@input,\@Alph,\@alph,\@addtoreset,\@arabic}
+\DoNotIndex{\@badmath,\@centercr,\@cite}
+\DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
+\DoNotIndex{\@input,\@ixpt,\@m,\@minus,\@mkboth}
+\DoNotIndex{\@ne,\@nil,\@nomath,\@plus,\roman,\@set@topoint}
+\DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
+\DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
+\DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
+\DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
+\DoNotIndex{\advance,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
+\DoNotIndex{\bullet}
+\DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
+\DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
+\DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
+\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
+\DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
+\DoNotIndex{\fbox}
+\DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
+\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
+\DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi}
+\DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi}
+\DoNotIndex{\input}
+\DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
+\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
+\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
+\DoNotIndex{\NeedsTeXFormat,\newdimen}
+\DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
+\DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
+\DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
+\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
+\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
+\DoNotIndex{\refstepcounter,\relax,\renewcommand}
+\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily}
+\DoNotIndex{\secdef,\selectfont,\setbox,\setcounter,\setlength}
+\DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
+\DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
+\DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
+\DoNotIndex{\viipt,\vipt,\vskip,\vspace}
+\DoNotIndex{\wd,\xiipt,\year,\z@}
+\DoNotIndex{\next}
+% \end{macrocode}
+%
+% Direct \classname{ltxdoc} to produce an index.
+% \begin{macrocode}
+\AtEndDocument{\PrintIndex\PrintChanges}%
+% \end{macrocode}
+%
+% \subsection{Extension to \LaTeX's \env{filecontents} Environment}
+% We want to
+% coax the version number into \env{filecontents}-generated files.
+% Note that we expect \cmd\fileversion\ and \cmd\filedate\ to
+% hold the needed information. For this to be the case,
+% your document should execute the \cmd\GetFileInfo\ command
+% (as documented in section~\ref{sec:GetFileInfo}) before
+% any instances of \env{filecontents}.
+% \begin{macrocode}
+\makeatletter
+\def\endfilecontents{%
+ \immediate\write\reserved@c{%
+ \string\iffalse\space ltxdoc klootch^^J%
+ \ifx\undefined\fileversion\else
+ \ifx\undefined\filedate\else
+ This file has version number \fileversion, last revised \filedate.%
+ \fi\fi
+ \string\fi
+ }%
+ \immediate\closeout\reserved@c
+ \def\T##1##2##3{%
+ \ifx##1\@undefined\else
+ \@latex@warning@no@line{##2 has been converted to Blank ##3e}%
+ \fi
+ }%
+ \T\L{Form Feed}{Lin}%
+ \T\I{Tab}{Spac}%
+ \immediate\write\@unused{}%
+}%
+\expandafter\let\csname endfilecontents*\endcsname\endfilecontents
+\makeatother
+% \end{macrocode}
+%
+% Alter formatting in arrays; set them tight.
+% \begin{macrocode}
+\setlength\arraycolsep{0pt}%
+% \end{macrocode}
+%
+% \subsection{End of the \file{kernel} {\sc docstrip} module}
+%
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% \subsection{Tail of the \file{package} {\sc docstrip} module}
+% Here is the remainder of the package code.
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% Currently, there is little.
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+%
+% \section{Font Package for Acrobat Compatability}%
+% The package \classname{acrofont}
+% substitutes Acrobat-standard fonts for Computer Modern where possible,
+% even in math mode.
+% Documents typeset with this package in effect will require as little
+% downloaded font data as possible, but will not be exemplars of
+% fine math typesetting.
+%
+% \subsection{Beginning of the \file{fonts} {\sc docstrip} module}
+% The document class module comprises this and the next
+% four sections.
+% \begin{macro}{\class@base}
+% We define in exactly one spot the base class.
+% Typically that class will be one of \classname{book},
+% \classname{article}, or \classname{report}.
+% The base class effectively defines the use and the markup scheme
+% of the class of documents to be handled by this class.
+%
+% This class is a variant of the standard \LaTeX\ book class:
+% \url{ftp://ctan.tug.org/tex-archive/macros/latex/unpacked}.
+% \begin{macrocode}
+%<*fonts>
+\def\class@name{ltxdocext}%
+\expandafter\ClassInfo\expandafter{\class@name}{%
+ Written for \protect\LaTeXe\space
+ by A. Ogawa (arthur_ogawa at sbcglobal.net)%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Variants on psfonts packages}%
+% The following uses \file{times.sty} from \url{/packages/psnfss/psfonts.dtx}
+% \begin{macrocode}
+\RequirePackage{times}%
+% \end{macrocode}
+%
+% The following uses \file{mathptm.sty} from \url{/packages/psnfss/psfonts.dtx}
+% \begin{macrocode}
+\RequirePackage{mathptm}%
+% \end{macrocode}
+%
+% The following is a customization of \file{ot1ptmcm.fd}.
+% The virtual font referred to here \file{zptmnocmr} is
+% a variant of Sebastian Rahtz's \file{zptmcmr}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OT1}{ptmcm}{}
+\DeclareFontShape{OT1}{ptmcm}{m}{n}{
+ <-> zptmnocmr
+}{}
+\DeclareFontShape{OT1}{ptmcm}{l}{n}{<->ssub * ptmnocm/m/n}{}
+% \end{macrocode}
+%
+% The following is a customization of \file{omlptmcm.fd}
+% The virtual font referred to here \file{zptmnocmrm} is
+% a variant of Sebastian Rahtz's \file{zptmcmrm}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OML}{ptmcm}{\skewchar \font =127}
+\DeclareFontShape{OML}{ptmcm}{m}{it}{
+ <-> zptmnocmrm
+}{}
+\DeclareFontShape{OML}{ptmcm}{l}{it}{<->ssub * ptmcm/m/it}{}
+\DeclareFontShape{OML}{ptmcm}{m}{sl}{<->ssub * ptmcm/m/it}{}
+\DeclareFontShape{OML}{ptmcm}{l}{sl}{<->ssub * ptmcm/m/sl}{}
+% \end{macrocode}
+%
+% The following is a customization of \file{omspzccm.fd}
+% The virtual font referred to here \file{zpzcnocmry} is
+% a variant of Sebastian Rahtz's \file{zpzccmry}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OMS}{pzccm}{}
+\DeclareFontShape{OMS}{pzccm}{m}{n}{
+ <-> zpzcnocmry
+}{}% cmsy10 Symbol Zapf Chancery Medium-Italic Times-Roman
+\DeclareFontShape{OMS}{pzccm}{l}{n}{<->ssub * pzccm/m/n}{}
+% \end{macrocode}
+%
+% The following is a customization of \file{omxpsycm.fd}
+% The virtual font referred to here \file{zpsynocmrv} is
+% a variant of Sebastian Rahtz's \file{zpsycmrv}, but with
+% even more glyphs moved from CM to Acrobat-standard fonts.
+% \begin{macrocode}
+\DeclareFontFamily{OMX}{psycm}{}
+\DeclareFontShape{OMX}{psycm}{m}{n}{
+ <-> zpsynocmrv
+}{}
+\DeclareFontShape{OMX}{psycm}{l}{n}{<->ssub * psycm/m/n}{}
+%
+\DeclareFontEncoding{8r}{}{}% from file: 8renc.def
+\DeclareFontFamily{8r}{cmr}{\hyphenchar\font45 }% from file: 8rcmr.fd
+\DeclareFontShape{8r}{cmr}{m}{n}{
+ <-> cmr10
+}{}
+% \end{macrocode}
+%
+% \subsection{Font definition files}%
+%
+% The following forces \LaTeX\ to do now what it would do anyway:
+% load the `font definition' information for the fonts that we
+% use. In this way, we prepare for faster processing through
+% the \cmd\dump\ of a preformatted macro package that will not
+% need to read in any packages or font definitions from disk.
+% \begin{macrocode}
+\input{8rphv.fd}%
+\input{8rptm.fd}%
+\input{ot1phv.fd}%
+\input{ot1ptm.fd}%
+\input{t1ptm.fd}%
+% \end{macrocode}
+%
+% \subsection{More math substitutions}%
+%
+% The following definitions arrange to get certain glyphs from the
+% text font instead of out of math pi fonts.
+% In particular, the copyright and registered symbols
+% are single glyphs instead of composites involving
+% the big circle from the \file{cmsy} font.
+% \begin{macrocode}
+ \def\eightRChar#1{{\def\encodingdefault{8r}\fontencoding\encodingdefault\selectfont\char"#1}}%
+ \def\LANGLE{$<$}%{\eightRChar{8B}}%
+ \def\RANGLE{$>$}%{\eightRChar{9B}}%
+%\def\ASTER{\eightRChar{2A}}%
+%\def\DAGGER{\eightRChar{86}}%
+%\def\DDAGGER{\eightRChar{87}}%
+ \def\BULLET{\eightRChar{95}}%
+%\def\SECTION{\eightRChar{A7}}%
+%\def\PARAGRAPH{\eightRChar{B6}}%
+ \def\VERTBAR{\eightRChar{7C}}%
+ \def\COPYRIGHT{\eightRChar{A9}}%
+ \def\REGISTERED{\eightRChar{AE}}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \def\textbar{\VERTBAR}%
+ \def\textbullet{\BULLET}%
+ \def\textcopyright{\COPYRIGHT}%
+ \def\textregistered{\REGISTERED}%
+% \end{macrocode}
+%
+% I have removed \cmd\ensuremath\ from the following definition, and
+% all commands like \cmd\mathsection have been converted to
+% e.g., \cmd\textsection.
+% \begin{macrocode}
+\def\@makefnmark{\@thefnmark}%
+\def\@fnsymbol#1{{\ifcase#1\or *\or \dagger\or \ddagger\or
+ \textsection\or \textparagraph\or \|\or **\or \dagger\dagger
+ \or \ddagger\ddagger \else\@ctrerr\fi}}
+% \end{macrocode}
+%
+% \subsection{End of the \file{fonts} {\sc docstrip} module}
+% Here ends the module.
+% \begin{macrocode}
+%</fonts>
+% \end{macrocode}
+%
+%
+% \section{Programming Conventions}%
+% In writing the above code, I cleave to certain conventions, noted
+% here.
+% My goal in explaining them is to encourage others maintaining this
+% body of code to consider following them as well.
+% The benefits are twofold:
+% Some of the coding conventions aim to avoid programming pitfalls;
+% following them reduces maintenance costs.
+% Others make the code easier to read; following these eases the
+% process of understanding how the code works.
+%
+% And, for my part, I prefer to read code of this type.
+%
+% \subsection{Whitespace Conventions}%
+% Exactly where code lines break and indent, and where additional
+% whitespace is inserted is explained here.
+% \begin{itemize}
+% \item
+% Each new macro definition or register assignment begins a new line.
+% Therefore, \cmd\def, \cmd\newcommand, and their ilk will start in column~1.
+% \item
+% Code is indented one space for each level of nesting within braces
+% \verb|{}|.
+% \item
+% Likewise, if possible, for \cmd\if\dots and matching \cmd\fi.
+% \item
+% However, the closing brace or \cmd\fi\ is outdented by one so that it
+% falls
+% at the same level of indentation as its matching brace or \cmd\if,
+% and it appears alone on its line.
+% \item
+% Use of the |tab| character is deprecated
+% (tabs are not standardized across all applications and operating
+% systems).
+% \item
+% Lines of code are limited to 72 characters.
+% I follow this convention mostly to ease the transmission of files
+% via email (a deprecated practice) and to accomodate people with
+% small monitors.
+% But \classname{ltxdoc} output looks better with the shorter lines, too.
+% \item
+% Extraneous whitespace in the replacement part of a macro definition
+% is avoided by using the comment character |%|.
+% In most cases, if falling at the end of a line of code,
+% a brace will be immediately followed by a comment character,
+% as will the macro parameter |#1| and any one-letter control sequence,
+% like |\\|.
+% \item
+% Extraneous whitespace in the package file is also avoided.
+% When \TeX\ reads in the .sty file, it will process \cmd\def s, and other commands,
+% but will not process blank spaces.
+% This practice is simply a discipline. You don't need to do this.
+% But sometimes \TeX\ has to read in a file while it is in horizontal mode,
+% at which point this practice is essential.
+% \end{itemize}
+% These conventions taken together are illustrated by the following:
+% \begin{verbatim}
+%\def\prepdef#1#2{%
+% \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}%
+% \toks@ii{#2}%
+% \edef#1{\the\toks@ii\the\toks@}%
+%}%
+% \end{verbatim}
+% In the above, the definition of \cmd\prepdef\ would not fit on a single
+% line,
+% and required breaking. The first and last lines have matching braces,
+% and are a the same level of indentation, with the last line containing
+% a single brace.
+%
+% Each of the three intervening lines has balanced braces and is
+% indented by one space. Each line that would otherwise end in a single
+% brace character is terminated by a comment character.
+%
+% Some coders rely on the fact that a space character seen by \TeX's
+% scanner while in vertical mode is a no-op.
+% Be that as it may, I eliminate them unless actually intentional.
+%
+% \subsection{Conventions For Procedures}%
+% Here are some of my preferences when writing procedures:
+% \begin{itemize}
+%
+% \item
+% I dislike defining a macro within another macro, especially when the
+% pattern part is non-nil.
+% You know, you are not saving much space in |mem| when you do this,
+% right?
+% You do save space in the hash table and the string pool, though.
+% On the other hand, we are not dealing with small \TeX\ engines
+% anymore; Team \LaTeX\ has made sure of this.
+%
+% \item
+% If two or more macros have very similar replacement parts, consider
+% layering.
+%
+% \item
+% Macros may perform parsing, may maintain tokens or registers, or may
+% set type (produce marks). I try to avoid combining the three functions
+% in a single macro.
+%
+% \item
+% When a procedure both does assignments and sets type, I try to have a
+% clean separations between the two activities. Try to avoid:
+% \begin{verbatim}
+% \vskip10pt
+% \parindent=0pt
+% \leavevmode
+% \end{verbatim}
+%
+% \item
+% The Boolean calculus (cf. \cmd\@ifx)
+% is very useful and produces code that executes nicely.
+% Using it also helps avoid your having to debug problems where
+% \cmd\if\dots\ and \cmd\fi\ are not properly balanced
+% (a nightmare, in case you have not already experienced it).
+%
+% \end{itemize}
+%
+% \subsection{Conventions For \LaTeX}%
+% Team \LaTeX\ make certain recommendations in \file{clsguide.tex}.
+% Ones that I particularly pay attention to are:
+% \begin{itemize}
+%
+% \item
+% For the sake of ``color safety'',
+% use \cmd\sbox\ rather than \cmd\setbox, \cmd\mbox\ rather than \cmd\hbox, and
+% \cmd\parbox\ or \env{minipage} rather than \cmd\vbox.
+%
+% \item
+% Use \cmd\newcommand\ and \cmd\newenvironment\ to declare user-level commands
+% and environments. Avoid the idiom \cmd\def\cmd\foo, \cmd\def\cmd\endfoo\ to define
+% an environment.
+% Ideally, all user-level markup could be extracted from the
+% document class by grepping on \cmd\newcommand\ and \cmd\newenvironment.
+%
+% \item
+% Prefer to use \cmd\setlength\ to assign registers.
+%
+% \end{itemize}
+% I cannot help but notice that much of the code of \LaTeX\ itself fails
+% to comply with many of the coding recommendations of Team \LaTeX.
+%
+% \Finale
+% \iffalse Here ends the programmer's documentation.\fi
+% \endinput
+%
+\endinput
+%%EOF