% -*- Mode: TeX; Syntax: Common-lisp; Package: LISTEX; -*- %% macros for the LISTEX system by DCB % setup \catcode`\@=11 % fonts \def\LTnormalfont {\rm} \def\LTcommentfont {\it} \def\LTpuncfont {\tt} \def\LTcodefont {\rm} \def\LTcodepuncfont {\tt} \def\LTslantedcode {% \font\sltt=cmsltt10 \def\LTcodefont{\sl}% \def\LTcodepuncfont{\sltt}} \def\slantedcode{\LTslantedcode} \def\LTboldcode {% \def\LTcodefont{\bf}% \def\LTcodepuncfont{\tt}} \def\boldcode{\LTboldcode} \def\LTtypewritercode {% \def\LTcodefont{\tt}} \def\typewritercode{\LTtypewritercode} % delimiters \newdimen\LTparenkern \LTparenkern=.1pt \newdimen\LTcommentkern \LTcommentkern=1pt \newdimen\LTspacewidth \LTspacewidth=.45em \def\LTop/{{\rm(\kern\LTparenkern}} \def\LTcp/{\/{\rm\kern\LTparenkern)}} \def\LTobrace/{{$\{$\kern\LTparenkern}} \def\LTcbrace/{\/{\kern\LTparenkern$\}$}} \def\LTquot/{\raise.3ex\hbox{\LTpuncfont\char`\"}} \def\LTstar/{\lower.05ex\hbox{\LTpuncfont\char`\*}} \def\LTchr {\LTpuncfont\char} \def\LTsetpwidth {\setbox\z@=\hbox{\LTop/}\LTpwidth=\wd\z@} \newdimen\LTpwidth \LTsetpwidth % indentations \def\LTpi/{\kern\LTpwidth} % increment for plus1 \def\LTpii/{\kern 2\LTspacewidth} % increment for plus2 \def\LTpiv/{\kern 4\LTspacewidth} % increment for plus4 \def\LTks #1{\kern #1\LTspacewidth} % kern a number of space widths % boxes \newbox\LTbox \newdimen\LTboxw \def\LTsb {\setbox\LTbox=\hbox} % start a box \def\LTdb/{\box\LTbox} % dump out a box \def\LTbb {\LTboxw=\wd\LTbox % output a box and backspace over it \box\LTbox \kern-\LTboxw} % markers \def\LTsm #1{\xdef#1{\the\wd\LTbox}% % set a mark register \box\LTbox} \def\LTkr #1{\kern #1\relax} % kern a register \def\LTkm {\LTbb\LTkr} % kern to a marked position % modules % output modules in boxes? \newif\ifLTboxmodules % keep track of position in file: top, after module, before module \newif\iffirstmodule \firstmoduletrue \newif\ifmodule % incrementally number modules \newcount\modulecount % normal modules \def\LTbeginmodule/{% \iffirstmodule \firstmodulefalse \else \LTfilbreak \bigskip \fi \advance\modulecount\@ne \LTmarkmodule \ifLTboxmodules \vbox\bgroup \else \begingroup \fi \LTmoduledefs \noindent {\bf \number\modulecount.}\enspace \ignorespaces} \def\LTendmodule/{% \endgraf \ifLTboxmodules \egroup \else \endgroup \fi \moduletrue} \def\LTmarkmodule {} \def\LTmoduledefs {% \LTmodulehook \LTsetpwidth} \def\LTmodulehook {} % star modules \def\LTbeginstarmodule #1{% \iffirstmodule \firstmodulefalse \else \vfil \eject \fi \advance\modulecount\@ne \LTmarkstarmodule{#1}% \ifLTboxmodules \vbox\bgroup \else \begingroup \fi \LTmoduledefs \noindent {\bf \number\modulecount. \ignorespaces #1\par} \nobreak \smallskip \noindent \ignorespaces} \def\LTmarkstarmodule {\message{*\number\modulecount}\mark} % spacing and layout \def\LTfilbreak {\vfil\penalty-200\vfilneg} \def\LTfilnobreak {\vfil\penalty9999\vfilneg} \parindent=2em \interlinepenalty=10000 % forbid breaks in paragraphs % code in module text \def\LTbcode/{\begingroup \let\LTpuncfont=\LTcodepuncfont \LTcodedefs \LTcodefont \LTsetpwidth} \def\LTecode/{\/\endgroup} % code \def\LTbeginlisp/{% \iffirstmodule \beginmodule \endmodule \fi \ifmodule \modulefalse \LTfilnobreak \bigskip \else \LTfilnobreak \medskip \fi \vbox\bgroup \LTcodedefs \LTnormalfont \LTsetpwidth} \def\LTendlisp/{% \egroup} \def\LTcodedefs {% \spaceskip=\LTspacewidth \xspaceskip=\LTspacewidth \LTcodehook} \def\LTcodehook {} % module text in code \def\LTcommentdefs {\spaceskip=\z@ \xspaceskip=\z@ \LTcommentfont \LTsetpwidth} \def\LTbcom/{\begingroup \LTcommentdefs {\rm;\kern\LTcommentkern}} \def\LTecom/{\endgroup} % miscellany \ifx\lisp\undefined \def\lisp {Lisp} \let\LISP=\lisp \let\Lisp=\lisp \fi \def\listex {Lis\kern-.1667em\TeX} \let\LISTEX=\listex \let\Listex=\listex \hsize=30pc \vsize=50pc \LTboxmodulesfalse % cleanup \catcode`\@=12