diff --git a/collects/tex2page/tex2page.tex b/collects/tex2page/tex2page.tex new file mode 100644 index 0000000000..0d49803775 --- /dev/null +++ b/collects/tex2page/tex2page.tex @@ -0,0 +1,1238 @@ +% tex2page.tex +% Dorai Sitaram + +% TeX files using these macros +% can be converted by the program +% tex2page into HTML + +\ifx\shipout\UnDeFiNeD\endinput\fi + +\message{version 2008-03-02} % last change + +\let\texonly\relax +\let\endtexonly\relax + +\let\htmlonly\iffalse +\let\endhtmlonly\fi + +\edef\atcatcodebeforetexzpage{% + \noexpand\catcode`\noexpand\@=\the\catcode`\@} +\catcode`\@11 + +% + +\def\verbwritefile{% + \ifx\verbwritefileQport\UnDeFiNeD + \expandafter\csname newwrite\endcsname\verbwritefileQport + \else\immediate\closeout\verbwritefileQport + \fi + \futurelet\verbwritefileQnext\verbwritefileQcheckchar} + +\def\verbwritefileQcheckchar{% + \ifx\verbwritefileQnext\bgroup + \let\verbwritefileQnext\verbwritefileQbracedfile + \else + \let\verbwritefileQnext\verbwritefileQspacedfile + \fi\verbwritefileQnext} + +\def\verbwritefileQspacedfile#1 {% + \immediate\openout\verbwritefileQport #1 +} + +\def\verbwritefileQbracedfile#1{% + \verbwritefileQspacedfile #1 +} + +\def\verbwrite{% + \ifx\verbwritefileQport\UnDeFiNeD + \verbwritefile \jobname.txt \fi + \begingroup + \def\do##1{\catcode`##1=12 }\dospecials + \catcode`\{=1 \catcode`\}=2 + \catcode`\^^M=12 \newlinechar=`\^^M% + \futurelet\verbwriteQopeningchar\verbwriteQii} + +\def\verbwriteQii{\ifx\verbwriteQopeningchar\bgroup + \let\verbwriteQiii\verbwriteQbrace\else + \let\verbwriteQiii\verbwriteQnonbrace\fi + \verbwriteQiii} + +\def\verbwriteQbrace#1{\immediate + \write\verbwritefileQport{#1}\endgroup} + +\def\verbwriteQnonbrace#1{% + \catcode`\{12 \catcode`\}12 + \def\verbwriteQnonbraceQii##1#1{% + \immediate\write\verbwritefileQport{##1}\endgroup}% + \verbwriteQnonbraceQii} + +\ifx\slatexignorecurrentfile\UnDeFiNeD\relax\fi + +% + +\def\defcsactive#1{\defnumactive{`#1}} + +\def\defnumactive#1{\catcode#1\active + \begingroup\lccode`\~#1% + \lowercase{\endgroup\def~}} + +% gobblegobblegobble + +\def\gobblegroup{\bgroup + \def\do##1{\catcode`##1=9 }\dospecials + \catcode`\{1 \catcode`\}2 \catcode`\^^M=9 + \gobblegroupQii} + +\def\gobblegroupQii#1{\egroup} + +% \verb +% Usage: \verb{...lines...} or \verb|...lines...| +% In the former case, | can be used as escape char within +% the verbatim text + +\let\verbhook\relax + +\def\verbfont{\tt} +%\hyphenchar\tentt-1 + +\def\verbsetup{\frenchspacing + \def\do##1{\catcode`##1=12 }\dospecials + \catcode`\|=12 % needed? + \verbfont + \edef\verbQoldhyphenchar{\the\hyphenchar\font}% + \hyphenchar\font-1 + \def\verbQendgroup{\hyphenchar\font\verbQoldhyphenchar\endgroup}% +} + +\def\verbavoidligs{% avoid ligatures + \defcsactive\`{\relax\lq}% + \defcsactive\ {\leavevmode\ }% + \defcsactive\^^I{\leavevmode\ \ \ \ \ \ \ \ }% + \defcsactive\^^M{\leavevmode\endgraf}% + \ifx\noncmttQspecific\UnDeFiNeD\else\noncmttQspecific\fi} + +\def\verbinsertskip{% + \let\firstpar y% + \defcsactive\^^M{\ifx\firstpar y% + \let\firstpar n% + \verbdisplayskip + \parskip 0pt + \aftergroup\verbdisplayskip + \else\leavevmode\fi\endgraf}% + \verbhook} + +%\def\verb{\begingroup +% \verbsetup\verbQii} + +\ifx\verb\UnDeFiNeD\else % save away LaTeX's \verb + \let\LaTeXverb\verb +\fi + +\def\verb{\begingroup + \verbsetup\verbavoidligs\verbQcheckstar}% + +\def\verbQcheckstar{% + \futurelet\verbQcheckstarQnext\verbQcheckstarQii} + +\def\verbQcheckstarQii{% + \if\verbQcheckstarQnext*% + \let\verbQcheckstarQnext\verbQcheckstarQiii + \else + \let\verbQcheckstarQnext\verbQii + \fi + \verbQcheckstarQnext} + +\def\verbQcheckstarQiii#1{% + \defcsactive\ {\relax\char`\ }% + \verbQii} + +\newcount\verbbracebalancecount + +\def\verblbrace{\char`\{} +\def\verbrbrace{\char`\}} + +\ifx\verbatimescapechar\UnDeFiNeD +% don't clobber Eplain's \verbatimescapechar +\def\verbatimescapechar#1{% + \def\@makeverbatimescapechar{\catcode`#1=0 }}% +\fi +\let\verbescapechar\verbatimescapechar + +\verbatimescapechar\| + +{\catcode`\[1 \catcode`\]2 +\catcode`\{12 \catcode`\}12 +\gdef\verbQii#1[%\verbavoidligs + \verbinsertskip\verbhook + %\edef\verbQoldhyphenchar{\the\hyphenchar\tentt}% + %\hyphenchar\tentt=-1 + %\def\verbQendgroup{\hyphenchar\tentt\verbQoldhyphenchar\endgroup}% + %\let\verbQendgroup\endgroup% + \if#1{\@makeverbatimescapechar + \def\{[\char`\{]% + \def\}[\char`\}]% + \def\|[\char`\|]% + \verbbracebalancecount0 + \defcsactive\{[\advance\verbbracebalancecount by 1 + \verblbrace]% + \defcsactive\}[\ifnum\verbbracebalancecount=0 + \let\verbrbracenext\verbQendgroup\else + \advance\verbbracebalancecount by -1 + \let\verbrbracenext\verbrbrace\fi + \verbrbracenext]\else + \defcsactive#1[\verbQendgroup]\fi + \verbQiii +]] + +\def\verbQiii{\futurelet\verbQiiinext\verbQiv} + +{\catcode`\^^M\active% +\gdef\verbQiv{\ifx\verbQiiinext^^M\else% + \defcsactive\^^M{\leavevmode\ }\fi}} + +\let\verbdisplayskip\medbreak + +% \verbatiminput FILENAME +% displays contents of file FILENAME verbatim. + +%\def\verbatiminput#1 {{\verbsetup\verbavoidligs\verbhook +% \input #1 }} + +% ^ original \verbatiminput + +\ifx\verbatiminput\UnDeFiNeD +% LaTeX's (optional) verbatim package defines a \verbatiminput -- +% don't clobber it +\def\verbatiminput{% + \futurelet\verbatiminputQnext\verbatiminputQcheckchar}% +\fi + +\def\verbatiminputQcheckchar{% + \ifx\verbatiminputQnext\bgroup + \let\verbatiminputQnext\verbatiminputQbracedfile + \else + \let\verbatiminputQnext\verbatiminputQspacedfile + \fi\verbatiminputQnext} + +\def\verbatiminputQbracedfile#1{\verbatiminputQdoit{#1}} + +\def\verbatiminputQspacedfile#1 {\verbatiminputQdoit{#1}} + +\def\verbatiminputQdoit#1{{\verbsetup + \verbavoidligs\verbhook + \input #1 }} + +% \url{URL} becomes +% URL in HTML, and +% URL in DVI. + +% A-VERY-VERY-LONG-URL in a .bib file +% could be split by BibTeX +% across a linebreak, with % before the newline. +% To accommodate this, %-followed-by-newline will +% be ignored in the URL argument of \url and related +% macros. + +\ifx\url\UnDeFiNeD +\def\url{\bgroup\urlsetup\let\dummy=}% +\fi + +\def\urlsetup{\verbsetup\urlfont\verbavoidligs + \catcode`\{1 \catcode`\}2 + \defcsactive\%{\urlQpacifybibtex}% + \defcsactive\ {\relax}% + \defcsactive\^^M{\relax}% + \defcsactive\.{\discretionary{}{\char`\.}{\char`\.}}% + \defcsactive\/{\discretionary{\char`\/}{}{\char`\/}}% + \defcsactive\`{\relax\lq}} + +\let\urlfont\relax + +\def\urlQpacifybibtex{\futurelet\urlQpacifybibtexQnext\urlQpacifybibtexQii} + +\def\urlQpacifybibtexQii{\ifx\urlQpacifybibtexQnext^^M% + \else\%\fi} + + +% \urlh{URL}{TEXT} becomes +% TEXT in HTML, and +% TEXT in DVI. + +% If TEXT contains \\, the part after \\ appears in +% the DVI only. If, further, this part contains \1, +% the latter is replaced by a fixed-width representation +% of URL. + +\def\urlh{\bgroup\urlsetup + \afterassignment\urlhQii + \gdef\urlhQurlarg} + +\def\urlhQii{\egroup + \bgroup + \let\\\relax + \def\1{{\urlsetup\urlhQurlarg}}% + \let\dummy=} + +\def\urlp#1{{#1} \bgroup\urlsetup + \afterassignment\urlpQwrapparens + \gdef\urlpQurlarg} + +\def\urlpQwrapparens{\egroup + {\rm(}{\urlsetup\urlpQurlarg}{\rm)}} + +% \urlhd{URL}{HTML-TEXT}{DVI-TEXT} becomes +% HTML-TEXT in HTML, and +% DVI-TEXT in DVI + +\def\urlhd{\bgroup + \def\do##1{\catcode`##1=12 }\dospecials + \catcode`\{1 \catcode`\}2 + \urlhdQeaturlhtmlargs} + +\def\urlhdQeaturlhtmlargs#1#2{\egroup} + +\ifx\href\UnDeFiNeD +\let\href\urlh +\fi + +% Scheme + +\let\scm\verb +\let\scminput\verbatiminput +\let\scmdribble\scm + + +% Images + +\let\imgdef\def + +\let\makehtmlimage\relax + +\def\mathg{$\bgroup\aftergroup\closemathg\let\dummy=} +\def\closemathg{$} + +\let\mathp\mathg + +\def\mathdg{$$\bgroup\aftergroup\closemathdg\let\dummy=} +\def\closemathdg{$$} + +% + +\ifx\label\UnDeFiNeD +\else +\def\xrtag#1#2{\@bsphack + \protected@write\@auxout{}% + {\string\newlabel{#1}{{#2}{\thepage}}}% +\@esphack}% +%\let\tagref\ref +\fi + +\ifx\definexref\UnDeFiNeD +\else +\def\xrtag#1#2{\definexref{#1}{#2}{}}% +\fi + +\ifx\IfFileExists\UnDeFiNeD +\def\IfFileExists#1#2#3{% + \openin0 #1 % + \ifeof0 % + #3% + \else + #2\fi + \closein0 }% +\fi + +\ifx\futurenonspacelet\UnDeFiNeD +\ifx\@futurenonspacelet\UnDeFiNeD +% +\def\futurenonspaceletQpickupspace/{% + \global\let\futurenonspaceletQspacetoken= }% +\futurenonspaceletQpickupspace/ % +% +\def\futurenonspacelet#1{\def\futurenonspaceletQargQi{#1}% + \afterassignment\futurenonspaceletQstepQone + \let\futurenonspaceletQargQii=}% +% +\def\futurenonspaceletQstepQone{% + \expandafter\futurelet\futurenonspaceletQargQi + \futurenonspaceletQstepQtwo}% +% +\def\futurenonspaceletQstepQtwo{% + \expandafter\ifx\futurenonspaceletQargQi\futurenonspaceletQspacetoken + \let\futurenonspaceletQnext=\futurenonspaceletQstepQthree + \else\let\futurenonspaceletQnext=\futurenonspaceletQargQii + \fi\futurenonspaceletQnext}% +% +\def\futurenonspaceletQstepQthree{% + \afterassignment\futurenonspaceletQstepQone + \let\futurenonspaceletQnext= }% +% +\else\let\futurenonspacelet\@futurenonspacelet +\fi +\fi + +\ifx\slatexversion\UnDeFiNeD +% SLaTeX compat +\let\scmkeyword\gobblegroup +\let\scmbuiltin\gobblegroup +\let\scmconstant\scmbuiltin +\let\scmvariable\scmbuiltin +\let\setbuiltin\scmbuiltin +\let\setconstant\scmbuiltin +\let\setkeyword\scmkeyword +\let\setvariable\scmvariable +\def\schemedisplay{\begingroup + \verbsetup\verbavoidligs + \verbinsertskip + \schemedisplayI}% +\def\schemeresponse{\begingroup + \verbsetup\verbavoidligs + \verbinsertskip + \schemeresponseI}% +{\catcode`\|0 |catcode`|\12 + |long|gdef|schemedisplayI#1\endschemedisplay{% + #1|endgroup}% + |long|gdef|schemeresponseI#1\endschemeresponse{% + #1|endgroup}}% +\fi + + +% STOP LOADING HERE FOR LATEX + +\ifx\section\UnDeFiNeD +\let\maybeloadfollowing\relax +\else +\atcatcodebeforetexzpage +\let\maybeloadfollowing\endinput +\fi\maybeloadfollowing + +\newwrite\sectionQscratchfileport + +% Title + +\def\subject{% + \immediate\openout\sectionQscratchfileport Z-sec-temp + \begingroup + \def\do##1{\catcode`##1=11 }\dospecials + \catcode`\{=1 \catcode`\}=2 + \subjectI} + +\def\subjectI#1{\endgroup + \immediate\write\sectionQscratchfileport {#1}% + \immediate\closeout\sectionQscratchfileport + $$\vbox{\bf \def\\{\cr}% + \halign{\hfil##\hfil\cr + \input Z-sec-temp + \cr}}$$% + \medskip} + +\let\title\subject + +% toc + +\let\tocactive0 + +\newcount\tocdepth + +%\tocdepth=10 +\tocdepth=3 + +\def\tocoutensure{\ifx\tocout\UnDeFiNeD + \csname newwrite\endcsname\tocout\fi} + +\def\tocactivate{\ifx\tocactive0% + \tocoutensure + \tocsave + \openout\tocout \jobname.toc + \global\let\tocactive1\fi} + +\def\tocspecials{\def\do##1{\catcode`##1=12 }\dospecials} + +\def\tocsave{\openin0=\jobname.toc + \ifeof0 \closein0 \else + \openout\tocout Z-T-\jobname.tex + \let\tocsaved 0% + \loop + \ifeof0 \closeout\tocout + \let\tocsaved1% + \else{\tocspecials + \read0 to \tocsaveline + \edef\temp{\write\tocout{\tocsaveline}}\temp}% + \fi + \ifx\tocsaved0% + \repeat + \fi + \closein0 } + +\def\tocentry#1#2{% + %#1=depth #2=secnum + \def\tocentryQsecnum{#2}% + \ifnum#1=1 + \ifnum\tocdepth>2 + \medbreak\begingroup\bf + \else\begingroup\fi + \else\begingroup\fi + \vtop\bgroup\raggedright + \noindent\hskip #1 em + \ifx\tocentryQsecnum\empty + \else\qquad\llap{\tocentryQsecnum}\enspace\fi + \bgroup + \aftergroup\tocentryQii + %read section title + \let\dummy=} + +\def\tocentryQii#1{% + %#1=page nr + , #1\strut\egroup + \endgroup\par +} + + +% allow {thebibliography} to be used directly +% in (plain-TeX) source document without +% generating it via BibTeX + +\ifx\thebibliography\UnDeFiNeD +\def\thebibliography#1{\vskip-\lastskip + \begingroup + \def\endthebibliography{\endgroup\endgroup}% + \def\input##1 ##2{\relax}% + \setbox0=\hbox{\biblabelcontents{#1}}% + \biblabelwidth=\wd0 + \@readbblfile}% +\fi + + +% + +\def\italiccorrection{\futurelet\italiccorrectionI + \italiccorrectionII} + +\def\italiccorrectionII{% + \if\noexpand\italiccorrectionI,\else + \if\noexpand\italiccorrectionI.\else + \/\fi\fi} + +\def\em{\it\ifmmode\else\aftergroup\italiccorrection\fi} + +\def\emph{\bgroup\it + \ifmmode\else\aftergroup\italiccorrection\fi + \let\dummy=} + + +\def\begin#1{\begingroup + \def\end##1{\csname end#1\endcsname\endgroup}% + \csname #1\endcsname} + + +\def\textdegree{\ifmmode^\circ\else$^\circ$\fi} + + +% STOP LOADING HERE FOR EPLAIN + +\ifx\eplain\UnDeFiNeD +\let\maybeloadfollowing\relax +\else +\atcatcodebeforetexzpage +\let\maybeloadfollowing\endinput +\fi\maybeloadfollowing +% + +% Index generation +% +% Your TeX source contains \index{NAME} to +% signal that NAME should be included in the index. +% Check the makeindex documentation to see the various +% ways NAME can be specified, eg, for subitems, for +% explicitly specifying the alphabetization for a name +% involving TeX control sequences, etc. +% +% The first run of TeX will create \jobname.idx. +% makeindex on \jobname[.idx] will create the sorted +% index \jobname.ind. +% +% Use \inputindex (without arguments) to include this +% sorted index, typically somewhere to the end of your +% document. This will produce the items and subitems. +% It won't produce a section heading however -- you +% will have to typeset one yourself. + +%\def\sanitizeidxletters{\def\do##1{\catcode`##1=11 }% +% \dospecials +% \catcode`\{=1 \catcode`\}=2 \catcode`\ =10 } + +\def\sanitizeidxletters{\def\do##1{\catcode`##1=11 }% + \do\\\do\$\do\&\do\#\do\^\do\_\do\%\do\~% + \do\@\do\"\do\!\do\|\do\-\do\ \do\'} + +\def\index{%\unskip + \ifx\indexout\UnDeFiNeD + \csname newwrite\endcsname\indexout + \openout\indexout \jobname.idx\fi + \begingroup + \sanitizeidxletters + \indexQii} + +\def\indexQii#1{\endgroup + \write\indexout{\string\indexentry{#1}{\folio}}% + \ignorespaces} + +% The following index style indents subitems on a +% separate lines + +\def\theindex{\begingroup + \parskip0pt \parindent0pt + \def\indexitem##1{\par\hangindent30pt \hangafter1 + \hskip ##1 }% + \def\item{\indexitem{0em}}% + \def\subitem{\indexitem{2em}}% + \def\subsubitem{\indexitem{4em}}% + \def\see{{\it see} \bgroup\aftergroup\gobblegroup\let\dummy=}% + \let\indexspace\medskip} + +\def\endtheindex{\endgroup} + +\def\inputindex{% + \openin0 \jobname.ind + \ifeof0 \closein0 + \message{\jobname.ind missing.}% + \else\closein0 + \begingroup + \def\begin##1{\csname##1\endcsname}% + \def\end##1{\csname end##1\endcsname}% + \input\jobname.ind + \endgroup\fi} + +% Cross-references + +% \openxrefout loads all the TAG-VALUE associations in +% \jobname.xrf and then opens \jobname.xrf as an +% output channel that \xrtag can use + +\def\openxrefout{% + \openin0=\jobname.xrf + \ifeof0 \closein0 + \else \closein0 {\catcode`\\0 \input \jobname.xrf }% + \fi + \expandafter\csname newwrite\endcsname\xrefout + \openout\xrefout=\jobname.xrf +} + +% I'd like to call \openxrefout lazily, but +% unfortunately it produces a bug in MiKTeX. +% So let's call it up front. + +\openxrefout + +% \xrtag{TAG}{VALUE} associates TAG with VALUE. +% Hereafter, \ref{TAG} will output VALUE. +% \xrtag stores its associations in \xrefout. +% \xrtag calls \openxrefout if \jobname.xrf hasn't +% already been opened + +\def\xrtag#1#2{\ifx\xrefout\UnDeFiNeD\openxrefout\fi + {\let\folio0% + \edef\temp{% + \write\xrefout{\string\expandafter\string\gdef + \string\csname\space XREF#1\string\endcsname + {#2}\string\relax}}% + \temp}\ignorespaces} + + +% \ref{TAG} outputs VALUE, assuming \xrtag put such +% an association into \xrefout. \ref calls +% \openxrefout if \jobname.xrf hasn't already +% been opened + +\def\ref#1{\ifx\xrefout\UnDeFiNeD\openxrefout\fi + \expandafter\ifx\csname XREF#1\endcsname\relax + %\message or \write16 ? + \message{\the\inputlineno: Unresolved label `#1'.}?\else + \csname XREF#1\endcsname\fi} + + +% + +\def\writenumberedtocline#1#2#3{% + %#1=depth + %#2=secnum + %#3=title + \tocactivate + \edef\@currentlabel{#2}% + {\let\folio0% + \edef\writetotocQtemp{\write\tocout + {\string\tocentry{#1}{#2}{#3}{\folio}}}% + \writetotocQtemp}} + +\def\tableofcontents{% + \ifx\tocactive0% + \openin0 \jobname.toc + \edef\QatcatcodebeforeToC{% + \noexpand\catcode`\noexpand\@=\the\catcode`\@}% + \catcode`\@=11 + \ifeof0 \closein0 \else + \closein0 \input \jobname.toc + \fi + \QatcatcodebeforeToC + \tocoutensure + \openout\tocout \jobname.toc + \global\let\tocactive1% + \else + \input Z-T-\jobname.tex + \fi} + +% + +\ifx\TZPplain\UnDeFiNeD +\let\maybeloadfollowing\relax +\else +\atcatcodebeforetexzpage +\let\maybeloadfollowing\endinput +\fi\maybeloadfollowing + +% Tally control sequences are cheap count +% registers: they doesn't use up TeX's limited number of +% real count registers. + +% A tally is a macro that expands to the +% number kept track of. Thus \edef\kount{0} defines a +% tally \kount that currently contains 0. + +% \advancetally\kount n increments \kount by n. +% \globaladvancetally increments the global \kount. +% If \kount is not defined, the \[global]advancetally +% macros define it to be 0 before proceeding with the +% incrementation. + +\def\newtally#1{\edef#1{0}} + +\def\advancetallyhelper#1#2#3{% + \ifx#2\UnDeFiNeD + #1\edef#2{0}\fi + \edef\setcountCCLV{\count255=#2 }% + \setcountCCLV + \advance\count255 by #3 + #1\edef#2{\the\count255 }} + +\def\advancetally{\advancetallyhelper\relax} +\def\globaladvancetally{\advancetallyhelper\global} + +% Sections + +\def\tracksectionchangeatlevel#1{% + \expandafter\let\expandafter\thiscount\csname + sectionnumber#1\endcsname + \ifx\thiscount\relax + \expandafter\edef\csname sectionnumber#1\endcsname{0}% + \fi + \expandafter\advancetally + \csname sectionnumber#1\endcsname 1% + \ifx\doingappendix0% + \edef\@currentlabel{\csname sectionnumber1\endcsname}% + \else + %\count255=\expandafter\csname sectionnumber1\endcsname + \edef\@currentlabel{\char\csname sectionnumber1\endcsname}% + \fi + \count255=0 + \loop + \advance\count255 by 1 + \ifnum\count255=1 + \else\edef\@currentlabel{\@currentlabel.\csname + sectionnumber\the\count255\endcsname}\fi + \ifnum\count255<#1% + \repeat + \loop + \advance\count255 by 1 + \expandafter\let\expandafter\nextcount\csname + sectionnumber\the\count255\endcsname + \ifx\nextcount\relax + \let\continue0% + \else + \expandafter\edef\csname + sectionnumber\the\count255\endcsname{0}% + \let\continue1\fi + \ifx\continue1% + \repeat} +\newcount\secnumdepth + +\secnumdepth=3 + +\def\sectiond#1{\count255=#1% + \ifx\usingchapters1\advance\count255 by 1 \fi + \edef\sectiondlvl{\the\count255 }% + \futurelet\sectionnextchar\sectiondispatch} + +\def\sectiondispatch{\ifx\sectionnextchar*% + \def\sectioncontinue{\sectionstar{\sectiondlvl}}\else + \ifnum\sectiondlvl>\secnumdepth + \def\sectioncontinue{\sectionhelp{\sectiondlvl}{}}\else + \tracksectionchangeatlevel{\sectiondlvl}% + \def\sectioncontinue{\sectionhelp{\sectiondlvl}% + {\@currentlabel}}\fi\fi + \sectioncontinue} + +\def\sectionstar#1*{\sectionhelp{#1}{}} + +\def\sectionhelp#1#2{% + \edef\sectiondepth{#1}% + \def\sectionnr{#2}% + \immediate\openout\sectionQscratchfileport Z-sec-temp + \begingroup + \def\do##1{\catcode`##1=11 }\dospecials + \catcode`\{=1 \catcode`\}= 2 + \sectionheader} + +% Vanilla section-header look -- change this macro for new look + +\def\sectionheader#1{\endgroup + \immediate\write\sectionQscratchfileport {#1}% + \immediate\closeout\sectionQscratchfileport + \vskip -\lastskip + \ifnum\sectiondepth>\tocdepth\else + \writenumberedtocline{\sectiondepth}{\sectionnr}{#1}% + \fi + \vskip1.5\bigskipamount + \goodbreak %??? + \noindent + \hbox{\vtop{\pretolerance 10000 + \raggedright + \noindent\bf + \ifx\sectionnr\empty\else + \sectionnr\enspace\fi + \input Z-sec-temp }}% + \nobreak + \smallskip + %\noindent + } + +% \edef\temp{\write\tocout{\string\hskip#1\space em\string\relax\space #2% +% \string\vtop{\string\hsize=.7\string\hsize +% \string\noindent\string\raggedright\space #3}\string\par}}\temp + + + +\def\section{\sectiond1} +\def\subsection{\sectiond2} +\def\subsubsection{\sectiond3} +\def\paragraph{\sectiond4} +\def\subparagraph{\sectiond5} + +\let\usingchapters0 + +\def\chapter{\global\let\usingchapters1% +\global\footnotenumber=0 +\futurelet\chapternextchar\chapterdispatch} + +\def\chapterdispatch{\ifx\chapternextchar*% + \let\chaptercontinue\chapterstar\else + \tracksectionchangeatlevel{1}% + \def\chaptercontinue{\chapterhelp{\@currentlabel}}\fi + \chaptercontinue} + +\def\chapterstar*{\chapterhelp{}} + +\def\chapterhelp#1{% + % #1=number #2=heading-text + \def\chapternr{#1}% + \immediate\openout\sectionQscratchfileport Z-sec-temp + \begingroup + \def\do##1{\catcode`##1=11 }\dospecials + \catcode`\{=1 \catcode`\}=2 + \chapterheader} + +\def\chapterheader#1{\endgroup + \immediate\write\sectionQscratchfileport {#1}% + \immediate\closeout\sectionQscratchfileport + \writenumberedtocline{1}{\chapternr}{#1}% + \vfill\eject + \null\vskip3em + \noindent + \ifx\chapternr\empty\hbox{~}\else + \ifx\doingappendix0% + \hbox{\bf Chapter \chapternr}\else + \hbox{\bf Appendix \chapternr}\fi\fi + \vskip 1em + \noindent + \hbox{\bf\vtop{%\hsize=.7\hsize + \pretolerance 10000 + \noindent\raggedright\input Z-sec-temp }}% + \nobreak\vskip3em + %\noindent + } + +\let\doingappendix=0 + +\def\appendix{\let\doingappendix=1% + \count255=`\A% + \advance\count255 by -1 + \expandafter\edef\csname + sectionnumber1\endcsname{\the\count255 }} + +% Numbered footnotes + +\ifx\plainfootnote\UnDeFiNeD + \let\plainfootnote\footnote +\fi + +\newcount\footnotenumber + +\def\numberedfootnote{\global\advance\footnotenumber 1 + \bgroup\csname footnotehook\endcsname + \plainfootnote{$^{\the\footnotenumber}$}\bgroup + \edef\@currentlabel{\the\footnotenumber}% + \aftergroup\egroup + \let\dummy=} + + +\let\@currentlabel\relax + +% \label, as in LaTeX + +% The sectioning commands +% define \@currentlabel so a subsequent call to \label will pick up the +% right label. + +\def\label#1{\xrtag{#1}{\@currentlabel}% + \xrtag{PAGE#1}{\folio}} + +% \pageref, as in LaTeX + +\def\pageref#1{\ref{PAGE#1}} + + +% + +\def\itemize{\par\begingroup + \advance\leftskip\parindent + \smallbreak + \def\item{\smallbreak\noindent + \llap{$\bullet$\enspace}\ignorespaces}} + +\def\enditemize{\smallbreak\smallbreak\endgroup\par} + +\newtally\enumeratelevel + +\def\enumerate{\par\begingroup + \advancetally\enumeratelevel1% + \newtally\enumeratenumber + \advance\leftskip\parindent + \smallbreak + \def\item{\smallbreak\noindent + \advancetally\enumeratenumber1% + \ifnum\enumeratelevel=1 + \edef\enumeratemark{\enumeratenumber}\else + \ifnum\enumeratelevel=2 + \count255=\enumeratenumber + \advance\count255 by -1 \advance\count255 by `a + \edef\enumeratemark{\noexpand\char\the\count255 }\else + \ifnum\enumeratelevel=3 + \edef\enumeratemark{\Romannumeral\enumeratenumber}\else + \ifnum\enumeratelevel=4 + \count255=\enumeratenumber + \advance\count255 by -1 \advance\count255 by `A + \edef\enumeratemark{\noexpand\char\the\count255 }\else + \edef\enumeratemark{\enumeratenumber}\fi\fi\fi\fi + \edef\@currentlabel{\enumeratemark}% needed? + \llap{\enumeratemark.\enspace}\ignorespaces}} + +\def\endenumerate{\smallbreak\smallbreak\endgroup\par} + +% \path is like \verb except that its argument +% can break across lines at `.' and `/'. + +\ifx\path\UnDeFiNeD +\def\path{\begingroup\verbsetup + \pathfont + \defcsactive\.{\discretionary{\char`\.}{}{\char`\.}}% + \defcsactive\/{\discretionary{\char`\/}{}{\char`\/}}% + \verbQii}% +\fi + +\let\pathfont\relax +% + +% plain's \{left,center,right}line can't handle catcode change +% within their argument + +\def\leftline{\line\bgroup\bgroup + \aftergroup\leftlinefinish + \let\dummy=} + +\def\leftlinefinish{\hss\egroup} + +\def\centerline{\line\bgroup\bgroup + \aftergroup\leftlinefinish + \hss\let\dummy=} + +\def\rightline{\line\bgroup\hss\let\dummy=} + +% +% definitions (useful in reference manuals) + +\def\defun#1{\def\defuntype{#1}% +\medbreak +\line\bgroup + \hbox\bgroup + \aftergroup\enddefun + \vrule width .5ex \thinspace + \vrule \enspace + \vbox\bgroup\setbox0=\hbox{\defuntype}% + \advance\hsize-\wd0 + \advance\hsize-1em + \obeylines + \parindent=0pt + \aftergroup\egroup + \strut + \let\dummy=} + +\def\enddefun{\hfil\defuntype\egroup\smallskip} + +% + +%\def\hr{\smallskip\line{\leaders\hbox{~.~}\hfill}\smallskip} + +% + +\def\sidemargin{\afterassignment\sidemarginQadjustoffset + \hoffset} + +\def\sidemarginQadjustoffset{% + \advance\hoffset -1true in + \advance\hsize -2\hoffset} + +% don't let caps disable end-of-sentence spacing -- assumes we won't use +% dots after caps for abbrevs + +\def\nocapdot{% +\count255=`\A +\loop +\sfcode\the\count255=1000 +\ifnum\count255<`\Z +\advance\count255 by 1 +\repeat +} + +% " --> `` or '' + +\def\smartdoublequotes{% + \defcsactive\"{\futurelet\smartdoublequotesI + \smartdoublequotesII}% + \def\smartdoublequotesII{% + \ifcat\noexpand\smartdoublequotesI a``\else + \if\noexpand\smartdoublequotesI 0``\else + \if\noexpand\smartdoublequotesI 1``\else + \if\noexpand\smartdoublequotesI 2``\else + \if\noexpand\smartdoublequotesI 3``\else + \if\noexpand\smartdoublequotesI 4``\else + \if\noexpand\smartdoublequotesI 5``\else + \if\noexpand\smartdoublequotesI 6``\else + \if\noexpand\smartdoublequotesI 7``\else + \if\noexpand\smartdoublequotesI 8``\else + \if\noexpand\smartdoublequotesI 9``\else + ''\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}% +} + +% + +\def\emailliketext{\nocapdot\smartdoublequotes} + +% + +\def\gobbleencl{\bgroup + \def\do##1{\catcode`##1=12 }\dospecials + \catcode`\{1 \catcode`\}2 \catcode`\^^M=9 + \futurelet\gobbleenclQnext\gobbleenclQii} + +\def\gobbleenclQii{\ifx\gobbleenclQnext\bgroup + \let\gobbleenclQnext\gobblegroupQii + \else\let\gobbleenclQnext\gobbleenclQiii\fi + \gobbleenclQnext} + +\def\gobbleenclQiii#1{% + \def\gobbleenclQiv##1#1{\egroup}% + \gobbleenclQiv} + +% + +\let\strike\fiverm % can be much better! +% + +\ifx\InputIfFileExists\UnDeFiNeD +\def\InputIfFileExists#1#2#3{% + \IfFileExists{#1}{#2\input #1 }{#3}}% +\fi + +% \packindex declares that subitems be bundled into one +% semicolon-separated paragraph + +\def\packindex{% + \def\theindex{\begingroup + \parskip0pt \parindent0pt + \def\item{\par\hangindent20pt \hangafter1 }% + \def\subitem{\unskip; }% + \def\subsubitem{\unskip; }% + \def\see{\bgroup\it see \aftergroup\gobblegroup\let\dummy=}% + \let\indexspace\medskip}} + +% Use \printindex instead of \inputindex if you want +% the section heading ``Index'' automatically generated. + +\def\printindex{\csname beginsection\endcsname Index\par + \inputindex} + +\def\inputepsf{% +\ifx\pdfoutput\UnDeFiNeD + \input epsf +\else + \input supp-pdf + \def\epsfbox##1{\convertMPtoPDF{##1}{1}{1}}% +\fi +} + +\def\r#1{{\accent23 #1}} + +\def\verbc{\begingroup + \verbsetup\afterassignment\verbcI + \let\verbcII=} + +\def\verbcI{{\verbfont\verbcII}\endgroup} + +\let\E\verbc + +% The current font is cmtt iff fontdimen3 = 0 _and_ +% fontdimen7 != 0 + +\def\noncmttQspecific{\let\noncmttQspecificQdoit y% + \ifdim\the\fontdimen3\the\font=0.0pt + \ifdim\the\fontdimen7\the\font=0.0pt + \let\noncmttQspecificQdoit n\fi\fi + \ifx\noncmttQspecificQdoit y% + \defcsactive\<{\relax\char`\<}% + \defcsactive\>{\relax\char`\>}% + \defcsactive\-{\variablelengthhyphen}% + \fi} + +% In a nonmonospaced font, - followed by a letter +% is a regular hyphen. Followed by anything else, it is a +% typewriter hyphen. + +\def\variablelengthhyphen{\futurelet\variablelengthhyphenI + \variablelengthhyphenII} + +\def\variablelengthhyphenII{\ifcat\noexpand\variablelengthhyphenI + a-\else{\tt\char`\-}\fi} + +% uppercase version of \romannumeral + +\def\Romannumeral{\afterassignment\RomannumeralI\count255=} + +\def\RomannumeralI{\uppercase\expandafter{\romannumeral\the\count255 }} + +% \xrdef, as in Eplain + +\def\xrdef#1{\xrtag{#1}{\folio}} + +% + +\def\quote{\bgroup\narrower\smallbreak} +\def\endquote{\smallbreak\egroup} + + +\ifx\frac\UnDeFiNeD +\def\frac#1/#2{{#1\over#2}}% +\fi + +\ifx\bull\UnDeFiNeD +\def\bull{$\bullet$}% +\fi + +% \mailto{ADDRESS} becomes +% ADDRESS in HTML, and +% ADDRESS in DVI. + +\let\mailto\url + +\def\raggedleft{% + \leftskip 0pt plus 1fil + \parfillskip 0pt +} + +%\def\rawhtml{\errmessage{Can't occur outside +% \string\htmlonly}} +%\def\endrawhtml{\errmessage{Can't occur outside +% \string\htmlonly}} + +\let\rawhtml\iffalse +\let\endrawhtml\fi + +\let\htmlheadonly\iffalse +\let\endhtmlheadonly\fi + +\let\cssblock\iffalse +\let\endcssblock\fi + +\def\inputcss#1 {\relax} +\let\htmladdimg\gobblegroup + +\def\htmlref{\bgroup\aftergroup\gobblegroup\let\dummy=} + +% + +\let\htmlcolophon\gobblegroup +\let\htmldoctype\gobblegroup +\let\htmlmathstyle\gobblegroup + +\let\slatexlikecomments\relax +\let\noslatexlikecomments\relax + +\let\imgpreamble\iffalse +\let\endimgpreamble\fi + +\def\inputexternallabels#1 {\relax} +\def\includeexternallabels#1 {\relax} + +\ifx\eval\UnDeFiNeD +\IfFileExists{eval4tex.tex}{\input eval4tex }{}\fi + +\let\evalh\gobblegroup +\let\evalq\gobblegroup + +\let\htmlpagebreak\relax + +\let\htmlpagelabel\gobblegroup + +\def\htmlpageref{\errmessage{Can't occur except inside + \string\htmlonly}} + +% Miscellaneous stuff + +%\def\hr{$$\hbox{---}$$} +\def\hr{\medbreak\centerline{---}\medbreak} +%\def\hr{\par\centerline{$*$}\par} + + +\let\htmlimageformat\gobblegroup +\let\htmlimageconversionprogram\gobblegroup + +\let\externaltitle\gobblegroup +\let\ignorenextinputtimestamp\relax + +% + +\let\htmladvancedentities\relax +\let\n\noindent +\let\p\verb +\let\q\scm +\let\f\numberedfootnote +\let\scmp\scm +\let\numfootnote\numberedfootnote +\let\writetotoc\writenumberedtocline +\let\tag\xrtag +\let\scmfilename\verbwritefile +\let\scmwrite\verbwrite + +% + +\atcatcodebeforetexzpage + +% end of file