%% BEGIN tvz-code.sty %% 93/04/01 %% Tim Van Zandt Timothy.VAN-ZANDT@insead.edu %% %% Lousy hacks for typesetting the documented code for the %% %% This file may be distributed and/or modified under the conditions of %% the LaTeX Project Public License, either version 1.2 of this license %% or (at your option) any later version. The latest version of this %% license is in: %% %% http://www.latex-project.org/lppl.txt %% %% and version 1.2 or later is part of all distributions of LaTeX version %% 1999/12/01 or later. %% %% seminar.sty and PSTricks packages. \input tvz-hax.sty \input doc.sty % Tested with v1.7k \input art11.sty %%%%%%%%%%%%%%%%%%% PAGE PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%% % Paragraphs are marked by space rather than indentation: \parindent 0pt \parskip 4pt plus 1pt minus 1pt % Textwidth just wide enough for 78 characters of code. \setbox\@tempboxa=\hbox{\small\tt f} \textwidth 78\wd\@tempboxa \oddsidemargin\paperwidth\relax \advance\oddsidemargin -\textwidth \divide\oddsidemargin 2 \advance\oddsidemargin -1in \setbox\@tempboxa=\hbox{\tiny 999\ } \advance\oddsidemargin\wd\@tempboxa \evensidemargin\oddsidemargin \if@twoside \advance\oddsidemargin .3in \advance\evensidemargin -.3in \fi % No headers, 1in top margin \topmargin 0pt \headheight 0pt \headsep 0pt % Total bottom margin 1in, text height 9in \textheight 9in \footskip .625in % Now adjust for different paper size: \@tempdima=\paperheight \advance\@tempdima-11in \divide\@tempdima 2 \advance\topmargin \@tempdima % Marginal notes always on left. \marginparwidth 3.5cm \marginparsep .5cm \reversemarginpar %%%%%%%%%%%%%%%%%%% MACROCODE PATCH FOR SHORT META %%%%%%%%%%% \expandafter\def\expandafter\macrocode\expandafter{% \expandafter\DeleteShortMeta \macrocode} %%%%%%%%%%%%%%%%%%%% DOC PREAMBLE %%%%%%%%%%%%%%%%%%%%%%%%%%%% \newbox\junkbox \def\DocInput#1{% \MakePercentIgnore \setbox\junkbox=\hbox\bgroup \input{#1}% \MakePercentComment} \let\EndDocPreamble\egroup %%%%%%%%%%%%%%%%%%%%%%%%%%% VERBATIM %%%%%%%%%%%%%%%%%%%%%%%%% % Use fancybox.sty's LVerbatim environment. Each line should contain % percent plus three spaces (or other char), including blank lines. E.g., % \begin{LVerbatim} % foo % bar % \end{LVerbatim} \def\EveryVerbatimLine#1#2#3#4{} \begingroup \catcode`\%=12 \catcode`\ =\active \global\EndVerbatimTokens{% } \endgroup \AltGetVerbatim %%%%%%%%%%%%%%%%%% INDEXING %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Things are faster without \MakeIndex \def\MakeIndex{\makeindex\EnableCrossrefs} \DisableCrossrefs % Use \codelabel[int]{foo} to label last line of code plus int. % E.g., to label first and then last line of some code: % \codelabel[1]{foo} % \begin{macrocode} % foo % bar % \end{macrocode} % \codelabel{foo} \def\codelabel{\@ifnextchar[{\@codelabel}{\@codelabel[0]}} \def\@codelabel[#1]#2{% \@bsphack \begingroup \advance\c@CodelineNo #1 \def\@currentlabel{\the\c@CodelineNo}% \label{#2}% \endgroup \@esphack} % Definitions in code are indexed by page number, but other occurences % are indexed by the line of code. \CodelineIndex \def\SpecialMainPageIndex#1{% {\let\special@index\index\SpecialMainIndex{#1}}} \renewcommand{\theCodelineNo}{{\rm\tiny\arabic{CodelineNo}}} % Index numbers for main definitions are set in bold rather than underlined. \def\main#1{{\bf #1}} % two column index \setcounter{IndexColumns}{2} % Customize index prologue: \def\index@prologue{% \section*{Index}\markboth{Index}{Index}% \addcontentsline{toc}{section}{Index}% The {\bf bold} numbers denote the pages where the entries are defined, and all other numbers indicate the {\em lines of code} where the entries are used.} %%%%%%%%%%%%%%%%%%%%%%%%%% MACRO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % A change to the macro environment; prints macro names within the margins % of the text, instead of as marginal notes. Use one \macro command, % with comma separated macro names. \newif\iffirst@macroname \newif\ifnestedmacro \def\macro{% \ifnum\macro@level=\z@ \def\next{\MakePrivateLetters \m@cro@}% \else \def\next{\@latexerr{Nested \string\begin{macro}}\@eha \endgroup\end{macro}\macro@level=\z@\begin{macro}} \fi \next} \def\m@cro@#1{% \first@macronametrue \m@@cro@@#1,\@nil,} \def\m@@cro@@#1,{% \def\@tempa{#1}\def\@tempb{\@nil}% \ifx\@tempa\@tempb \let\next\finishm@@cro@@ \else {\advance\c@CodelineNo\@ne\SpecialMainPageIndex{#1}\nobreak}% \DoNotIndex{#1}% \iffirst@macroname \edef\saved@macronames{\string#1}% \first@macronamefalse \else \def\comma{\noexpand\comma}% \edef\saved@macronames{\saved@macronames\comma\string#1}% \fi \let\next\m@@cro@@ \fi \next} \def\finishm@@cro@@{% \advance\macro@level\@ne \def\comma{{\rm, }}% \ListMacroNames{\saved@macronames}} \let\endmacro\relax \def\ListMacroNames{% \@startsection{subsubsection}{3}{\z@}{-2.25ex plus -.5ex minus-.2ex}% {1.3ex plus.2ex}{\csname reset@font\endcsname\large\tt}*} \MacroIndent 0pt \def\MacroFont{\small\tt} %%%%%%%%%%%%%%%%%%%%% DoNot Index %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \DoNotIndex{\ ,\!,\[,\\,\],\^,\`,\{,\},\~} \DoNotIndex{\@warning,\active} \DoNotIndex{\begingroup,\catcode,\char,\csname,\def,\do} \DoNotIndex{\docdate,\dospecials,\edef,\else,\endcsname,\endgroup} \DoNotIndex{\expandafter,\fi,\filedate,\fileversion} \DoNotIndex{\gdef,\if,\ifcat} \DoNotIndex{\ifx,\immediate,\lccode,\let} \DoNotIndex{\lowercase,\next,\noexpand} \DoNotIndex{\relax,\space,\the} \DoNotIndex{\toks@,\typeout,\write} \DoNotIndex{\@M,\@arabic,\@author,\@auxout,\@bsphack,\@car,\@date} \DoNotIndex{\@dblarg,\@dblfloat,\@eha,\@empty,\@esphack,\@evenfoot} \DoNotIndex{\@evenhead,\@float,\@gobble,\@gobbletwo,\@gtempa,\@ifnextchar} \DoNotIndex{\@ifundefined,\@ixpt,\@latexerr,\@listI,\@listi,\@listii} \DoNotIndex{\@listiii,\@listiv,\@listv,\@listvi,\@makefnmark,\@mkboth} \DoNotIndex{\@namedef,\@nameuse,\@mne,\@nil,\@normalsize,\@oddfoot} \DoNotIndex{\@oddhead,\@tempa,\@tempb,\@tempc,\@tempd} \DoNotIndex{\@tempdima,\@testfalse,\@testtrue,\test@member} \DoNotIndex{\@thanks,\@thefnmark,\@title} \DoNotIndex{\@topnum,\@viiipt,\@viipt,\@vipt,\@vpt,\@xiipt} \DoNotIndex{\@xipt,\@xpt,\@xivpt,\@xviipt,\@xxpt,\@xxvpt} \DoNotIndex{\addcontentsline} \DoNotIndex{\advance,\aftergroup,\baselinestretch,\begin} \DoNotIndex{\belowdisplayshortskip,\belowdisplayskip,\bf,\bgroup} \DoNotIndex{\box,\c@@page,\c@page,\c@secnumdepth,\clearpage,\columnsep} \DoNotIndex{\columnwidth,\copy,\dimen@,\dimen@i,\dimen@ii,\divide} \DoNotIndex{\dp,\ds@article,\ds@notes,\ds@notesonly} \DoNotIndex{\ds@slidesonly,\egrou,\end,\end@dblfoloat,\end@float} \DoNotIndex{\endinput,\fnsymbol,\footheight,\footnotesep,\footskip} \DoNotIndex{\global,\globaldefs,\hbox,\headheight,\headsep,\hfil} \DoNotIndex{\hrule,\hskip,\hss,\ht,\Huge,\huge} \DoNotIndex{\if@filesw,\if@test,\if@twocolumn,\if@twoside} \DoNotIndex{\ifcase,\ifdim,\ifvmode,\ignorespaces} \DoNotIndex{\input,\interlinepenalty,\itemsep,\ixpt,\label} \DoNotIndex{\labelsep,\labelwidth,\LARGE,\large,\Large} \DoNotIndex{\leavevmode,\leftmargin,\leftmargini,\leftmarginii} \DoNotIndex{\leftmarginiii,\leftmarginiv,\leftmarginv} \DoNotIndex{\leftmarginvi,\leftmark,\leftskip,\lineskip} \DoNotIndex{\magstep,\marginparsep,\marginparwidth,\markboth} \DoNotIndex{\markright,\medbreak,\multiply,\newbox,\newcount} \DoNotIndex{\newcounter,\newdimen,\newif,\newlabel,\newpage} \DoNotIndex{\newtoks,\nobreak,\nointerlineskip,\normallineskip} \DoNotIndex{\normalsize,\null,\number,\numberline,\oddsidemargin} \DoNotIndex{\offinterlineskip,\or,\par,\parbox,\parskip,\partopsep} \DoNotIndex{\prevdepth,\protect,\ref,\refstepcounter,\rightmrk} \DoNotIndex{\rm,\scriptsize,\section,\sectionmark,\setbox,\setcounter} \DoNotIndex{\sl,\small,\stepcounter,\string,\textheight,\textwidth} \DoNotIndex{\thefootnote,\thepage,\thesection,\thesubsection} \DoNotIndex{\thispagestyle,\tiny,\topmargin,\topsep,\uppercase} \DoNotIndex{\vbox,\vfill,\viiipt,\viipt,\vipt,\vpt,\vskip,\vss} \DoNotIndex{\wd,\xcommentloaded@,\xdef,\xiipt,\xipt,\xivpt,\xpt} \DoNotIndex{\xviipt,\xxpt,\xxvpt,\z@} \DoNotIndex{\abovedisplayskip,\abovedisplayshortskip,\@currentlabel} \DoNotIndex{\@dottedtocline,\@ne\@setsize,\@starttoc,\@tempboxa,\@} \DoNotIndex{\arraystretch,\centerline,\egroup,\end@dblfloat} \DoNotIndex{\evensidemargin,\footnotesize,\ifnum,\parindent,\parsep} \DoNotIndex{\rightmark,\@afterindenttrue,\@ne,\if@specialpage.\long} \DoNotIndex{\fboxrule,\fboxsep,\@for,\vfil} \DoNotIndex{\@@fortmp,\@@tempa,\@@tempb,\@ehd,\@for,\@fortmp,\@m} \DoNotIndex{\@mparswitchfalse,\@mparswitchtrue,\@nnil,\@spaces} \DoNotIndex{\@specialstyle,\@temptokena,\@twosidefalse,\@twosidetrue} \DoNotIndex{\@whilenum,\alph,\arabic,\count@,\errhelp,\errmessage} \DoNotIndex{\fbox,\index,\minipage,\newcommand,\overfullrule} \DoNotIndex{\pagestyle,\raggedright,\ref@stepcounter,renewcommand} \DoNotIndex{\semcolor@loaded,today,\@tempcnta,\@tempcntb,\trivlist,\t,\p} \DoNotIndex{\today,\item,\@colht,\@currenvir,\@thefoot,\@thehead} \DoNotIndex{\@totalleftmargin,\allowbreak,\@captype,\@footnotetext} \DoNotIndex{\@listdepth,\@minipagefalse,\@minipagetrue,\@mpfn,\@mpfootins} \DoNotIndex{\endtrivlist,\everypar,\hsize,\ifvoid,\lastskip} \DoNotIndex{\linewidth,\skip,\thempfn,\thempfootnote,\topskip,\unvbox} \DoNotIndex{\@@input,\@@par,\@acci,\@accii,\@acciii,\@cclv,\@height} \DoNotIndex{\@maxdepth,\@tempdimb,\@tempg,\@temph,\@texttop,\@twocolumnfalse} \DoNotIndex{\@xfloat,\addvspace,\alloc@,\bigskipamount,\botmark,\chardef} \DoNotIndex{\closein,\closeout,\count,\countdef,\dimen,\glossary,\goodbreak} \DoNotIndex{\insc@unt,\intextsep,\kern,\mag,\marginpar,\maxdepth,\medskip} \DoNotIndex{\moveleft,\newinsert,\newskip,\onecolumn,\openin,\openout} \DoNotIndex{\read,\renewcommand,\repeat,\rightskip,\strut,\vfuzz,\voffset} \DoNotIndex{\vsize} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endinput %% END tvz-code.sty