home *** CD-ROM | disk | FTP | other *** search
- % NICE Version 2 macro package for plain TeX
- % written by
- % Christian Rank
- % Br\"augasse 13/225
- % D-8390 Passau
- % E-Mail: rank@unipas.fmi.uni-passau.de
- % (please don't e-mail from outside Germany!)
-
- % THIS MACRO PACKAGE MAY BE COPIED AND USED FREELY ONLY IN THIS ORIGINAL STATE
- % WITHOUT ANY CHANGES.
- % TO PRESERVE COMPATIBILITY, PLEASE DO NOT MODIFY THIS FILE UNDER ANY
- % CIRCUMSTANCES. YOU CAN CUSTOMIZE THE NICE PACKAGE FOR YOUR NEEDS VIA AN
- % AUXILIARY FILE WHICH READS IN NICE.TEX AND THEN CHANGES PARAMETERS
- % AND/OR DEFINES ADDITIONAL COMMANDS.
-
- % we check first if NICE has already been read, in which case we do not need
- % to define the NICE macros again.
- \expandafter\ifx\csname niceversion\endcsname \relax \else \endinput \fi
-
- % NICE hasn't already been read, so we continue
-
- \def\niceversion{2.0}
- \def\versionof {17/09/90}
-
- \immediate\write16 {NICE version \niceversion, (c) 1990 by C. Rank}
- \everyjob {\immediate\write16 {NICE version \niceversion \space of \versionof}}
-
- \catcode`\@=11 % for definition of private macros
-
- %
- % adjustment of general parameters
- %
- \vsize 9.2truein \hsize 6.5truein % page layout
- \baselineskip=12pt \lineskiplimit=0pt \lineskip=0pt
- \smallskipamount=6pt plus 1pt minus 1pt
- \medskipamount=12pt plus 2pt minus 2pt
- \bigskipamount=18pt plus 3pt minus 3pt
- \parskip=6pt plus 1pt minus 1pt
- \parindent=0pt
-
- \tolerance=10000
- \hbadness=5000
-
- %
- % the fonts used
- %
- \font\documenttitlefont=cmr10 scaled \magstep4
- \font\sectiontitlefont=cmbx10 scaled \magstep2
- \font\subsectiontitlefont=cmbx10 scaled \magstep1
- \font\subsubsectiontitlefont=cmbx10 scaled \magstephalf
- % fonts used for variable size styles
- \font\ninerm=cmr9 \font\eightrm=cmr8 \font\sixrm=cmr6
- \font\ninei=cmmi9 \font\eighti=cmmi8 \font\sixi=cmmi6
- \font\ninesy=cmsy9 \font\eightsy=cmsy8 \font\sixsy=cmsy6
- \font\ninebf=cmbx9 \font\eightbf=cmbx8 \font\sixbf=cmbx6
- \font\ninesl=cmsl9 \font\eightsl=cmsl8
- \font\ninett=cmtt9 \font\eighttt=cmtt8
- \font\nineit=cmti9 \font\eightit=cmti8 \font\sevenit=cmti7
-
- %
- % the variable size styles
- %
- \def\ninept{\textfont0=\ninerm \scriptfont0=\sevenrm
- \scriptscriptfont0=\fiverm
- \def\rm{\fam0 \ninerm}
- \textfont1=\ninei \scriptfont1=\seveni \scriptscriptfont1=\fivei
- \def\oldstyle{\fam1 \ninei}
- \textfont2=\ninesy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy
- \textfont\itfam=\nineit \def\it{\fam\itfam \nineit}
- \textfont\slfam=\ninesl \def\sl{\fam\slfam \ninesl}
- \textfont\bffam=\ninebf \scriptfont\bffam=\sevenbf
- \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam \ninebf}
- \textfont\ttfam=\ninett \def\tt{\fam\ttfam \ninett}
- \baselineskip=11pt
- \rm
- }
-
- \def\eightpt{\textfont0=\eightrm \scriptfont0=\sixrm
- \scriptscriptfont0=\fiverm
- \def\rm{\fam0 \eightrm}
- \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei
- \def\oldstyle{\fam1 \eighti}
- \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
- \textfont\itfam=\eightit \def\it{\fam\itfam \eightit}
- \textfont\slfam=\eightsl \def\sl{\fam\slfam \eightsl}
- \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
- \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam \eightbf}
- \textfont\ttfam=\eighttt \def\tt{\fam\ttfam \eighttt}
- \baselineskip=10pt
- \rm
- }
-
- \def\sevenpt{\textfont0=\sevenrm \scriptfont0=\sixrm
- \scriptscriptfont0=\fiverm
- \def\rm{\fam0 \sevenrm}
- \textfont1=\seveni \scriptfont1=\sixi \scriptscriptfont1=\fivei
- \def\oldstyle{\fam1 \seveni}
- \textfont2=\sevensy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy
- \textfont\itfam=\sevenit \def\it{\fam\itfam \sevenit}
- \textfont\slfam=\eightsl \def\sl{\fam\slfam \eightsl}
- \textfont\bffam=\sevenbf \scriptfont\bffam=\sixbf
- \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam \sevenbf}
- \textfont\ttfam=\eighttt \def\tt{\fam\ttfam \eighttt}
- \baselineskip=9pt
- \rm
- }
-
- \def\sixpt{\textfont0=\sixrm \scriptfont0=\fiverm
- \scriptscriptfont0=\fiverm
- \def\rm{\fam0 \sixrm}
- \textfont1=\sixi \scriptfont1=\fivei \scriptscriptfont1=\fivei
- \def\oldstyle{\fam1 \sixi}
- \textfont2=\sixsy \scriptfont2=\fivesy \scriptscriptfont2=\fivesy
- \textfont\itfam=\sevenit \def\it{\fam\itfam \sevenit}
- \textfont\slfam=\eightsl \def\sl{\fam\slfam \eightsl}
- \textfont\bffam=\sixbf \scriptfont\bffam=\fivebf
- \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam \sixbf}
- \textfont\ttfam=\eighttt \def\tt{\fam\ttfam \eighttt}
- \baselineskip=8pt
- \rm
- }
-
- \def\fivept{\textfont0=\fiverm \scriptfont0=\fiverm
- \scriptscriptfont0=\fiverm
- \def\rm{\fam0 \fiverm}
- \textfont1=\fivei \scriptfont1=\fivei \scriptscriptfont1=\fivei
- \def\oldstyle{\fam1 \fivei}
- \textfont2=\fivesy \scriptfont2=\fivesy \scriptscriptfont2=\fivesy
- \textfont\itfam=\sevenit \def\it{\fam\itfam \sevenit}
- \textfont\slfam=\eightsl \def\sl{\fam\slfam \eightsl}
- \textfont\bffam=\fivebf \scriptfont\bffam=\fivebf
- \scriptscriptfont\bffam=\fivebf \def\bf{\fam\bffam \fivebf}
- \textfont\ttfam=\eighttt \def\tt{\fam\ttfam \eighttt}
- \baselineskip=7pt
- \rm
- }
-
- %
- % this stuff defines a macro `include', which has the same effect as plain
- % TeX's `input', except that it is no error if the file does not exist.
- %
- \newread\testinclude
- \def\include#1{\immediate\openin\testinclude #1
- \ifeof\testinclude \immediate\write16 {No file #1.}
- \else \immediate\closein\testinclude \input #1
- \fi}
-
- %
- % general utilities
- %
- \def\newpage{\vfill\eject}
-
- \def\\{$\backslash$}
-
- \def\raggedcenter{\leftskip=0pt plus 4em \rightskip=\leftskip
- \parfillskip=0pt \spaceskip=.3333em \xspaceskip=.5em
- \pretolerance=9999 \tolerance=9999 \hbadness=10000
- \hyphenpenalty=9999 \exhyphenpenalty=9999}
-
- \def\parwithoutskip{{\parskip=0pt plus 0.5pt\par\noindent}\ignorespaces}
-
- \newdimen\narrowskip \narrowskip=20pt
- \def\lnarrower{\advance\leftskip by \narrowskip}
- \let\onarrower=\narrower
- \def\narrower{\advance\leftskip by \narrowskip
- \advance\rightskip by \narrowskip}
-
- \def\tw@num#1{\ifnum#1>9 #1\else 0#1\fi}
- \def\date{\tw@num{\the\day}/\tw@num{\the\month}/\the\year}
-
- \def\ifndef#1{\expandafter\ifx\csname#1\endcsname\relax}
-
- %
- % title and section layout
- %
- \long\def\title#1{{\raggedcenter \documenttitlefont #1 \par}}
-
- \def\titlepage{\begingroup
- \def\title##1{{\raggedcenter \documenttitlefont ##1 \par}\medskip}
- \long\def\author##1{{\parskip=0pt \raggedcenter \rm ##1 \par}}
- \def\release##1{\centerline{\bf ##1}}
- \def\abstract{\centerline{\bf Abstract}\narrowskip=3truecm \narrower}
- \def\endtitlepage{\vfil\egroup \newpage \endgroup}
- \vbox to \vsize \bgroup \vfil}
-
- \newcount\sectionno \sectionno=0
- \newcount\subsectionno
- \newcount\subsubsectionno
-
- \newtoks\sectionnscheme
- \sectionnscheme={\gensect. }
- \newtoks\subsectionnscheme
- \subsectionnscheme={\gensect.\number\subsectionno. }
- \newtoks\subsubsectionnscheme
- \subsubsectionnscheme={\gensect.\number\subsectionno
- .\number\subsubsectionno. }
-
- \def\genheading#1#2#3{\vskip\parskip \vbox{
- \setbox0 \hbox{#1#2} \hangindent=\the\wd0 \hangafter=1
- \noindent \raggedright \pretolerance=10000 \box0 #1#3\par}}
- \def\gensect{\ifnum \sectionno<0 \char\number-\sectionno
- \else \number\sectionno\fi}
-
- \def\plainsection#1{\removelastskip
- \bigskip
- \genheading{\sectiontitlefont}{}{#1}
- \ifnum\contentslevel>0
- {\let\the=0 \edef\next{\write\fcontents
- {\vskip\contskip \hbox to \hsize
- {\scstyle \hskip\the\scindent #1 \the\contfill\
- \the\pageno}}}\next}
- \immediate\write16 {#1}
- \fi
- \ifnum\marklevel>0 \mark {#1} \fi
- \nobreak}
-
- \def\section#1{\removelastskip
- \bigskip
- \ifnum \sectionno<-1 \global\advance\sectionno by -1
- \else \global\advance\sectionno by 1
- \fi
- \global\subsectionno=0
- \genheading{\sectiontitlefont}{\the\sectionnscheme}{#1}
- {\edef\nscheme{\the\sectionnscheme}
- \ifnum\contentslevel>0
- {\let\the=0 \edef\next{\write\fcontents
- {\vskip\contskip \hbox to \hsize
- {\scstyle \hskip\the\scindent \nscheme #1 \the\contfill\
- \the\pageno}}}\next}
- \immediate\write16 {\nscheme #1}
- \fi
- \ifnum\marklevel>0 \mark {\nscheme #1} \fi
- }
- \nobreak}
-
- \def\subsection#1{\removelastskip
- \smallskip
- \global\advance\subsectionno by 1 \global\subsubsectionno=0
- \genheading{\subsectiontitlefont}{\the\subsectionnscheme}{#1}
- {\edef\nscheme{\the\subsectionnscheme}
- \ifnum\contentslevel>1
- {\let\the=0 \edef\next{\write\fcontents
- {\hbox to \hsize
- {\sscstyle \hskip\the\sscindent \nscheme #1 \the\contfill\
- \the\pageno}}}\next}
- \immediate\write16 {\nscheme #1}
- \fi
- \ifnum\marklevel>1 \mark {\nscheme #1} \fi
- }
- \nobreak}
-
- \def\subsubsection#1{
- \par
- \global\advance\subsubsectionno by 1
- \genheading{\subsubsectiontitlefont}{\the\subsubsectionnscheme}{#1}
- {\edef\nscheme{\the\subsubsectionnscheme}
- \ifnum\contentslevel>2
- {\let\the=0 \edef\next{\write\fcontents
- {\hbox to \hsize
- {\ssscstyle \hskip\the\ssscindent \nscheme #1 \the\contfill\
- \the\pageno}}}\next}
- \immediate\write16 {\nscheme #1}
- \fi
- \ifnum\marklevel>2 \mark {\nscheme #1} \fi
- }
- \nobreak}
-
- \def\appendix{\global\sectionno=-64\relax}
-
- %
- % macros for making a table of contents
- %
- \newtoks\contfill
- \contfill={\hfil}
- \newskip\contskip \contskip=0pt % additional skip between section headings
- % in contents table
- \newcount\contentslevel \contentslevel=0
- \newwrite\fcontents
- \def\makevoidcontents{
- \openout\fcontents \jobname.toc
- \ifnum\contentslevel=0 \global\contentslevel=1 \fi
- \immediate\write16 {Writing contents on \jobname.toc.}
- }
- \def\makecontents{
- \catcode`\@=11
- \include {\jobname.toc}
- \catcode`@=12
- \makevoidcontents
- }
- \newdimen\scindent
- \newdimen\sscindent
- \newdimen\ssscindent % please forgive me;
- % i know it's a horrible abbreviation
- \scindent=0pt
- \sscindent=12pt
- \ssscindent=32pt
- \let\scstyle=\rm
- \let\sscstyle=\rm
- \let\ssscstyle=\rm % please forgive me once again ...
-
- %
- % footnotes
- %
- \let\ovfootnote=\vfootnote
- \newdimen\footnoteindent
- \footnoteindent=20pt
- \def\vfootnote#1{\insert\footins\bgroup
- \parindent=\footnoteindent % change
- \ifndef{footnotestyle} \baselineskip=\fbaselineskip \footfont
- \else \footnotestyle \fi
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\ht\strutbox % top baseline for broken footnotes
- \splitmaxdepth\dp\strutbox \floatingpenalty\@MM
- \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip
- \def\par{\endgraf \hangindent=\footnoteindent \hangafter=1}
- \hangindent=\footnoteindent \hangafter=1
- \textindent{#1}\footstrut\futurelet\next\fo@t}
- \let\plainfootnote=\footnote
- \newcount\footno \footno=0
- \newskip\fbaselineskip \fbaselineskip=\baselineskip
- \font\footfont=cmr10
- \def\footnote{\global\advance\footno by 1
- \plainfootnote{\hbox{$^{\the\footno}$}}
- }
- \long\def\f@t#1{#1\@foot} % enable \par in footnotes
-
- %
- % defs for staggered layout
- %
- \newbox\staggbox
- \def\staggered#1{\begingroup
- \setbox\staggbox \hbox {#1}
- \edef\key##1{\par \hangindent=\the\wd\staggbox \hangafter=1
- \noindent \hbox to \the\wd\staggbox {##1\hfil}\ignorespaces}
- \def\endstaggered{\endgraf \endgroup}
- \skip0=\hangindent
- \parskip=0pt plus 0.5pt \vskip\parskip
- \advance \leftskip by \skip0
- \def\par{\endgraf \hangindent=\the\wd\staggbox \hangafter=0}
- }
-
- \def\itemlist#1{\begingroup
- \setbox\staggbox \hbox {#1}
- \edef\next{\par \hangindent=\the\wd\staggbox \hangafter=1
- \noindent \hbox{#1}\ignorespaces}
- \def\enditemlist{\endgraf \endgroup}
- \skip0=\hangindent
- \parskip=0pt plus 0.5pt \vskip\parskip
- \advance \leftskip by \skip0
- \def\par{\endgraf \hangindent=\the\wd\staggbox \hangafter=0}
- }
-
- \newcount\itemno
- \def\numbered#1{\ifcase #1 \staggered {0. } \or \staggered {0. } \or
- \staggered {00. } \or \staggered {000. } \fi
- \itemno=0
- \def\next{\advance \itemno by 1 \key {\hfill \the\itemno. }}
- \def\endnumbered{\endstaggered}
- }
-
- \def\alphanumbered{\staggered {m) }
- \itemno=96
- \def\next{\advance \itemno by 1 \key {\char\itemno ) }}
- \def\endalphanumbered{\endstaggered}
- }
-
- \def\pnumbered{\staggered{(0) }
- \itemno=0
- \def\next{\advance \itemno by 1 \key {(\the\itemno)}}
- \def\endpnumbered{\endstaggered}
- }
-
- \def\prnumbered{\staggered{(iii) }
- \itemno=0
- \def\next{\advance \itemno by 1 \key {(\romannumeral\itemno)}}
- \def\endprnumbered{\endstaggered}
- }
-
- %
- % the style for headlines and footlines
- %
- \newcount\marklevel \marklevel=1
- \newdimen\hdrulepos \hdrulepos=-2pt
- \def\hdrule{\kern\hdrulepos \hrule}
- \def\book{
- \headline={\ifnum\pageno>1\vbox
- {\line{\strut \ifodd\pageno \tenit\firstmark\hfil\tenbf\folio
- \else \tenbf\folio\hfil\tenit\firstmark \fi}\hdrule}\else
- \hfil \fi}
- \footline={\hfil}
- }
- \def\article{
- \headline={\ifnum\pageno>1\vbox
- {\line{\strut \tenit\firstmark\hfil\tenbf\folio}\hdrule}\else
- \hfil \fi}
- \footline={\hfil}
- }
-
- %
- % macros for verbatim mode
- %
- \font\verbatimfont=cmtt10
- \newskip\vbaselineskip
- \vbaselineskip=\baselineskip
- \let\d@specials=\dospecials
- \def\uncatcodespecials{\def\do##1{\catcode`##1=12}\dospecials}
- \def\beginverbatim{\par\begingroup \let\oldpar=\par
- \ifndef{verbatimstyle} \baselineskip=\vbaselineskip \verbatimfont
- \else \verbatimstyle\tt \fi
- \noindent\parskip=0pt
- \catcode`|=12
- \setupverbatim \doverbatim}
- {\catcode`\|=0 \catcode`\\=12
- |obeylines|gdef|doverbatim^^M#1\endverbatim{#1|endgroup}}
- \def\setupverbatim{\def\par{\leavevmode\oldpar}\catcode`\`=\active
- \obeylines \uncatcodespecials \obeyspaces}
- {\obeyspaces\global\let =\ }
- {\catcode`\`=\active \gdef`{\relax\lq}}
-
- %
- % macros for verbatim mode inside paragraph
- %
- \def\spvert{\ifmmode\def\n@xt{|}\else\let\n@xt=\txver\fi\n@xt}
- \catcode`\|=\active \let |=\spvert
- {\obeylines\gdef\txver{\begingroup\tt\setupverbatim\let^^M=\ \let|=\endgroup}}
-
- %
- % this defines the environment for \usemathsymbols
- %
- {\catcode`|=12
- \global\let\nice@mvert=|
- }
- \let\nice@mlt=<
- \let\nice@mgt=>
- \let\nice@mlbr=\{
- \let\nice@mrbr=\}
- \def\{{\ifmmode \nice@mlbr \else $\nice@mlbr$\fi}
- \def\}{\ifmmode \nice@mrbr \else $\nice@mrbr$\fi}
-
- {
- \catcode`\|=\active
- \catcode`\<=\active
- \catcode`\>=\active
- \gdef\usemathsymbols{
- \catcode`\|=\active
- \catcode`\<=\active
- \catcode`\>=\active
- \def|{\ifmmode \nice@mvert \else $\nice@mvert$\fi}
- \def<{\ifmmode \nice@mlt \else $\nice@mlt$\fi}
- \def>{\ifmmode \nice@mgt \else $\nice@mgt$\fi}
- \let\d@@specials=\dospecials
- \def\dospecials{\d@@specials \do \< \do \>}
- }
- }
-
- %
- % cross references
- %
- \newwrite\frefs
- \def\userefs{
- \catcode`\@=11
- \include {\jobname.crf}
- \catcode`@=12
- \openout\frefs \jobname.crf
- \immediate\write16 {Writing references on \jobname.crf.}
- }
- {\catcode`\|=0 \catcode`\\=12
- |gdef|escapeit{\}
- }
-
- \def\label#1{{\let\the=0\edef\next{\write\frefs
- {\def\noexpand\escapeit rs@#1{\number\sectionno
- \ifnum\subsectionno=0 \else
- .\number\subsectionno
- \ifnum\subsubsectionno=0 \else
- .\number\subsubsectionno
- \fi\fi}}}\next
- \edef\next{\write\frefs
- {\def\noexpand\escapeit rp@#1{\the\pageno}}}\next
- }}
- \def\sref#1{{\catcode`\@=11 \toks0=\expandafter{\csname rs@#1\endcsname}\relax
- \expandafter\ifx\the\toks0\relax
- [`#1']\write16{Label `#1' undefined on page \the\pageno.}\else
- \the\toks0 \fi
- }}
- \def\pref#1{{\catcode`\@=11 \toks0=\expandafter{\csname rp@#1\endcsname}\relax
- \expandafter\ifx\the\toks0\relax
- [`#1']\write16{Label `#1' undefined on page \the\pageno.}\else
- \the\toks0 \fi
- }}
-
- %
- % automatic numbering of figures
- %
- \newcount\figureno \figureno=0
- \def\figure#1#2{\global\advance\figureno by 1 \centerline {\bf Fig.\
- \the\figureno: #2}{\let\the=0\edef\next{\write\frefs
- {\def\noexpand\escapeit rf@#1{\number\figureno}}}\next
- }}
- \def\fref#1{{\catcode`\@=11 \toks0=\expandafter{\csname rf@#1\endcsname}\relax
- \expandafter\ifx\the\toks0\relax
- [`#1']\write16{Figure `#1' undefined on page \the\pageno.}\else
- \the\toks0 \fi
- }}
-
- %
- % \program macro for the comfortable typing of program texts
- %
- \newdimen\pindent \pindent=0pt
- \newdimen\ppindent
- \newif\ifinb@x \inb@xfalse
- {\let\+=\undefined
- \gdef\program{\begingroup
- \def\bb@x{\setbox0=\hbox\bgroup\inb@xtrue\ignorespaces}
- \def\cr{\egroup \hbox {\hskip\leftskip \hskip\ppindent
- \unhbox1 \unhbox0}
- \ppindent=\pindent
- \bb@x}
- \def\+{\egroup \begingroup
- \def\endprogram{\errmessage{\noexpand\- inserted}
- \ifinb@x \egroup \fi \endgroup \endprogram}
- \advance \pindent by \wd0
- \setbox1=\hbox{\unhbox1 \unhbox0}
- \bb@x}
- \def\-{\egroup \endgroup \ppindent=\pindent
- \bb@x}
- \def\noalign##1{\egroup ##1\bb@x}
- \def\endprogram{\ifinb@x \egroup \fi \endgroup}
- \setbox1=\null
- \ppindent=\pindent
- \futurelet\next\pr@gram}
- }
- \def\pr@gram{\ifx\next\obeylines \let\par=\cr
- \let\next=\pr@gr@m \obeylines \else \let\next=\relax \fi
- \bb@x\next}
- \def\pr@gr@m{\let\next=}
-
- %
- % macros for making framed boxes
- %
- \long\def\gbox#1#2#3#4{\vbox{\hrule height#1 \hbox
- {\vrule width#1\kern#3\vbox{
- \kern#2 #4\ifhmode \par \fi \kern#2}\kern#3\vrule width#1}
- \hrule height#1}
- }
- \newdimen\boxedkern \boxedkern=12pt
- \newdimen\rulethickness \rulethickness=0.4pt
- \long\def\boxed#1{\gbox\rulethickness\boxedkern\boxedkern{
- \advance\hsize by -\rulethickness
- \advance\hsize by -\rulethickness
- \advance\hsize by -\boxedkern
- \advance\hsize by -\boxedkern
- {\parskip=0pt \noindent}\ignorespaces #1}}
-
- \catcode`@=12 % disable use of private macros
-