From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/ytex/ybase.mac | 914 ++++++++++++++++++++++++ macros/ytex/yfonts.mac | 155 +++++ macros/ytex/ylog.mac | 494 +++++++++++++ macros/ytex/ysite.mac | 11 + macros/ytex/ytex-cm.tex | 4 + macros/ytex/ytex.ieee | 250 +++++++ macros/ytex/ytex.mac | 92 +++ macros/ytex/ytex.mail | 75 ++ macros/ytex/yusage.lst | 55 ++ macros/ytex/yusage.tex | 1772 +++++++++++++++++++++++++++++++++++++++++++++++ macros/ytex/yuser.mac | 1351 ++++++++++++++++++++++++++++++++++++ 11 files changed, 5173 insertions(+) create mode 100644 macros/ytex/ybase.mac create mode 100644 macros/ytex/yfonts.mac create mode 100644 macros/ytex/ylog.mac create mode 100644 macros/ytex/ysite.mac create mode 100644 macros/ytex/ytex-cm.tex create mode 100644 macros/ytex/ytex.ieee create mode 100644 macros/ytex/ytex.mac create mode 100644 macros/ytex/ytex.mail create mode 100644 macros/ytex/yusage.lst create mode 100644 macros/ytex/yusage.tex create mode 100644 macros/ytex/yuser.mac (limited to 'macros/ytex') diff --git a/macros/ytex/ybase.mac b/macros/ytex/ybase.mac new file mode 100644 index 0000000000..d105e34999 --- /dev/null +++ b/macros/ytex/ybase.mac @@ -0,0 +1,914 @@ +% Copyright (c) 1985, 1986 Daniel C. Brotsky. All rights reserved. +% Base macros for yTeX. See the file YTEX.MAC for details. + +% CONTENTS + +% ^L-page contents +% ---------------------------------------------------------------------- +% 1 %% Helpful TeX82 macros built on Plain-AlmostCM TeX +% 2 %% handy hacks +% 3 %% more handy hacks +% 4 %% date and time +% 5 %% combinators +% 6 %% special chars +% 7 %% spacing +% 8 %% runners +% 9 %% glosses +% 10 %% inserts +% 11 %% output +% 12 %% page glue +% 13 %% paragraphs +% 14 %% textual displays +% 15 %% tables +% 16 %% titles +% 17 %% special pages +% 18 %% auxiliary files +% 19 %% initialization + + \message{handy hacks,} + +% some more scratch registers +\dimendef\dimen@ii=2 +\skipdef\skip@i=1 +\skipdef\skip@ii=2 +\toksdef\toks@i=1 +\toksdef\toks@ii=2 + +% quick names for character codes +\chardef\@ctive=13 +\chardef\@ther=12 +\chardef\@scape=0 + +% define variations on \vbox and \hbox +\let\vbottom=\vbox +\let\vopen=\relax +\let\hopen=\relax + +% turn interlineskip off and on +\def\offinterlineskip {% + \ifdim \lineskiplimit<\maxdimen + \edef\oninterlineskip{\baselineskip=\the\baselineskip + \lineskip=\the\lineskip \lineskiplimit=\the\lineskiplimit\relax}% + \fi + \baselineskip-1000\p@ \lineskip\z@ \lineskiplimit\maxdimen} +\let\oninterlineskip=\relax +\let\yesinterlineskip=\relax + +% write token lists to the terminal +\def\toksmessage #{% + \afterassignment\t@ksmessage + \toks@=} +\def\t@ksmessage {\message{\the\toks@}} + +% set/add to a token list or a macro +\def\etoks #1{\let\et@ks=#1\afterassignment\eto@s\et@ks} +\def\eto@s {\edef\next{\the\et@ks}\edef\next{\next}\et@ks=\expandafter{\next}} +\def\addtotoks #1{% + \let\addtot@ks=#1% + \afterassignment\addt@toks \toks@} +\def\addt@toks {% + \edef\next{\the\addtot@ks\the\toks@}% + \addtot@ks=\expandafter{\next}} +\def\addtodef #1#2{% + \toks@=\expandafter{#1#2}\edef#1{\the\toks@}} +\def\pushtodef #1#2{% + \toks@=\expandafter{#1}\toks@i={#2}\edef#1{\the\toks@i\the\toks@}} + +% strip the \ and letters from the front of a csname, leave result in \next +{\catcode`\|=\@scape |catcode`\\=|@ther + |gdef|stripn@me #1#2{% + {|def|gobble \#1##1\{##1}% + |global|edef|next{|expandafter|gobble|string#2\}}}} + +% get the arg of a paired delimiter pair (arg is \endXXX) +% N.B. Use this only within a local group: it clobbers itself +\def\get@rg #1{\def\get@rg ##1#1{\toks@={##1}#1}} + +% get confirmation +\def\@yes{yes} +\def\@no{no} +\newif\ifyes +\def\yesornop #1{% + \immediate\write\sixt@@n{}% + \loop + \message{#1 (yes or no) }% + {\catcode`\^^M=14\relax \global\read\m@ne to\next} + \ifx\next\@yes \global\yestrue + \else\ifx\next\@no \global\yesfalse + \else\let\next\yesornop \fi\fi + \ifx\next\yesornop \repeat} +\def\askuser #1#2{% + \immediate\write\sixt@@n{}% + \message{#2}% + {\catcode`\^^M=14\relax \global\read\m@ne to#1}} +\def\askuserline #1#2{% + \immediate\write\sixt@@n{}% + \immediate\write\sixt@@n{#2}% + {\catcode`\^^M=14\relax \global\read\m@ne to#1}} + +% \input manipulations +\newwrite\tfil@ +\def\maybeinput #1 {% + \yesornop {Input file #1?}% + \ifyes \input #1 \fi} +\def\@input #1#2{% + \openin\tfil@=#1 % + \ifeof\tfil@ #2\else \closein\tfil@ \input #1 \fi} +\def\@input@ #1#2{% + \openin\tfil@=#1 % + \ifeof\tfil@ + \closein\tfil@\openin\tfil@=\ytexlibrary #1 % + \ifeof\tfil@ #2\else \closein\tfil@ \input \ytexlibrary #1 \fi + \else \closein\tfil@ \input #1 \fi} + +% set a skip parameter with explicit dimen, glue, and factor +\def\setskip {\afterassignment\setski@\let\next=} +\def\setski@ \dimen{\afterassignment\setsk@p\dimen@} +\def\setsk@p \glue{\afterassignment\s@tskip\skip@} +\def\s@tskip \factor{\dimen@i=\skip@\advance\skip@ by-\dimen@i + \afterassignment\s@tsk@p\multiply\skip@ by} +\def\s@tsk@p {\divide\skip@ by\@m\advance\skip@ by\dimen@ \next=\skip@} + +% skip the stretch amount of glue but not the dimen amount +\def\vstretch {\afterassignment\vstr@tch\skip@=} +\def\vstr@tch {\dimen@=\skip@ \advance\skip@ by-\dimen@ \vskip\skip@} + +% manipulate special chars +\def\addspecial #1{\addtodef\dospecials{\do#1}} +\def\specials@ther {% + \relax\iffalse{\fi % gross hackery for tables + \def\do##1{\catcode`##1=\@ther}\dospecials + \iffalse}\fi\relax} + +% make active space and CR be the arg +% get a token which is \ifx-equal to active space +{\obeylines% + \gdef\activelines #1{\catcode`\^^M=\@ctive \let^^M=#1\relax}% +} % end of def group +{\obeyspaces + \gdef\activespaces#1{\obeyspaces\let =#1\relax\let\sp@ce= \relax}% +} % end of def group + + \message{date and time,} + +\newcount\hour \newcount\minute + +\def\st@rttime {% + \hour=\the\time \minute=\the\time + \divide\hour by 60 \multiply\hour by 60% + \advance\minute by -\hour \divide\hour by 60% + \edef\daytime{\number\hour:\ifnum \minute<10 0\fi\number\minute}% + \edef\monthname {\ifcase\month \or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi}% + \edef\monthshortname {\ifcase\month \or + Jan\or Feb\or Mar\or Apr\or May\or Jun\or + Jul\or Aug\or Sep\or Oct\or Nov\or Dec\fi}% + {\def\gobble ##1##2##3##4{##3##4}% + \global\edef\shortyear{\expandafter\gobble\number\year}}% + \edef\date{\monthname~\number\day,~\number\year}% + \edef\shortdate{\number\day~\monthshortname~\number\shortyear}% + \edef\slashdate{\number\month/\number\day/\number\shortyear}} + + \message{combinators,} + +% spreads +{\let\newdimen=\relax % allow next def +\gdef\newspread #1\setup #2\endnew{% + \stripn@me{}#1% + \expandafter\newdimen\csname \next width\endcsname + \toks@={\hbox to}\toks@i={\bgroup #2\spre@d}% + \edef#1##{\the\toks@\expandafter\noexpand\csname \next width\endcsname + \the\toks@i}} +} % end of def group +\def\spre@d #1{% + \setbox\z@=\hbox{#1\Hss}% + \futurelet\next\spr@ad} +\def\spr@ad {% + \ifcat \bgroup\noexpand\next + \hbox to\z@{\hss\unhbox\z@\hss}\hfil + \let\next=\spr@@d + \else + \hbox to\z@{\hss\unhbox\z@}% + \let\next=\egroup + \fi \next} +\def\spr@@d #1{% + \setbox\z@=\hbox{#1}% + \futurelet\next\spr@ad} + +% text wrappers +\long +\def\newtextwrap #1\box #2\setup #3% + \before #4\after #5% + \begin #6\end #7\endnew{% + \stripn@me{}#1% + \toks@={#4\begingroup #3\relax #2}% + \edef#1{% + \the\toks@ \expandafter\noexpand\csname read@\next\endcsname}% + \toks@={\bgroup #6}\toks@i={#7\egroup\endgroup #5}% + \long + \expandafter\edef\csname read@\next\endcsname ##1{% + \the\toks@ ##1\the\toks@i}} + + \message{special chars,} + +% ` needs can be directed backquote +\addspecial\` +\let\agr@ve=\` +\def\bqm@cro {\char"12\relax} +\def\makebbqaccent {\let\`=\agr@ve} +\def\makebbqquote {\let\`=\bqm@cro} +{\catcode`\`=\@ctive\relax + \gdef\makebqspecial {\catcode"60=\active\relax \let`=\bqm@cro} + \gdef\makebqnormal {\catcode"60=\@ther \chardef`="60\relax} +} % end of def group + + +% & and # need to be `ordinary' characters for lisp +\def\makeandother {\catcode`\&=\@ther} +\def\makeandalign {\catcode`\&=4\relax} +\def\makesharpother {\catcode`\#=\@ther} +\def\makesharpparam {\catcode`\#=6\relax} + +% < and > can be angle brackets in text +\addspecial\< +\addspecial\> +\let\@@lt=< \let\@@gt=> +{\catcode`\<=\@ctive \catcode`\>=\@ctive \relax + \gdef\makelgtbrackets{% + \catcode`\<=\@ctive \catcode`\>=\@ctive\relax + \def<{\ifmmode\@@lt\else$\m@th\langle$\fi}% + \def>{\ifmmode\@@gt\else$\m@th\rangle$\fi}% + \sl@shifylgt}} +\def\sl@shifylgt {% + \def\<{\ifmmode\@@lt\else$\m@th\@@lt$\fi}% + \def\>{\ifmmode\@@gt\else$\m@th\@@gt$\fi}} +\def\makelgtother {% + \catcode`\<=\@ther\catcode`\>=\@ther + \def\<{\relax \ifmmode \langle \else $\langle$\fi} + \def\>{\relax \ifmmode \rangle \else $\rangle$\fi}} + + \message{spacing,} + +% vertical glue +\def\vgluefil {\vglue \z@ plus1fil\relax} +\def\vgluefill {\vglue \z@ plus1fill\relax} +\def\Vss {\vskip \z@ plus1fill minus1fill\relax} +\def\VSS {\vskip \z@ plus1filll minus1filll\relax} + +% horizontal glue +\def\hfilll {\hskip \z@ plus1filll\relax} +\def\hfilllneg {\hskip \z@ plus-1filll\relax} +\def\Hss {\hskip \z@ plus1fill minus1fill\relax} +\def\HSS {\hskip \z@ plus1filll minus1filll\relax} + +% glue amounts +\newskip\fillskip \fillskip=\z@ plus1fill +\newskip\filskip \filskip=\z@ plus1fil +\newskip\zeroskip \zeroskip=\z@ +\newskip\emskip \emskip=1em + +% page glue +\def\filpage {\par\vfil\eject} +\def\superfilpage {\par\vfil\supereject} + +% paragraph glue +\def\linebreak {\ifhmode\nobreak\hskip\z@ plus1fil\break\fi} + +% require minimum vertical space +\def\minskip {\afterassignment\m@nskip\skip@} +\def\m@nskip {% + \ifdim \lastskip<\skip@ + \nobreak \vskip-\lastskip \vskip\skip@ \fi} +\def\minbreak {\afterassignment\m@nbreak\count@} +\def\m@nbreak {\afterassignment\m@nbre@k\skip@} +\def\m@nbre@k {% + \ifdim \lastskip<\skip@ + \nobreak \vskip-\lastskip \penalty\count@ \vskip\skip@ \fi} +\def\dobreak {\afterassignment\d@break\count@} +\def\d@break {\afterassignment\d@bre@k\skip@} +\def\d@bre@k {\penalty\count@ \vskip\skip@} + + \message{runners,} + +% control of runners +\newif\ifheaders +\newif\iffooters +\let\res@theaders=\relax +\let\res@tfooters=\relax +\def\res@trunners {\res@theaders \res@tfooters} +\def\noheaders {\global\headersfalse} +\def\nofooters {\global\footersfalse} +\def\norunners {\noheaders \nofooters} +\def\yesheaders {\global\headerstrue} +\def\yesfooters {\global\footerstrue} +\def\yesrunners {\yesheaders \yesfooters} +\def\offheaders {\noheaders \let\res@theaders=\noheaders} +\def\offfooters {\nofooters \let\res@tfooters=\nofooters} +\def\offrunners {\offheaders \offfooters} +\def\onheaders {\yesheaders \let\res@theaders=\yesheaders} +\def\onfooters {\yesfooters \let\res@tfooters=\yesfooters} +\def\onrunners {\onheaders \onfooters} +\res@trunners + +% preserve marks in a stable place +\let\m@rk=\mark +\let\firstm@rk=\firstmark +\let\topm@rk=\topmark +\let\botm@rk=\botmark + +% contents of headers and footers +\newif\iftwosided + +\newtoks\rectoheader +\newtoks\versoheader +\newtoks\rectofooter +\newtoks\versofooter + + \message{glosses,} + +% control of glosses +\newif\iftopgloss +\newif\ifbottomgloss +\let\res@ttopgloss=\relax +\let\res@tbottomgloss=\relax +\def\res@tglosses {\res@ttopgloss \res@tbottomgloss} +\def\notopgloss {\global\topglossfalse} +\def\nobottomgloss {\global\bottomglossfalse} +\def\noglosses {\notopgloss \nobottomgloss} +\def\yestopgloss {\global\topglosstrue} +\def\yesbottomgloss {\global\bottomglosstrue} +\def\yesglosses {\yestopgloss \yesbottomgloss} +\def\offtopgloss {\notopgloss \let\res@ttopgloss=\notopgloss} +\def\offbottomgloss {\nobottomgloss \let\res@tbottomgloss=\nobottomgloss} +\def\offglosses {\offtopgloss \offbottomgloss} +\def\ontopgloss {\yestopgloss \let\res@ttopgloss=\yestopgloss} +\def\onbottomgloss {\yesbottomgloss \let\res@tbottomgloss=\yesbottomgloss} +\def\onglosses {\ontopgloss \onbottomgloss} +\res@tglosses + +% contents of glosses +\newtoks\topgloss +\newtoks\bottomgloss + + \message{inserts,} + +% storage for the inserts +\newinsert\topfloat +\countdef\topmag=\topfloat \topmag=1000 +\dimendef\topmax=\topfloat \topmax=\maxdimen +\newtoks\topsep \topsep={} + +\newinsert\botfloat +\countdef\botmag=\botfloat \botmag=1000 +\dimendef\botmax=\botfloat \botmax=\maxdimen +\newtoks\botsep \botsep={} + +% inserts which always float +\long +\def\newfloat #1\type #2\floatsetup #3\setup #4% + \floatabove #5\floatbelow #6% + \begin #7\end #8\endnew {% + \stripn@me{}#1% + \toks@={\insert#2\bgroup #3\relax #5\relax #4\relax #7}% + \expandafter\edef\csname begin\next\endcsname {% + \the\toks@}% + \toks@={#8\relax #6\egroup}% + \expandafter\edef\csname end\next\endcsname {% + \the\toks@}% + \long + \edef#1##1{\expandafter\noexpand\csname begin\next\endcsname + ##1\expandafter\noexpand\csname end\next\endcsname}} + +\long +\def\newpagefloat #1\type #2\floatsetup #3\setup #4% + \above #5\below #6% + \begin #7\end #8\endnew {% + \stripn@me{}#1% + \toks@={#4\setbox\z@=\vbox\bgroup #7}% + \expandafter\edef\csname begin\next\endcsname {% + \begingroup \the\toks@}% + \toks@={#8\egroup + \insert#2{#3\relax + \dimen@=\dp\z@ + \vbox to\vsize{#5\unvbox\z@#6\kern-\dimen@}}}% + \expandafter\edef\csname end\next\endcsname {% + \the\toks@ \endgroup}% + \long + \edef#1##1{\expandafter\noexpand\csname begin\next\endcsname + ##1\expandafter\noexpand\csname end\next\endcsname}} + +% inserts which sometimes float +\long +\def\newfitfloat #1\type {% + \stripn@me{}#1% + \edef#1##1{\expandafter\noexpand\csname begin\next\endcsname + ##1\expandafter\noexpand\csname end\next\endcsname}% + \newfitfl@at} +\def\newfitfl@at #1\floatsetup #2\setup #3% + \floatabove #4\floatbelow #5% + \above #6\below #7% + \begin #8\end #9\endnew {% + \toks@={\setbox\z@=\vbox\bgroup #3\relax #8}% + \expandafter\edef\csname begin\next\endcsname {% + \the\toks@}% + \toks@={#9\egroup + \dimen@=\ht\z@ \advance\dimen@\dp\z@ + \advance\dimen@\baselineskip \advance\dimen@\pagetotal + \ifdim \dimen@>\pagegoal + \insert#1{#2\relax #4\unvbox\z@#5}% + \else + #6\unvbox\z@#7\relax + \fi}% + \expandafter\edef\csname end\next\endcsname {% + \the\toks@}} + + \message{output,} + +% output routine parameters +\newif\iftrimpages +\newdimen\topglossdrop +\newdimen\bottomglossdrop +\newdimen\footerdrop +\newdimen\headerdrop + +% output routine +\def\ytexoutput {% + \iftrimpages \trimp@ge\fi + \shipout\vbox to9truein{% center box on 8.5x11 page (DVI starts at 1,1) + \vss + \hbox to6.5truein{% + \hss + \vbox{% + \offinterlineskip + \iftopgloss + \vbox to\z@{\vss\line{\the\topgloss}\vskip\topglossdrop}\fi + \ifheaders\makeheadline\fi + \pagebody + \iffooters\makefootline\fi + \ifbottomgloss + \vbox to\z@{\vskip\bottomglossdrop\line{\the\bottomgloss}\vss}\fi + }% end of contents \vbox + \hss}% end of centering \hbox + \vss}% end of centering \vbox + \advancepageno + \res@trunners + \res@tglosses + \ifnum\outputpenalty>-\@MM \else\dosupereject\fi} + +\def\makeheadline {% + \vbox to\z@{% + \vss + \iftwosided + \ifodd\pageno \line{\the\rectoheader}% + \else \line{\the\versoheader}\fi + \else + \line{\the\rectoheader}\fi + \vskip \headerdrop}} + +\def\makefootline {% + \vbox to\z@{% + \vskip \footerdrop + \nointerlineskip + \iftwosided + \ifodd\pageno \line{\the\rectofooter}% + \else \line{\the\versofooter}\fi + \else + \line{\the\rectofooter}\fi + \vss}} + +\def\pagebody {% + \vbox to\vsize{\boxmaxdepth\maxdimen \pagecontents}} + +\def\pagecontents {% + \dimen@i=\ht\@cclv \advance\dimen@i\dp\@cclv + \ifvoid\topfloat\else + \dimen@=\ht\topfloat \advance\dimen@\dp\topfloat + \unvbox\topfloat + \ifdim \dimen@>\z@ \ifdim\dimen@i>\z@ \the\topsep\fi\fi + \fi + \dimen@ii=\dp\@cclv \unvbox\@cclv + \ifvoid\botfloat\else + \dimen@=\ht\botfloat \advance\dimen@\dp\botfloat + \ifdim \dimen@>\z@ \ifdim\dimen@i>\z@ \the\botsep\fi\fi + \unvbox\botfloat + \fi + \ifr@ggedbottom \kern-\dimen@ii \vfil \fi} + + \message{page glue,} + +\newif\ifts@ + +{\catcode`\0=12\relax + \catcode`\.=12\relax + \catcode`\p=12\relax + \catcode`\t=12\relax + \gdef\nullgl@e{0.0pt} +} %end of catcode group + +\def\ifnullskip {% + \edef\next{\the\lastskip}% + \ifx\next\nullgl@e} + +\def\trimp@ge {% + \setbox0=\vbox{\unvbox\@cclv + \loop \ts@false + \ifnum\lastpenalty=\z@ \else\unpenalty \ts@true \fi + \ifnullskip \else\unskip \ts@true \fi + \ifts@ \repeat} + \setbox\@cclv=\box0} + +% hack to make \break, \allowbreak, and friends work +\def\break {\penalty\z@\penalty-\@M} +\def\allowbreak {\penalty-\@ne} +\def\supereject {\par\penalty\z@\penalty-\@MM} + + \message{paragraphs,} + +% force no indent on next par +\def\rem@veindent {\everypar={\setbox0=\lastbox\everypar={}}} + +% neutral paragraphing groups +\def\beginpgroup {\begingroup \everypar={}} +\def\endpgroup {\endgraf \endgroup} +\def\bpgroup {\bgroup \everypar={}} +\def\epgroup {\endgraf \egroup} + +\long +\def\newpar #1\argtext #2\setup #3\vestindent #4\starter #5\endnew {% + \def\next{#4}% + \ifx\next\empty \def#1#2{#3\relax#5} + \else \def#1#2{#3\relax \hangindent #4\hangafter \@ne #5}\fi} + +% turn indentation off and on +\def\offindent {% + \ifdim \parindent>\z@ \edef\onindent{\parindent=\the\parindent}\fi + \parindent=\z@} +\let\onindent=\relax +\let\yesindent=\indent + +% create new element with associated skips and penalties +{\let\newskip=\relax \let\newcount=\relax % allow next def +\long +\gdef\newelement #1\setup #2\above #3\below #4\begin #5\end #6\endnew{% + \stripn@me{}#1% + \expandafter\newskip\csname above\next skip\endcsname + \expandafter\newskip\csname below\next skip\endcsname + \expandafter\newcount\csname pre\next penalty\endcsname + \expandafter\newcount\csname post\next penalty\endcsname + \toks@={\endgraf #3\begingroup #2\relax #5}% + \expandafter\edef \csname begin\next \endcsname {% + \the\toks@}% + \toks@={#6\endgroup #4}% + \expandafter\edef \csname end\next \endcsname {% + \the\toks@}% + \long + \edef#1##1{\expandafter\noexpand\csname begin\next\endcsname + ##1\expandafter\noexpand\csname end\next\endcsname}} +} % end of def group + + \message{textual displays,} + +% nofill +\def\setupnofill {% + \parskip=\z@ + \def\par{\endgraf}% empty lines not preserved + \obeylines + \activespaces\ } + +% textual displays +{\obeylines % defs using ^^M +\long% +\gdef\newtext #1\display #2\setup #3\begin #4\end #5\endnew{% + \stripn@me{}#1% + \toks@={$$#2\halign\bgroup ##\cr \noalign\bpgroup #3% + \begingroup \obeylines}% + \expandafter\edef\csname begin\next \endcsname {% + \the\toks@ \expandafter\noexpand\csname re@d\next \endcsname}% + \toks@={\endgroup #4}% + \expandafter\edef\csname re@d\next \endcsname ##1^^M{% + \the\toks@##1}% + \toks@={#5\epgroup\egroup$$}% + \expandafter\edef\csname end\next \endcsname {% + \the\toks@}}% +} % end of def group + +% verbatim material (mostly from TeXbook) +\def\setupverbatim {% + \specials@ther + \setupnofill} + +\long +\def\newverbatim #1\begincs #2\readcs #3\endcsname #4% + \display #5\setup #6\begin #7\end #8\endnew{% + \toks@={$$#5\halign\bgroup ##\hfil\cr + \noalign\bpgroup \setupverbatim #6#3}% + \edef#2{\the\toks@}% + \makev@rbatim{#3}{#4}{#7}{#8}} +{\obeylines \catcode`\|=\@scape \catcode`\\=\@ther % + |long% + |gdef|makev@rbatim#1#2#3#4{% + |toks@={#3}|toks@i={#4|epgroup|egroup$$}% + |edef#1##1^^M##2\#2{|the|toks@##1##2|the|toks@i}}} + + \message{tables,} + +% preamble specification analysis +\newif\ifmoresp@c +\def\esp@cl {\esp@cl} % null spec list marker +\newtoks\sp@c +\newtoks\sp@cl +\newtoks\pre@mble +\newtoks\pad@mble +\newtoks\prep@rt +\newtoks\padp@rt + +% table dimensions and tabskip glue +\newtoks\tablespec +\def\tablewidth {\afterassignment\t@blewidth\dimen@} +\def\t@blewidth {% + \ifdim\dimen@>\z@ \edef\next{to\the\dimen@}\else + \ifdim\dimen@<\z@ \edef\next{expand\the\dimen@}\else + \edef\next{}\fi\fi + \tablespec=\expandafter{\next}} +\newskip\pretabskip +\newskip\intabskip +\newskip\posttabskip +\newtoks\tablestyle +\newdimen\padheight % height of padding around lines +\newdimen\hbarheight % height of horizontal lines +\newdimen\dhbarheight % height of "double" horizontal lines +\newdimen\vbarwidth % width of normal vertical bars +\newdimen\dvbarwidth % width of "double" vertical bars + +\def\makepre@mblepart #1{% + \padp@rt={\omit\vrule width\z@ height\padheight depth\z@ \relax#1}% + \if l\noexpand\sp@@ \prep@rt={##\hfil\strut#1}\else + \if L\noexpand\sp@@ \prep@rt={$\the\tablestyle ##$\hfil\strut#1}\else + \if c\noexpand\sp@@ \prep@rt={\hfil##\hfil\strut#1}\else + \if C\noexpand\sp@@ \prep@rt={\hfil$\the\tablestyle ##$\hfil\strut#1}\else + \if r\noexpand\sp@@ \prep@rt={\hfil##\strut#1}\else + \if R\noexpand\sp@@ \prep@rt={\hfil$\the\tablestyle ##$\strut#1}\else + \if |\noexpand\sp@@ \prep@rt={\vrule width\vbarwidth###1}% + \padp@rt={height\padheight#1}\else + \if "\noexpand\sp@@ \prep@rt={\vrule width\dvbarwidth###1}% + \padp@rt={height\padheight#1}\else + \if &\noexpand\sp@@ \prep@rt={&}\padp@rt={&}\else + \ifx \sp@@\tabskip \prep@rt=\expandafter{\the\sp@c}\padp@rt={}% + \else \prep@rt=\expandafter{\the\sp@c#1}% + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + +\def\makepre@mble {% + \sp@cl=\expandafter{\the\sp@cl\esp@cl}% avoid {arg} at end of \sp@cl + \pre@mble={\tabskip\intabskip}\pad@mble={}% + \def\breaksp@c##1##2\@nd{\sp@c={##1}\sp@cl={##2}}% + \def\firstsp@c{\futurelet\sp@@\f@rstspec}\def\f@rstspec##1\@nd{}% + \loop + \expandafter\breaksp@c\the\sp@cl\@nd + \expandafter\firstsp@c\the\sp@c\@nd + \edef\next{\the\sp@cl}% + \ifx \next\esp@cl \moresp@cfalse \makepre@mblepart{}% + \else \moresp@ctrue \makepre@mblepart&\fi + \addtotoks\pre@mble\prep@rt + \addtotoks\pad@mble\padp@rt + \ifmoresp@c \repeat + \pre@mble=\expandafter{\the\pre@mble\tabskip\posttabskip\cr}% + \pad@mble=\expandafter{\the\pad@mble\cr}} + +\def\checkpre@mble {% + \edef\next{\the\sp@cl}% + \ifx\next\empty + \errhelp={Just continue and I'll use left-justified columns.}% + \errmessage{Empty table preamble.}% + \sp@cl={&l}\fi} + +\long +\def\newtable #1\leftdelim #2\rightdelim #3% + \before #4\after #5% + \begin #6\end #7\endnew{% create a table macro + \stripn@me{}#1% + \toks@={\begingroup}\toks@i={\checkpre@mble \setuph@lign + #4\offinterlineskip + \halign\the\tablespec \bgroup\span\the\pre@mble #6}% + \expandafter\edef\csname begin\next \endcsname #2##1#3{% + \the\toks@ \sp@cl={##1}\the\toks@i}% + \toks@={#7\crcr\egroup#5\endgroup}% + \expandafter\edef\csname end\next \endcsname {% + \the\toks@}% + \long + \edef#1#2##1#3##2{% + \expandafter\noexpand\csname begin\next\endcsname #2##1#3% + ##2\expandafter\noexpand\csname end\next\endcsname}} + +\def\setuph@lign {% + \makepre@mble + \let\explicitcr=\relax + \def\implicitcr{\let\par=\crcr\obeylines}% + \let\\=\crcr + \def\inline{\noalign{\hrule height\hbarheight}}% + \def\dinline{\noalign{\hrule height\dhbarheight}}% + \edef\topline{\noexpand\inline\the\pad@mble}% + \edef\midline{\the\pad@mble\noexpand\inline\the\pad@mble}% + \edef\botline{\the\pad@mble\noexpand\inline}% + \edef\dtopline{\noexpand\dinline\the\pad@mble}% + \edef\dmidline{\the\pad@mble\noexpand\dinline\the\pad@mble}% + \edef\dbotline{\the\pad@mble\noexpand\dinline}% + \def\padline {\noalign\bgroup\global\dimen@=\padheight + \afterassignment\padlin@\global\padheight=}% + \def\padlin@ {\global\edef\next{\the\pad@mble + \noalign{\global\padheight=\the\dimen@}}\egroup \next}% + \tabskip\pretabskip} + + \message{titles,} + +\def\ts@ttings {% + \spaceskip=.3333em \xspaceskip=.5em + \pretolerance=9999 \tolerance=9999 \hbadness=9999 + \hyphenpenalty=10000 \exhyphenpenalty=10000 + \def\linebreak{\ifhmode\break\fi}% + \let\cr=\linebreak \let\crcr=\linebreak \def\\{\linebreak\ignorespaces}% + \offindent} + +\def\titleleft #1#2{% + \leftskip=\z@ \rightskip=\z@ plus.25\hsize + \advance\leftskip by#1\advance\rightskip by#2% + \parfillskip=\z@ plus1fil + \ts@ttings} + +\def\titlecenter #1#2{% + \leftskip=\z@ plus.125\hsize \rightskip=\leftskip + \advance\leftskip by#1\advance\rightskip by#2% + \parfillskip=\z@ + \ts@ttings} + +\def\titleright #1#2{% + \leftskip=\z@ plus.25\hsize \rightskip=\z@ + \advance\leftskip by#1\advance\rightskip by#2% + \parfillskip=\z@ + \ts@ttings} + +\long +\def\newtitle #1\box #2\shape #3% + \font #4\setup #5\begin #6\end #7\endnew{% + \stripn@me{}#1% + \toks@={#2\bgroup #4\relax #3\relax #5\relax #6}% + \expandafter\edef\csname begin\next\endcsname {% + \the\toks@}% + \toks@={#7\endgraf\egroup}% + \expandafter\edef\csname end\next\endcsname {% + \the\toks@}% + \long + \edef#1##1{\expandafter\noexpand\csname begin\next\endcsname + ##1\expandafter\noexpand\csname end\next\endcsname}} + + \message{special pages,} + +% get to a recto page +\def\rectoeject {\par + \filpage + \iftwosided + \ifodd\pageno + \else \ymessage{{Force recto}}\norunners\null\vfil\eject \fi\fi + \norunners} + +\def\rectosupereject {\par + \superfilpage + \iftwosided + \ifodd\pageno + \else \ymessage{{Force recto}}\norunners\null\vfil\eject \fi\fi + \norunners} + +% special pages +\long +\def\newpage #1\setup #2\glue #3\begin #4\end #5\endnew{% + \stripn@me{}#1% + \toks@={\rectoeject \beginpgroup #2\relax \hrule width\z@\relax #3 #4}% + \expandafter\edef\csname begin\next \endcsname {% + \the\toks@}% + \toks@={#5\relax #3\endpgroup\eject}% + \expandafter\edef\csname end\next \endcsname {% + \the\toks@}% + \long + \edef#1##1{\expandafter\noexpand\csname begin\next\endcsname + ##1\expandafter\noexpand\csname end\next\endcsname}} + +\long +\def\newsuperpage #1\setup #2\glue #3\begin #4\end #5\endnew{% + \stripn@me{}#1% + \toks@={\rectosupereject \beginpgroup #2\relax \hrule width\z@\relax #3 #4}% + \expandafter\edef\csname begin\next \endcsname {% + \the\toks@}% + \toks@={#5\relax #3\endpgroup\eject}% + \expandafter\edef\csname end\next \endcsname {% + \the\toks@}% + \long + \edef#1##1{\expandafter\noexpand\csname begin\next\endcsname + ##1\expandafter\noexpand\csname end\next\endcsname}} + + \message {auxiliary files,} + +\newif\ifauxfiles + +\def\@uxfiles {} +\def\add@uxfile #1{\addtodef\@uxfiles{\do@ux#1}} +\def\map@uxfiles #1{\let\do@ux=#1\@uxfiles} + +\def\forgetauxfiles {\def\@uxfiles{}} + +\def\perjob {perjob} + +{\let\newwrite=\relax % allow next def +\gdef\newaux #1\filename #2\extension #3\endnew{% + \stripn@me{}#1% + \edef#1{#3}% + \expandafter\newwrite\csname \next @ut\endcsname + \expandafter\let\csname write\next \endcsname=\bad@uxwrite + \expandafter\edef\csname begin\next \endcsname{% + \expandafter\noexpand\csname input\next \endcsname + \expandafter\noexpand\csname open\next \endcsname}% + \expandafter\edef\csname end\next \endcsname{% + \expandafter\noexpand\csname close\next \endcsname}% + \ifx #2\perjob + \add@uxfile #1% + \expandafter\def\csname input\next \endcsname{\input@ux#1\jobname}% + \expandafter\def\csname open\next \endcsname{\open@ux#1\jobname}% + \expandafter\def\csname close\next \endcsname{\close@ux#1}% + \else + \expandafter\def\csname input\next \endcsname{\input@ux#1{#2}}% + \expandafter\def\csname open\next \endcsname{\open@ux#1{#2}}% + \expandafter\def\csname close\next \endcsname{\close@ux#1}% + \fi} +} % end of def group + +\def\bad@uxwrite #1{% + \ifauxfiles + \errhelp={I will write to your log file instead.}% + \errmessage{Writing on an unopened auxiliary file.}% + \write\m@ne{#1}% + \fi} + +\def\input@ux #1#2{% + \ifauxfiles \@input{#2.#1}{\ywarning{{No file #2.#1}}}\fi} + +\def\open@ux #1#2{% + \stripn@me{}#1% + \ifauxfiles + \immediate\expandafter\openout\csname \next @ut\endcsname=#2.#1 % + \expandafter\edef\csname write\next \endcsname {% + \write \expandafter\noexpand\csname \next @ut\endcsname}% + \immediate\csname write\next \endcsname{\relax}% + \else + \expandafter\edef\csname write\next \endcsname {% + \write\m@ne}% + \fi} + +\def\close@ux #1{% + \stripn@me{}#1% + \ifauxfiles \immediate\expandafter\closeout\csname \next @ut\endcsname \fi + \expandafter\let\csname write\next \endcsname=\bad@uxwrite} + +\def\input@uxfile #1{\input@ux#1\jobname} +\def\input@uxfiles {\map@uxfiles\input@uxfile} +\def\open@uxfile #1{\open@ux#1\jobname} +\def\open@uxfiles {\map@uxfiles\open@uxfile} +\def\close@uxfiles {\map@uxfiles\close@ux} + +\def\beginjob {\input@uxfiles \open@uxfiles} +\def\endjob {\superfilpage \close@uxfiles \end} + + \message{initialization,} + +% page layout +\trimpagesfalse +\offheaders +\offfooters +\twosidedfalse +\topglossfalse +\bottomglossfalse +\topglossdrop=2.5pc +\bottomglossdrop=2.5pc +\headerdrop=1.25pc +\footerdrop=1.25pc + +% tables +\tablewidth=0pt +\intabskip=\emskip +\pretabskip=\filskip +\posttabskip=\filskip +\padheight=2pt +\tablestyle={\displaystyle} +\hbarheight=.4pt +\dhbarheight=1pt +\vbarwidth=.4pt +\dvbarwidth=1pt + +% auxiliary files +\auxfilestrue + +% special chars +\makebqnormal +\makebbqaccent +\makeandalign +\makesharpparam +\makelgtother + diff --git a/macros/ytex/yfonts.mac b/macros/ytex/yfonts.mac new file mode 100644 index 0000000000..499fbb6e9b --- /dev/null +++ b/macros/ytex/yfonts.mac @@ -0,0 +1,155 @@ +% Copyright (c) 1985, 1986 Daniel C. Brotsky. All rights reserved. +% Font macros for yTeX. See the file YTEX.MAC for details. + +% CONTENTS + +% ^L-page contents +% ---------------------------------------------------------------------- +% 1 %% Font macros for YTEX +% 2 %% typesize +% 3 %% usersize +% 4 %% initialization + + \message{typesize,} + +\newif\ifmagscaling +\newif\ifexactsizes +\newdimen\typesiz@ +\newtoks\baselinefactor + +\def\typesize {\afterassignment\typ@size\dimen@} +\def\typ@siz@ {% + \let\typ@size=\siz@rr + \ymessage{{\string\typesize=\the\dimen@}} + \ifdim 10\p@=\dimen@ \tenp@int \csname usersizeten\endcsname + \else \ifdim 11\p@=\dimen@ \elevenp@int \csname usersizeeleven\endcsname + \else \ifdim 12\p@=\dimen@ \twelvep@int \csname usersizetwelve\endcsname + \else \let\typ@size=\typ@siz@ + \errhelp={Insert `\string\typesize=' + where is 10pt, 11pt, or 12pt.}% + \errmessage{Unrecognized size (\the\dimen@) in \string\typesize. + Try again.}\fi\fi\fi} +\def\siz@rr {% + \errhelp={Just continue and I'll ignore the size switch.}% + \errmessage{You can't change sizes in the middle of a document.}% + \relax} +\def\fixsiz@ {% + \ifx\typ@size\siz@rr + \else \global\let\typ@size=\siz@rr \global\let\fixsiz@=\relax + \errhelp={Too late now. Just continue and I'll assume you want }% + \addtotoks\errhelp\expandafter{\the\typesiz@.}% + \errmessage{You never gave a \string\typesize\space command.}% + \fi} +\let\typ@size=\typ@siz@ + +\def\tenp@int {% + \typesiz@=10pt + \s@tten \mag=\magstep\z@} + +\def\elevenp@int {% + \typesiz@=11pt + \ifmagscaling + \s@tten \ifexactsizes \mag=1100 \else \mag=\magstephalf \fi + \else + \s@televen \mag=\magstep\z@ + \fi} + +\def\twelvep@int {% + \typesiz@=12pt + \ifmagscaling + \s@tten \ifexactsizes \mag=1200 \else \mag=\magstep\@ne \fi + \else + \s@ttwelve \mag=\magstep\z@ + \fi} + +\def\s@tten {% + \let\regsize=\tenpoint + \let\smlsize=\ninepoint + \let\smllsize=\eightpoint + \let\smlllsize=\eightpoint + \let\bigsize=\twelvepoint + \let\biggsize=\fourteenpoint + \let\bigggsize=\eighteenpoint + \regsize} + +\def\s@televen {% + \let\regsize=\elevenpoint + \let\smlsize=\tenpoint + \let\smllsize=\ninepoint + \let\smlllsize=\eightpoint + \let\bigsize=\twelvepoint + \let\biggsize=\fourteenpoint + \let\bigggsize=\eighteenpoint + \regsize} + +\def\s@ttwelve {% + \let\regsize=\twelvepoint + \let\smlsize=\tenpoint + \let\smllsize=\ninepoint + \let\smlllsize=\eightpoint + \let\bigsize=\fourteenpoint + \let\biggsize=\eighteenpoint + \let\bigggsize=\eighteenpoint + \regsize} + + \message{usersize,} + +% new def of \setnormalspa@cing that leaves displayskips alone +\def\setnormalsp@cing{% SIDE EFFECT is to go into \rm + \rm % set the em properly + \normalbaselineskip=\the\baselinefactor em% + \normalbaselines} + +% user hook to \setnormalsp@cing +\def\setnormalbaselines {\setnormalsp@cing} + +\def\normalbaselines{% + \lineskip\normallineskip + \baselineskip\normalbaselineskip + \lineskiplimit\normallineskiplimit + \setbox\strutbox=\hbox{\vrule height .7\baselineskip + depth .3\baselineskip width\z@}} + +\def\usereighteenpointmacro {% + \let\smllrm=\twelverm + \let\smlrm=\fourteenrm\let\smlit=\fourteenit + \let\smlbf=\fourteenbf\let\smltt=\fourteentt} + +\def\userfourteenpointmacro {% + \let\smllrm=\tenrm + \let\smlrm=\twelverm\let\smlit=\twelveit + \let\smlbf=\twelvebf\let\smltt=\twelvett} + +\def\usertwelvepointmacro {% + \let\smllrm=\ninerm + \let\smlrm=\tenrm\let\smlit=\tenit + \let\smlbf=\tenbf\let\smltt=\eleventt} + +\def\userelevenpointmacro {% + \let\smllrm=\eightrm + \let\smlrm=\tenrm\let\smlit=\tenit + \let\smlbf=\tenbf\let\smltt=\tentt} + +\def\usertenpointmacro {% + \let\smllrm=\eightrm + \let\smlrm=\ninerm\let\smlit=\nineit + \let\smlbf=\ninebf\let\smltt=\ninett} + +\def\userninepointmacro {% + \let\smllrm=\sevenrm + \let\smlrm=\eightrm\let\smlit=\eightit + \let\smlbf=\eightbf\let\smltt=\eighttt} + +\def\usereightpointmacro {% + \let\smllrm=\sevenrm + \let\smlrm=\eightrm\let\smlit=\eightit + \let\smlbf=\eightbf\let\smltt=\eighttt} + + \message{initialization,} + +% parameters +\magscalingtrue +\baselinefactor={1.3} + +% default type size +\tenp@int diff --git a/macros/ytex/ylog.mac b/macros/ytex/ylog.mac new file mode 100644 index 0000000000..d0ad664368 --- /dev/null +++ b/macros/ytex/ylog.mac @@ -0,0 +1,494 @@ +% Copyright (c) 1985, 1986 Daniel C. Brotsky. All rights reserved. +% Log of changes to the yTeX macros. See the file YTEX.MAC for details. +% This header declares the yTeX version. +\def\fmtversion {2.0} +\endinput + +RELEASE 0.93 -- 30 Jan 85 + +30 Jan 85 +-put call to \titlesection in \section +-add \secdef and \secref +-make floating figures the default +-add \figureskip, \captionskip +-add full page stationary figures +-add full page section figures +-change \figuresize to \captionsize +-check after floating figure if \vpar indicated by glue + +RELEASE 0.94 -- 30 Jan 85 + +31 Jan 85 +-define \figure and friends via def to allow changing underlying +definitions +-add \futurearg +-enclose \readarg actions in a group to allow nesting +-add raggedcenter +-change \title, \author, and friends to be paragraphs +-broke \chapter into \@chapter,\@ch@pter, same with \section + +4 Feb 85 +-encapsulate big \before@rgs in \footnote and \table in +sub-macros +-adjust \hbadness and \leftskip/\rightskip in \raggedcenter to +force maximum full lines and no underfull box messages. +-add \verb and friends +-put extra braces in \chapter and \section \toksmessage +-make \verb do obeyspaces +-change \\ to \! +-change \inverbatim to do an \afterassignment +-add \let\par=\endgraf to \verbatim +-add \addtodef and \addspecial +-change various macros to use \addtotoks and \addtodef when +possible +-interchange handy hacks and reading args +-add specials hacking: \otherspecials and friends +-insert \newverbatim, def \beginverb using \newverbatim +-add \verbindent +-add various parameter settings to init, remove them elsewhere +-add \activespaces, use it instead of \obeyspaces + +RELEASE 0.95 -- 4 Feb 85 + +5 Feb 85 +-add \chaptereject, define \pchapter and \@pchapter using it +-rename \@otherspecials to \specials@ther +-change verbatim around, add textual displays +-get rid of \begin and \end, put begin in macro names +-fix spread to use \futurearg + +RELEASE 0.96 -- 5 Feb 85 + +6 Feb 85 +-add \st@rttime def and add call to \everyjob +-fix \header to do \raggedright and \cr + +7 Feb 85 +-define captions using \captionindent +-make \beginpartp@ge use \chaptereject +-define \tabfil, \tabzero, and \tabem as glue specs +-default is \makelgtother +-make \setarg \long to allow \pars in args, add \let\futurearg=\relax +-make \heading do a medskip +-reduce spacing around displays +-change \shortdate to use \shortyear +-define \setnormalsp@cing to fix display skips + +8 Feb 85 +-reduce displayskips a bit more +-change setnormalspacing to leave displayskip alone +and do correct baseline spacing +-change log file to just record version number +-conditionalize 11 and 12pt defs for Helvetica and TimesRoman + +11 Feb 85 +-change \newtext and \newverb to use \vcenter instead of \vbox + +RELEASE 0.97 -- 11 Feb 85 + +13 Feb 85 +-change \chaptereject to use \superfilpage +-change \newtext to read pre-^^M stuff as defns arg +-change textual displays to know about \displaywidth and +\displayindent +-add and use \begin/end/b/e/pgroup + +RELEASE 0.98 -- 13 Feb 85 + +28 Feb 85 +-make \beginnofill call \setupnofill + +4 Mar 85 +-fix footnote not to use \beginpgroup and \endpgroup + +RELEASE 0.99 -- 5 Mar 85 + +8 Mar 85 +-add \newelement, define \begin and \endbullets using it + +3 Apr 85 +-remodularize into MACROS, BASE, FONTS, USER + +PRE-RELEASE 0.00 -- 3 Apr 85 + +4 Apr 85 +-add \nextpar, define \vpar using it +-reorganize handy hacks +-add \stripn@me +-fix \newelement, \vstretch +-add \setskip + +8 Apr 85 +-add \newmathtext, define \underline and \overline using it +-start consistency work + +17 Apr 85 +-finish first pass of consistency work +-add \eqdef and \eqref a la Eric Grimson +-add \leftindent and \rightindent to titles, make them use +\everypar to allow multiple paragraphs +-put def of \output routine into USER + +PRE-RELEASE 0.01 -- 17 Apr 85 + +18 Apr 85 +-fix table padding lines, add \padheight +-fix tables and title so they have \begin/\end and argument forms +-fix \unindent +-fix chapters, sections, and headings to do \nointerlineskip +before title +-let titles be \long +-put \endgrafs in titles + +RELEASE 0.1 -- 18 Apr 85 + +19 Apr 85 +-add \endgraf to \newelement +-fix def of \author in \titlepagedefs +-start to remove \readarg and friends because they break normal +macros +-fix \tablewidth to do correct assignment +-start renaming of keyword args +-add \Hss and friends + +22 Apr 85 +-finish removal of \readarg +-finish renaming of keyword args +-fix \vpar to take \global prefixes, remove \nextpar +-fix \padline timing bug +-change the \ytex macro + +RELEASE 0.2 -- 22 Apr 85 + +23 Apr 85 +-add \ucsy and \ucsybox +-change default typesize to 10pt +-put \lastskip check in \newelement + +25 Apr 85 +-change \linespread back to \spread +-put open braces of defs on same line as \endcsname +-go to \newpar +-change \vpar to \unindent in base, restore in user +-fix footnotes not to interfere with \textindent + +29 Apr 85 +-fix problems related to \vpar rename (TLP, TERZOP) + +RELEASE 0.3 -- 29 Apr 85 + +30 Apr 85 +-go to \newfloat scheme +-add page layout parameters +-rename \t* to \title* +-add \t* as user macros +-add \ignore as user macro + +1 May 85 +-fix error in def of \newfitfloat which clobbered \topfloat (WELG) +-fix spelling bug in \floatingfigures +-fix \if bug in \spre@d +-add % where necessary in \obeylines def groups +-fix \ytexoutput to use \botfloat instead of \footins +-add boxes to all figure defs +-spell \expandafter correctly in \siz@rr +-make output unbox \topfloat instead of \topins +-add an \unindent to a non-floated fitfloat figure +-remove unpaired version created by \newtext + +RELEASE 0.4 -- 1 May 85 + +2 May 85 +-got to \halign\noalign scheme to allow interline spacing in +\newtext and \newverb +-change \program to \lisp; use \newtext instead of \newelement +-add \lisplines +-fix \begintext and friends to use \displayindent +-change \quote to advance leftskip instead of setting it +-fix full page figures to use \vbox to \vsize with bottom glue to +avoid depth problems + +RELEASE 0.5 -- 2 May 85 + +3 May 85 +-integrate WELG suggestion about thick horizontal and vertical +lines + +6 May 85 +-change all macro parameters to toks parameters +-change \newelement to have \above and \below +-add \minskip, \minbreak, and \dobreak +-fix \newelement defs in USER + +7 May 85 +-discipline \vpar with \ifvpar and \everypar empty test +-add \etoks +-change \fixedhead, \runninghead, \copyrightholder to use toks +-add \displaytable +-add \footnotetext +-add \newtoks for the fonts +-move \rectocenterheader et al to USER +-define chapter et al with \newelement +-change \versoeject et al to \rectoeject +-set \floatabovefigureskip to \z@skip +-move \verb to USER +-fix \newelement to edef the standard name +-add \get@rg, use it in \chapter et al + +RELEASE 0.6 -- 7 May 85 + +9 May 85 +-change all \new defs to use \edef with toks to allow +consistent macro definition +-add \yesindent synonym for consistency +-rename \undindent to \rem@veindent +-add \long in front of all the standard forms that need it +-move 2 columns to USER +-move \raggedcenter to USER +-move indexes to USER +-move \everyjob to MACROS + +10 May 85 +-fix parameter problems from all \news using \edefs +-change meanings of L,C,R in tables, add & and \tablestyle + +RELEASE 0.7 -- 10 May 85 + +13 May 85 +-add \esp@cl to fix trailing {} in alignment preambles +-fix empty preamble error recovery +-set \clubpenalty=900 and \windowpenalty=900 in USER +-set \parskip to 1pt plus2pt minus1pt +-make \vpartrue by default +-add \endgraf in \caption +-set captionindent to 2em explicitly +-fix quotes not to \offindent too early. + +RELEASE 0.71 -- 13 May 85 + +14 May 85 +-fix \newtable to do \offinterlineskip after \before material +-put \vpar instead of \unvpar below \bullets +-add \yesinterlineskip +-fix \pad@mble entry for non-rule columns to be a strut +\padheight high +-add \iffigureline, \figurelineskip, etc. to figures +-put depth struts in last lines of captions + +RELEASE 0.72 -- 14 May 85 + +16 May 85 +-rename Bigg to biggg and \Sml to \smlll +-change \figurelineskip to \figurelinedrop +-break out \title, \author, etc. +-change \acknowledgements to \bottomtext +-rationalize \footnote, \vfootnote, and \footmatter + +RELEASE 0.8 -- 16 May 85 + +21 May 85 +-change \linebreak to have \ifhmode +-change \cr in titles to have \ifhmode + +22 May 85 +-change \activespaces to take arg +-add \activelines +-add \nfootnote +-add \footdef and \footref +-set strut in \normalbaselines, \normallineskip in \se@tnormalspacing +-add \ifcenterheadings +-add \singlespace and \doublespace + +RELEASE 0.9 -- 22 May 85 + +23 May 85 +-add \hss to \atpar + +RELEASE 0.91 -- 23 May 85 + +24 May 85 +-remove \newmathwrap, \underline, and \overline +-add \before and \after to \newtextwrap +-remove \! + +28 May 85 +-fix misspelling of \beginpr@gram in BASE +-add \setnormalbaselines, fix \singlespace and \doublespace +-rename programs to lisp +-make several fixes in \l@sp + +RELEASE 1.0 -- 28 May 85 + +5 June 85 +-make \\ be \crcr in tables +-put "Part title" message in braces +-fix \specials@ther so it works in tables + +RELEASE 1.01 -- 5 June 85 + +12 June 85 +-only insert \topsep or \botsep if insertion has height+depth +greater than 0. + +RELEASE 1.02 -- 12 June 85 + +13 June 85 +-change \newpage and \newsuperpage to put all material in a +pgroup +-define \titlepage and \partpage using \newelement +-add \math +-only insert \topsep or \botsep if page has height+depth +-take addition of "page" to name out of \newpage et al + +RELEASE 1.03 -- 13 June 85 + +14 June 85 +-change \ytex def to be correct in boldface and italics by not +using math mode. + +RELEASE 1.04 -- 14 June 85 + +19 Mar 85 +-don't allow breaks between floating figures and trailing +whitespace +-put prefigure floatpenalty and prefigure floatskip together in +the before section of figures +-leave indent on in captions, start them with \vpar +-leave indent on in footnotes + +RELEASE 1.05 -- 19 June 85 + +5 Aug 85 +-add \figurebox + +RELEASE 1.06 -- 5 Aug 85 + +6 Aug 85 +-reset \parfillskip=\filskip in footnotes to allow footnotes in +titles +-add \setup parameter to \newpar +-add \partagsep parameter, use it in \ftp and \atp +-add \vtp +-put \m@th in bullet paragraph starter + +RELEASE 1.07 -- 6 Aug 85 + +7 Aug 85 +-reset \parfillskip=\filskip in figures +-add paired delimiters \stationaryfigure et al +-remove \figurebox +-change \newpar to allow use of argument text + +RELEASE 1.08 -- 7 Aug 85 + +26 Aug 85 +-change tagged pars to use \partagbox to avoid conflict with +\everypar + +RELEASE 1.09 -- 26 Aug 85 + +11-12 Oct 85 +-fix two columns to integrate TUGboat fixes +-allow figures and footnotes in two column; these are one column +-add \figuresetuphook et al + +RELEASE 1.1 -- 12 Oct 85 + +14 Oct 85 +-add \doublecolumn + +RELEASE 1.11 -- 14 Oct 85 + +-make fixes to \doublecolumn +-add \pageeject + +RELEASE 1.12 -- 14 Oct 85 + +15 Oct 85 +-further fixes in \twocolumntext and \doublecolumn +-allow @ in names by default in ytex.fixes + +RELEASE 1.13 -- 15 Oct 85 + +-fix absolutely glaring, obcvious bug in \doublecolumn + +RELEASE 1.14 -- 15 Oct 85 + +-fix yet another glaring, obvious bug in \doublecolumn + +RELEASE 1.15 -- 15 Oct 85 + +-fix bug in \pageeject (forgotten \vfil) + +RELEASE 1.16 -- 15 Oct 85 + +29 Oct 85 +-fix \supereject in two-column mode + +RELEASE 1.17 -- 29 Oct 85 + +30 Oct 85 +-fix closure lossage in \@input +-add \filen@me to init, set it equal to \jobname +-add \yesornop, \askuser +-change \input to define \filen@me +-add auxiliary files to NEW + +1 Nov 85 +-add conditional input to new +-change \input, \@input, \@input@ to use \inputfil@ +-add \maybeinput + +5 Nov 85 +-add immediate write of \relax to open of aux files +-change \inputfil@ to save state without a \begingroup + +6 Nov 85 +-move lisp programs from base to user +-put auxiliary files into base +-put citations, labels, and conditional input into user +-add \ifyinfo and \ifydebug, conditionalize \messages + +3-5 Dec 85 +-remove filen@me stuff +-make aux files only perjob or explicit +-remove conditional input of lists of files +-add \bibitem + +RELEASE 1.18 -- 5 Dec 85 + +5 Dec 85 +-use \setupbibliography scheme +-add missing \fi in \maybeinput + +RELEASE 1.19 -- 5 Dec 85 + +13 Dec 85 +-fix citation writing to protect citations in toklists +-rename ytex.log to ytex.record +-add ytex.site +-replace texinputs: with \ytexlibrary +-removed periods in messages +-add \ywarning, \ifywarn +-convert citation and label messages to warnings +-convert missing file messages to warnings + +RELEASE 1.20 -- 13 Dec 85 (Friday!) + +-go to site changes in SITE file. +-use YPLAIN by default instead of PLAIN-CM. + +RELEASE 1.21 -- 29 Dec 85 + +-rename files: MACROS to YTEX, FONTS to YFONTS, BASE to YBASE, +USER to YUSER, RECORD to YLOG, SITE to YSITE. +-rename files: YTEX.FIXES to YFIX.MAC, YTEX.LOCAL to YLOCAL.TEX, +YTEX.MATH to YMATH.TEX. + +RELEASE 1.90 -- 14 Apr 86 + +-add \ifexactsizes, allowing site changes. +-make the first letter of yTeX a Y (traditional upsilon) instead +of TeX's version (a medieval upsilon). + +RELEASE 2.0 -- 9 Jun 86 diff --git a/macros/ytex/ysite.mac b/macros/ytex/ysite.mac new file mode 100644 index 0000000000..d718e05036 --- /dev/null +++ b/macros/ytex/ysite.mac @@ -0,0 +1,11 @@ +% Copyright (c) 1985, 1986 Daniel C. Brotsky. All rights reserved. +% Site modifications for the yTeX macros. See the file YTEX.MAC for details. + +%% MIT-OZ (Twenex) changes + +% magnification scaling is according to TeX 1.2-based scheme +\exactsizesfalse + +% where to look up yTeX library files +\def\ytexlibrary {texinputs:} + diff --git a/macros/ytex/ytex-cm.tex b/macros/ytex/ytex-cm.tex new file mode 100644 index 0000000000..50be52d74a --- /dev/null +++ b/macros/ytex/ytex-cm.tex @@ -0,0 +1,4 @@ +% preload an INITEX with YTEX +\input plain-cm +\def\fmtname {YTEX-CM} +\input ytex.mac diff --git a/macros/ytex/ytex.ieee b/macros/ytex/ytex.ieee new file mode 100644 index 0000000000..59559beab4 --- /dev/null +++ b/macros/ytex/ytex.ieee @@ -0,0 +1,250 @@ +% -*- TeX -*- +% for yTeX +% Michael A. Gennert +% MICHAELG%OZ@MIT-MC + +% These macros generate IEEE style papers. They break each page into +% 4 pieces, except for the first page, which is broken into 5. This +% allows a paper to be created with the minimum amount of pasting onto +% pages. The text of all pages is broken into quadrants, where each +% quadrant is 4.25 inches wide by 5.75 inches long. Two quadrants are +% pasted together to make a column and two columns pasted together to +% make a page. The top two quadrants of the first page are shorter, +% allowing space for the title piece. There are no headers nor +% footers. Twocolumn mode may not be used (it is superfluous). +% Glosses are not allowed. A typical paper looks like: + +% \input yTeX.ieee +% \begintitlepage +% \ctitle{yTeX.IEEE: A NEW MACRO PACKAGE} +% \cauthor{Michael A. Gennert} +% \caffiliation{Artificial Intelligence Laboratory\cr +% Massachusetts Institute of Technology\cr +% Cambridge, Massachusetts 02139\cr} +% \endtitlepage +% \section{Abstract} +% This paper introduces a new macro package called yTeX.IEEE, for the +% yTeX text formatter. And so on. +% \section{1. Introduction} ... + +% There are new entries for the titlepage, \affiliation and +% \caffiliation, that behave exactly like \author and \cauthor, except +% that their font is \affiliationfont, defaulting to \regsize\rm. + +% \section underlines and centers the section title and numbers it. +% \subsection underlines and places flush left. \subsubsection +% underlines, indents, and then runs the text in. Each has its own +% font, defaulting to \regsize\bf. + +% Footnotes cannot be used in the title page. They disappear if you try. + +% The \draft macro does not put the words draft anywhere now, since it +% used to use glosses, which are disabled. But, it does give a rule +% at the edge of overfull boxes, helpful for pointing out lines that +% are too long. + +% The \ref macro makes references easier. Sample usage is +% \ref{1} M.A. Gennert, ``yTeX.IEEE: A New Macro Package,'' + +% While yTeX is running, it prints the page numbers on the screen as +% they are shipped out. Here, we use a convention for page numbers. +% The title page is page 0. Other pages are of the form pq, where p +% is the manuscript page (which of course never gets shipped out at +% all), and q is the quadrant, from 1 to 4. Thus, the normal sequence +% of page numbers on the screen will be [0], [1.1], ... [1.4], [2.1] ... + +\makeatletter % allow @ in macro names + +\offrunners % no runners at all + +% quadrants +\countdef\quadrant=1 +\quadrant=1 + +% Title page hacks. Titles cannot have footnotes. If you can make title +% footnotes appear at the bottom of the first column of text, let me +% know how you did it. Title should be 1.875 inches high and normal width. + +% main title pages %%% vsize 1.875 truein? +\newelement\titlepage + \setup \output={\ytextitlepageoutput} + \above + \below + \begin \begintitlingpage \hsize=6.5truein \vsize=8truein \ymessage{{Title page}} + \end \endgraf \endtitlingpage \global\vsize=8.625truein + \endnew + +% title pages for sub-parts of a book, etc. +\newelement\partpage + \setup \ymessage{{No part titles allowed in IEEE format}} + \above + \below + \begin + \end + \endnew + +% add spacing around elements of title +\newtitle\title + \box \vbottom + \shape \titleleft{\z@}{\z@}% + \font \the\titlefont + \setup + \begin + \end \vskip .20truein plus .25truein minus .10truein + \endnew +\newtitle\ctitle + \box \vbottom + \shape \titlecenter{\z@}{\z@}% + \font \the\titlefont + \setup + \begin + \end \vskip .20truein plus .25truein minus .10truein + \endnew +\newtitle\author + \box \vbottom + \shape \titleleft{\z@}{\z@}% + \font \the\authorfont + \setup + \begin \vskip .15truein plus .25truein minus .5truein + \end \vskip .15truein plus .25truein minus .5truein + \endnew +\newtitle\cauthor + \box \vbottom + \shape \titlecenter{\z@}{\z@}% + \font \the\authorfont + \setup + \begin \vskip .15truein plus .25truein minus .5truein + \end \vskip .15truein plus .25truein minus .5truein + \endnew + +% affiliation +\newtoks\affiliationfont +\newtitle\affiliation + \box \vbottom + \shape \titleleft{\z@}{\z@}% + \font \the\affiliation + \setup + \begin \vskip .15truein plus .25truein minus .5truein + \end + \endnew +\newtitle\caffiliation + \box \vbottom + \shape \titlecenter{\z@}{\z@}% + \font \the\affiliationfont + \setup + \begin \vskip .15truein plus .25truein minus .5truein + \end + \endnew + +% fonts +\affiliationfont={\regsize\rm} + +% title page output routine +\def\ytextitlepageoutput {\pageno=0 % + \shipout\vbox{% + \hbox to6.5truein{% + \hss + \vbox to1.875truein{% + \offinterlineskip + \unvbox\@cclv + }% end of contents \vbox + \hss}% end of centering \hbox + }% end of centering \vbox + \ifnum\outputpenalty>-\@MM \else\dosupereject\fi + \global\output={\ytexoutput}} + +% normal(?) output routine +\def\ytexoutput {% + \iftrimpages \trimp@ge\fi + \setbox\@cclv=\vbox{\pagecontents} + \setbox\z@=\vsplit\@cclv to 5.7truein + \shipout\addpageno{\box\z@} + \advancequadrant + \shipout\addpageno{\box\@cclv} + \advancequadrant + \ifnum\quadrant=1\global\vsize=11.4truein\fi + \ifnum\outputpenalty>-\@MM \else\dosupereject\fi} + +% fancy quadrant increment scheme +\def\advancequadrant{% + \global\advance\quadrant by 1 + \ifnum\quadrant>4 \global\advance\quadrant by -4 \global\advance\pageno by 1\fi} + +% add page number to bottom of output sheet +\def\addpageno#1{% + \vbox to 9truein{% + \hbox to 6.5truein{#1\hss} + \vskip 0pt plus 1filll + \hbox to 6.5truein{\hss\number\pageno .\number\quadrant}}} + +% sections, subsections, subsubsections +\newtitle\sectiontitle + \box \vbottom + \shape \titlecenter{\z@}{\z@} + \font \the\sectionfont + \setup + \begin + \end + \endnew + +\newelement\section + \setup \get@rg\endsection \sectionsetup + \above \minbreak \presectionpenalty \abovesectionskip + \below \dobreak \postsectionpenalty \belowsectionskip \vpar + \begin \get@rg + \end \ymessage{{Section: \the\toks@}}% + \sectiontitle{\underbar{\the\toks@}}% + \endnew +\setskip\abovesectionskip \dimen 9pt \glue \parskip \factor 3000 +\setskip\belowsectionskip \dimen 3pt \glue \parskip \factor 2000 + +\newtitle\subsectiontitle + \box \vbottom + \shape \titleleft{\z@}{\z@} + \font \the\subsectionfont + \setup + \begin + \end + \endnew + +\newelement\subsection + \setup \get@rg\endsubsection + \above \minbreak \presectionpenalty \abovesectionskip + \below \dobreak \postsectionpenalty \belowsectionskip \vpar + \begin \get@rg + \end \ymessage{{Subsection: \the\toks@}}% + \subsectiontitle{\underbar{\the\toks@}}% + \endnew + +\def\subsubsection#1{% + \minbreak \presectionpenalty \abovesectionskip + \underbar{{\the\subsubsectionfont #1}} \noindent} + +% subsection and subsubsection fonts +\newtoks\subsectionfont +\subsectionfont={\regsize\bf} +\newtoks\subsubsectionfont +\subsubsectionfont={\regsize\bf} + +% references are adjoint tagged paragraphs +\def\ref#1{\atpar{[#1]}} + +% skip .5 inch after the abstract +\def\abstractskip{\vskip .5truein} + +% first paragraph after a heading not flush left +\vparfalse + +% footnotes have a rule along their entire length +\def\footnoterule{\kern-3pt + \hrule width \hsize \kern 2.6pt} + +% set page size +\hsize=4.25truein +\vsize=11.4truein + +% set proper spacing +\baselinefactor={1.1}\setnormalbaselines + +% disallow @ elsewhere +\makeatother diff --git a/macros/ytex/ytex.mac b/macros/ytex/ytex.mac new file mode 100644 index 0000000000..3fb03e0982 --- /dev/null +++ b/macros/ytex/ytex.mac @@ -0,0 +1,92 @@ +% Copyright (c) 1985, 1986 Daniel C. Brotsky. All rights reserved. +% The yTeX macros. Written and maintained by DCB@MIT-AI.ARPA +% Questions, suggestions, bug reports by net mail to BUG-YTEX@MIT-AI.ARPA + +\ifx \fmtname\completelyundefinedcontrolsequence + \input yplain.mac \fi % load a Plain format if needed + +\message{[Loading the YTEX macros:} + +% CONTENTS + +% ^L-page contents +% ---------------------------------------------------------------------- +% 1 %% YTEX macros +% 2 %% setup +% 3 %% Load the library +% 4 %% Load the fonts +% 5 %% Load the user level +% 6 %% miscellany +% 7 %% initialization + + %% setup + +% @ used in macros +\def\makeatletter {\catcode`\@=11\relax} +\def\makeatother {\catcode`\@=12\relax} +\makeatletter + +% conditional message output +\newif\ifyinfo +\newif\ifywarn +\newif\ifydebug +\def\ymessage #1{\ifyinfo \message{#1}\fi} +\def\ywarning #1{\ifywarn \message{#1}\fi} +\def\ybuginfo #1{\ifydebug \message{#1}\fi} + +% preserve def of \input +\let\@@input=\input + + %% Load the library + +\message{(BASE)} +\@@input ybase.mac + + %% Load the fonts + +\message{(FONTS)} +\@@input yfonts.mac + + %% Load the user level + +\message{(USER)} +\@@input yuser.mac + + %% miscellany + +% library location +\def\ytexlibrary {} + +% name of this TeX +\def\yTeX {\leavevmode\lower.5ex\hbox{Y}\kern-.1667em\TeX} +\def\ytex {\yTeX} +\let\YTEX=\ytex +\let\YTeX=\ytex +\let\oopstex=\ytex + + %% initialization + +% format name, version, and site modifications +\ifx \fmtname\completelyundefinedcontrolsequence + \def\fmtname{yTeX}\fi +\@@input ylog.mac +\@@input ysite.mac + +% read fixes and augmentations to these macros +\everyjob={% + \ymessage{{YTEX version \fmtversion}}% + \st@rttime + \makeatletter + \@input{\ytexlibrary yfix.mac}{\ymessage{{No fixes}}}% + \makeatother + \@input@{ymath}{}% + \@input@{ylocal}{}% + } + +% no user @ in macro names, print messages only +\makeatother +\yinfotrue +\ywarntrue +\ydebugfalse + +\message{(DONE)]} diff --git a/macros/ytex/ytex.mail b/macros/ytex/ytex.mail new file mode 100644 index 0000000000..f0cd755071 --- /dev/null +++ b/macros/ytex/ytex.mail @@ -0,0 +1,75 @@ + + 3-Jun-86 12:20:41-EDT,1879;000000000000 +Mail-From: DCB created at 3-Jun-86 12:20:27 +Date: 3 Jun 1986 12:20 EDT (Tue) +Message-ID: +From: Daniel Brotsky +To: info-ytex@OZ.AI.MIT.EDU +Subject: New yTeX release: version 2.0 +cc: dcb@OZ.AI.MIT.EDU + +I have just released version 2.0. There are only cosmetic +differences between this version and the last version. These +are: + +o The file YTEX.LOCAL is renamed to YLOCAL.TEX + +o The file YTEX.MATH is renamed to YMATH.TEX + +o The file YTEX.USAGE is renamed to YUSAGE.TEX + +o All the yTeX source files have moved from TEXLOCAL: + to KS:. + +The new version is due to a slight restructuring of the source +files. In particular, there have been the following name +changes: + +YTEX.MACROS --> YTEX.MAC +YTEX.BASE --> YBASE.MAC +YTEX.FONTS --> YFONTS.MAC +YTEX.USER --> YUSER.MAC +YTEX.LOG --> YLOG.MAC +YTEX.FIXES --> YFIX.MAC + +In addition, there is a new file YSITE.MAC which contains +settings and definitions appropriate to the yTeX installation at +a particular site. + +These changes were made to make yTeX easier to transport to +installations where, for example, file names can only have six +characters in the name and three characters in the extension. In +addition, the sources no longer refer to logical names such as +TEXINPUTS:; instead, they use a prepended string \ytexlibrary +which is defined in the YSITE file. (On OZ the definition in the +YSITE file for \ytexlibrary is TEXINPUTS: so the behavior of yTeX +on OZ should not change.) + +Note that the YUSAGE documentation file has not been updated to +relect these name changes. If anyone feels like doing this, they +should feel free. + +If you maintain yTeX at another site, you should import the new +version immediately. + +This will be the last change I make in yTeX for quite a while. + + + dan + 3-Jun-86 12:35:14-EDT,658;000000000000 +Mail-From: DCB created at 3-Jun-86 12:34:44 +Date: 3 Jun 1986 12:34 EDT (Tue) +Message-ID: +From: Daniel Brotsky +To: info-ytex@OZ.AI.MIT.EDU +Subject: yTeX 2.0 documentation fixed. +cc: dcb@OZ.AI.MIT.EDU + +OK, OK, I updated the documentation file to show the new file +names. If I really get motivated, I will even add stuff to the +documentation about all the wonderful new features that went in +months ago, like \twocolumntext and \doublecolumn and \maybeinput +and cross references and bibliographies and \yesornop. Better +yet, maybe someone else will get inspired and do it for me! + + dan diff --git a/macros/ytex/yusage.lst b/macros/ytex/yusage.lst new file mode 100644 index 0000000000..013d744756 --- /dev/null +++ b/macros/ytex/yusage.lst @@ -0,0 +1,55 @@ +This is TeX, MIT-OZ Version 1.5 (preloaded format=ytex-am 86.6.9) 20 NOV 1986 23:37 +**YUSAGE.TEX.5 +(KANSAS:YUSAGE.TEX.5 {YTEX version 2.0} {No fixes} +{\typesize=11.0pt} +\abovegabskip=\skip58 +\belowgabskip=\skip59 +\pregabpenalty=\count60 +\postgabpenalty=\count61 +\abovebottomtextskip=\skip60 +\belowbottomtextskip=\skip61 +\prebottomtextpenalty=\count62 +\postbottomtextpenalty=\count63 + {Main title} [0] {Section: What is \ytex ?} +{Section: About This Document} [1] +{Section: Some Notation and Conventions I Use Throughout} +Overfull \vbox (2.30855pt too high) has occurred while \output is active +\vbox(528.0+3.60753)x336.0, glue set - 1.0 +.\glue(\topskip) 3.05556 +.\hbox(6.94444+2.15277)x336.0, glue set - 0.42229 +..\hbox(0.0+0.0)x20.0 +..\tenrm I +..\tenrm f +..\glue 3.33333 plus 1.66666 minus 1.1111 +..\tenrm y +..etc. +.\penalty 900 +.\glue(\baselineskip) 3.90282 +.\hbox(6.94444+1.94444)x336.0, glue set - 0.00592 +..\tenrm t +..\tenrm u +..\tenrm r +..\tenrm n +..\glue 3.33333 plus 1.66666 minus 1.1111 +..etc. +.etc. + + +[2] {Section: Format of a \ytex \ Input File} [3] +{Section: How To Invoke \ytex } {Section: Where are the Sources} +{Section: The \ytex \ View of Documents} [4] +{Section: The Five Kinds of \ytex \ Commands} [5] +{Section: More About Delimiter Commands} [6] [7] +{Section: More About Switches} {Section: A List of the \ytex \ User Macros} +{Heading: Titling Pages} [8] {Heading: Chapters and Sections} [9] +{Heading: Page Layout} [10] {Heading: Paragraphs} [11] [12] +{Heading: Fonts and Sizes} [13] {Heading: Figures} [14] [15] [16] +{Heading: Tables} [17] [18] {Heading: Footnotes} {Heading: Textual Displays} +[19] [20] [21] {Heading: Two-Column Text} +{Heading: Formatting Small Pieces of Text} [22] {Heading: The Date} +{Heading: Miscellany} [23] {Section: For Wizards Only} {Heading: Page Glosses} +{Heading: Size Changing} [24] {Heading: Setup Hooks} +{Heading: More About Tables} [25] {Section: A List of Many \ytex \ Commands} +{Heading: The Commands} [26] [27] [28] {Heading: Parameters} [29] [30] +{Heading: Switches} [31] +Output written on KANSAS:YUSAGE.DVI.1 (32 pages, 86408 bytes). diff --git a/macros/ytex/yusage.tex b/macros/ytex/yusage.tex new file mode 100644 index 0000000000..202435fffa --- /dev/null +++ b/macros/ytex/yusage.tex @@ -0,0 +1,1772 @@ +% for yTeX +\typesize=10pt +\runninghead={How to Use \ytex} +\makelgtbrackets + +% small caps font +\font\sc=cmcsc10 + +% easy indexing of macros described +\let\+=\relax % commands +\let\==\relax % parameters +\let\:=\relax % switches + +% easy verbatim stuff +\catcode`\"=12\relax +\def\"{\hbox{\tt "}} +\def\verbq{\verb"} +\addspecial\" +\catcode`\"=\active \let"=\verbq + +% macro descriptions +\newelement\gab + \setup \unvpar + \advance\parskip by2pt plus1pt + \leftskip=\parindent + \clubpenalty=10000 + \def\*{\noindent \hskip-\leftskip\ignorespaces}% + \def\\{\linebreak\ignorespaces}% + \def\##1{{\tt \char`\{}#1{\tt \char`\}}}% + \above \minbreak \pregabpenalty \abovegabskip + \below \dobreak \postgabpenalty \belowgabskip \vpar + \begin + \end \endgraf + \endnew +\abovegabskip=\abovebulletsskip +\belowgabskip=\belowbulletsskip +\pregabpenalty=\prebulletspenalty +\postgabpenalty=\postbulletspenalty + +% names for TeXs +\let\tex=\TeX +\def\LaTeX{L\kern-.2em\raise.3ex\hbox{a}\kern-.09em\TeX} +\let\latex=\LaTeX +\def\Tbase{\sy{TBASE}} +\let\tbase=\Tbase +\def\Plain{{\rm Plain}} +\let\plain=\Plain +\def\lisp{L{\smllrm ISP}} + + \begintitlepage + +\tcenter{\sc The Artificial Intelligence Laboratory\\ Massachusetts +Institute of Technology} + +\vskip 1pc + +\spread {Working Paper 273}{May 1985} +\spread {}{Revised, June 1986} + +\vskip 6pc + +\ctitle {How to Use \ytex} + +\vskip 3pc + +\cauthor {Daniel Brotsky\\ June 9, 1986} + +\vskip 3pc + +\beginabstract + +\ytex---pronounced {\it why}-\tex\ or {\it oops}-\tex---is a +\tex\ macro package. \ytex\ provides both an easy-to-use +interface for \tex\ novices and a powerful macro-creation library +for \tex\ programmers. It is this two-tier structure that makes +\ytex\ more useful to a diverse \tex\ user community than other +macro packages such as \plain\ or \latex. + +This paper contains \ytex\ instructions intended for novice +users. It summarizes the facilities provided in \ytex\ and +concludes with a table of useful commands. + +The version of \ytex\ documented here is release \fmtversion. + +\endabstract + +\beginbottomtext + +Work on \ytex\ was supported by a desire to avoid doing real +work, like research. + +\smallskip + +A.I. Laboratory Working Papers are produced for internal +circulation, and may contain information that is, for example, +too preliminary or too detailed for formal publication. It is +not intended that they should be considered papers to which +reference can be made in the literature. + +\endbottomtext + +\endtitlepage + + \section {What is \ytex?} + +\ytex---usually pronounced {\it why}-\tex\ but see below---is a +\tex\ macro package. \ytex\ evolved from the author's experience +with other \tex\ macro packages, primarily \tbase, \plain, +\latex, and the \sy{PHW} book macros. This experience showed +that, on the one hand, packages as complete as \latex\ or \tbase\ +tend to be inflexible while, on the other hand, packages as +flexible as \plain\ tend to be incomplete. \ytex\ ties both +hands together by aiming for inflexibility and incompleteness +simultaneously. + +Like most \tex-related programs and macro packages, \ytex\ has a +``cute'' name that attempts a dual-language pun in English and +pseudo-Greek.\footnote*{The result is about as weak the premise +suggests.} The letter preceding the \tex\ in \ytex\ is not just a +`Y' but also an {\it upsilon}---the Greek antecedent for the +English letters `u' and `y'.\footnote\dag{Experienced \TeX\ math +hackers may know that \TeX\ makes a version of capital upsilon +available as $\Upsilon$, and they may wonder why the name \yTeX\ +is not spelled as \lower.5ex\hbox{$\Upsilon$}\kern-.1667em\TeX. +That's because \TeX's version of $\Upsilon$ is not a Greek +version (one of which really looked like `Y'---trust the Romans +to be accurate in their borrowing) but actually the Uncial +version popular among middle-ages religious circles. Hey, what +can I say? Trust \TeX\ to be medieval whenever possible.} Thus +you may pronounce \ytex\ as the expected {\it why}-\tex, the +erudite {\it upsilon}-\tex, or the shorter {\it oops}-\tex. But +when you spell it to the computer, you have to spell it +\sy{YTEX}. + + \section {About This Document} + +This document contains basic instructions for using \ytex. It +describes the things you can do using the user interface that +\ytex\ always provides. It does {\it not} explain how to use the +\ytex\ library facilities to add to and replace parts of that +interface. Readers who are interested in such matters should +look at the \ytex\ sources. + +If you are a complete \tex\ beginner you may find this document +hard to follow. In fact, almost everyone will find parts of the +presentation hard to follow. My advice to those who are confused +is to not worry about it: most of the time you will be confused +because you are reading about a feature you have no use for and +thus no experience with. If you need to use something and don't +understand what is said about it here, just try the examples I +give in one of your manuscripts and see if you can figure it out +from there. If that doesn't work, try finding someone who does +use the feature and ask them. As a last resort, try finding a +\tex\ wizard and asking them. + +If you wish a quick summary of most of the \ytex\ commands, you +should turn to the tables of commands, parameters, and switches +at the very end of this document. + + \section {Some Notation and Conventions I Use Throughout} + +In what follows, I try to use notation and conventions very +similar to those Knuth uses in the \tex book. For +convenience,\footnote*{(and also for those many of us who find +the \tex book completely confusing)} I summarize most of +the conventions here. + +\beginbullets + +\bpar Text set in "typewriter" type is suitable for \ytex\ input. + +\bpar Commands---also called {\it control sequences} or {\it +macros}---all start with a backslash. {\it Alphabetic commands} +such as "\section" and "\it" have one or more letters after their +backslash, while {\it non-alphabetic commands} such as "\'" and +"\&" have a single non-letter after their backslash. When you +use an alphabetic command, you must have a space or other +non-letter right after the command name (as in "{\it italics}"), +and any spaces after the command are ignored by \tex. When you +use a non-alphabetic command, you can have anything at all after +the command name (as in the Spanish "m\'agico"), and spaces you +put there are {\it not} ignored by \tex. + +\bpar Commands sometimes need {\it arguments}, such as the stuff +typed in braces in +\beginverb +\section {This is the Argument.} +\endverb +Most commands which use arguments---a process also called {\it +taking} or {\it reading} arguments---expect their arguments to be +enclosed in braces (as they were in this example). But there are +other ways of specifying arguments, and these are detailed in +what follows. + +\bpar \ytex\ and \tex\ both have the notion of {\it parameters} +which have {\it values}. For example, the value of the "\hsize" +parameter is used as the normal length of lines in paragraphs. +To set a parameter, you give the name of the parameter, an +optional `"="' sign, and then the desired new value for the +parameter. For example, to set the normal line length to 5 +inches, you could say either of the following things: +\beginverb +\hsize=5in +\hsize 5in +\endverb + +\bpar There are several kinds of parameters: parameters +hold integers (such as 3 or $-1$), parameters hold +distances (such as "2in" or "5pt"), parameters hold +variable distances (such as "6pt plus 2pt minus 1pt"), and +parameters hold token lists (such as +"{\bigsize\bf}").\footnote\dag{There are also +parameters, but only math wizards worry about those.} The +different kinds of parameters are used for different purposes; +for example, the "\hsize" parameter mentioned above is a +because line length is a distance, and the "\pageno" parameter +that holds the current page number is---as expected---an + parameter. But no matter what their type, you assign +values to parameters in the manner described above. + +\bpar If you ever want to examine the value of a parameter---for +example, if you want to know what it is so you can change it +appropriately---you can get \ytex\ to show you the value by +putting "\showthe" in front of the parameter name. For example, +if you said "\showthe\parindent" in your input file, \ytex\ would print +\beginverb +>20.0pt. +... \showthe\parindent +\endverb +on your terminal screen when it processes your input. It would +then pause and wait for you to type a carriage return before +continuing. + +\endbullets + + \section {Format of a \ytex\ Input File} + +\ytex\ input is just normal \tex\ input.\footnote*{Of course, +this means \tex82! \tbase\ input, for example, will not work in +\ytex.} It is customary, however, to start \ytex\ input files +with a comment indicating that \ytex\ is expected to process the +file. For example, the manuscript file for this document starts +with the line +\beginverb +% for yTeX +\endverb +so anyone who looks at the file will realize this. + +The first command in every \ytex\ manuscript should be a +\="\typesize"\= command specifying the desired type size for the +text of the document. For example, after the comment shown +above, the manuscript for this document has the line +\beginverb +\typesize=11pt +\endverb +As you can see, a "\typesize" command looks like a command for +setting one of \tex's parameters, such as "\parindent". +However, the dimension that follows the equal sign must be one +of 10pt, 11pt, or 12pt, since these are the only sizes that +\ytex\ supports for normal text. + +If you forget to put a "\typesize" command at the beginning of +your manuscript, \ytex\ will complain with the error message +\beginverb +! You never gave a \typesize command. +\endverb +Don't panic; just type a carriage return and \ytex\ will use +10~point type. But you should add a "\typesize" command before +you run the file again. + +You can't give more than one "\typesize" command in a single +manuscript. This is because \ytex\ implements your desired size +by magnifying a 10pt document by the right amount, and \tex\ does +not like to change magnification in the middle of a run. This +may seem like a drawback, but it's really a feature, because it +means that the line and page breaks will not change if you run a +manuscript through \ytex\ a second time using a different +typesize! So you can proof your document in one size and run it +off in a different size without worrying about formatting +changes. + + \section {How To Invoke \ytex} + +To invoke \ytex\ on \sy{OZ} you give the command \sy{YTEX} to the +\sy{EXEC}.\footnote*{The commands \sy{YTEXHE} and \sy{YTEXTR} +also exist for those who prefer the Helvetica or Times Roman font +families.} \ytex\ starts up by printing a release number and +reading in any recent fixes to itself. It then looks for two +files called \sy{YMATH.TEX} and \sy{YLOCAL.TEX} in your +connected directory (and on \sy{TEXINPUTS:} if they are not +found locally). You can customize your \ytex\ by putting +appropriate commands in these two files. + +The \sy{YMATH.TEX} files are intended for favorite mathematics +macros while the \sy{YLOCAL.TEX} macros are for macros or +parameter settings of any kind. Of course, all kinds of \tex\ +commands can be put in either of these files, but keep the +following in mind: separating math macros from others can make +the job of merging different authors' manuscripts a lot easier. + + \section {Where are the Sources} + +The source for \ytex\ lives in the directory \sy{KS:} +on \sy{OZ} and is split primarily among the files \sy{YTEX.MAC}, +\sy{YBASE.MAC}, \sy{YFONTS.MAC}, and \sy{YUSER.MAC}. The file +\sy{YLOG.MAC} contains a log of essentially all the changes made +to \ytex\ since its early stages; the first few lines of this +file declare the current version number. The file \sy{YSITE.MAC} +contains definitions and parameter settings (``site changes'') +appropriate to the local installation. The file \sy{YUSAGE.TEX} +contains the source for this document. + +The file \sy{KS:YFIX.MAC} is where \ytex\ looks for +revisions made to the macros since the last version was dumped. +Finally, an archive of correspondence about \ytex\ can be found +in the file \sy{KS:YTEX.MAIL} on \sy{OZ}. + + \section {The \ytex\ View of Documents} + +\ytex\ believes that documents are made up of chunks of text +called {\it elements} which are laid out on pages. For example, +each paragraph is an element, as is each chapter or section +heading, each figure, each footnote, and so on. Many of the +\ytex\ commands you will use most often serve to tell \ytex\ +which text belongs to which element. For example, the command +"\footnote" tells \ytex\ that its argument is a footnote +element. + +As \ytex\ encounters elements of various types in its input, it +first tries to format the content of each element in the desired +way. For example, when it finishes reading the contents of a +paragraph, it first tries to break the contents into lines +according to the rules currently in effect for paragraph +elements. When \ytex\ finishes reading the text of a table, it +tries to format that text according to the current rules for +table elements. + +Once \ytex\ accumulates enough elements to fit on a page, it +tries to lay those elements out on a page according to the layout +rules that apply to each element. For example, header elements +appear as a single line alone at the very top of a page, while +footnote elements appear tacked onto the bottoms of pages. + +Page layout is the hardest part of \ytex's job. This is because +the rules for laying out various elements may come into conflict. +For example, the rules for figures elements that appear in text +may say that the figure should be separated from the surrounding +text by one pica.\footnote*{There are six picas to the inch.} +But a figure may be placed just before a section heading, and the +rules for section heading elements may say that they should be +preceded by two picas. In cases like this, \ytex\ does the best +it can, but it may not do exactly what you want. So if you are +very picky about the page layout of a particular document, you +may have to tell \ytex\ exactly what you want at each place a +conflict like this arises. But don't worry: usually only people +who are publishing books need to be this picky. + + \section {The Five Kinds of \ytex\ Commands} + +There are five kinds of \ytex\ commands: + +\beginbullets + +\bpar {\it Delimiters\/} are commands that demarcate the text of +particular elements: they do what is commonly known as +``typemarking.'' For example, "\section" and "\footnote" are +both delimiters. All delimiters read arguments (in ways +explained below); it is the contents of these arguments that +become the contents of the elements they delimit. + +\bpar {\it Parameters\/} are commands that affect the formatting +and layout rules for particular elements. For example, "\hsize" +and "\parskip" are parameters that affect the width and layout of +paragraphs and pages. Parameters don't take arguments; instead, +they have values which can be assigned in the manner described +above. + +\bpar {\it Switches\/} are commands like parameters that affect +the formatting and layout of particular elements. For example, +"\noindent" and "\offheaders" are switches. Switches come in two +kinds---on/off switches and true/false switches---which are +described in detail later. Switches never take arguments. + +\bpar {\it Abbreviations\/} are commands that expand into common +sequences of low-level \tex\ commands. For example, "\padline" +and "\linebreak" are abbreviations. Some abbreviations have +arguments, and some don't. Any abbreviations that take arguments +take them in braces in the normal \tex\ way. + +\bpar {\it Descriptors\/} are commands that create new element +types with particular formatting and layout rules. For example, +the commands "\newfloat" and "\newtitle" are descriptors that +are used to create elements which float to the top of pages or +which title things. Descriptors take very complex arguments. + +\endbullets + +Normally, you use only delimiters, parameters, switches, and +abbreviations in your manuscripts. Descriptors are for +compulsive \tex\ hackers who feel the need for new element types, +or for wizards who are preparing documents with special +requirements (such as this manual). + + \section {More About Delimiter Commands} + +Delimiters come in three kinds: + +\beginbullets + +\bpar {\it Standard\/} delimiters---such as "\section", "\footnote", +or "\spread"---take their arguments in the standard \tex\ way: +the arguments are enclosed in braces and appear immediately after +the command. For example, this is how you give two arguments +to the "\spread" command: +\beginverb +\spread {First argument}{Second argument} +\endverb + +\bpar {\it Paired\/} delimiters---such as +"\begintext"/\allowbreak"\endtext" and +"\beginabstract"/\allowbreak"\endabstract"---surround their +argument. For example, this is how you delimit the text of an +abstract: +\beginverb +\beginabstract +This is a very short abstract +used only for expository purposes. +I wish all my abstracts were this simple. +\endabstract +\endverb + +\bpar {\it Paragraph\/} delimiters---such as "\bpar" and +"\ftpar"---are kind of a cross between standard and paired +delimiters. Their most important argument---the text of the +paragraph---is delimited by the paragraph delimiter in front and +the command "\par" (or a blank line) in back. But they may have +additional arguments (such as tag text) which are given in braces +immediately following the paragraph delimiter. For example, this +paragraph starts with +\beginverb +\bpar {\it Paragraph\/} delimiters--- +\endverb +and ends with a blank line. But it would look exactly the same +if it had started with +\beginverb +\ftpar{$\bullet$} {\it Paragraph\/} delimiters--- +\endverb +instead. + +\endbullets + +Most paired delimiters are also available in a standard form. +For example, you can use the command "\abstract" instead of +"\beginabstract" and "\endabstract", in which case you would +enclose the text of the abstract in braces and place it right +after the command.\footnote*{The only paired delimiters that are +not available in standard form are those in which the delimited +text is in ``nofill'' mode, such as "\beginverbatim" and +"\endverbatim". This has to do with subtle differences between +the effect of the two forms, differences that you needn't care +about and which can confuse even \tex\ wizards.} As you may have +guessed from the example, you get the standard form of paired +delimiters by removing the "begin" and "end" prefixes. + +Each argument to a standard or paired delimiter is a local group; +that is, font and other parameter changes inside the element do +not have any effects outside. So if you want the text of your +abstract to be in italics, you can just say +\beginverb +\beginabstract +\it This abstract is in italics. +\endabstract +\endverb +instead of the (also correct but) tedious +\beginverb +\beginabstract +{\it This abstract is in italics.} +\endabstract +\endverb +Similarly, you can just say +\beginverb +\section {\it An Italic Section Header} +\endverb +instead of +\beginverb +\section {{\it An Italic Section Header}} +\endverb + + \section {More About Switches} + +Switches come in two kinds: + +\bpar {\it On/off} switches are usually used to control whether +things such as headers and footers appear on a page. +For example, whether headers appear or not is controlled by the +two commands "\onheaders" and "\offheaders". These two commands +together are said to control the "\headers" switch. + +\vpar All on/off switches have variations in a {\it yes/no} form. +For example, the commands "\yesheaders" and "\noheaders" are like +"\onheaders" and "\offheaders", except that they {\it only} +control headers on the current page, not on future pages as well. + +The point of having both on/off and yes/no versions of switches +can be seen from the following: If you want none of the pages of +a letter numbered, you would put "\offfooters" at the beginning of +the letter. But if you want numbers on the bottoms of all pages +except the first, you would put "\nofooters" at the beginning. +The effect of "\nofooters" is to turn off the "\footers" switch +for the first page {\it only}. + +\bpar {\it True/false} switches are mostly used by wizards, so I +won't say much about them here. They are much like off/on +switches except that they have a different form. For example, +the "\vpar" switch controls whether the first paragraph after a +section heading is left-flush or not; the "\vpar" switch is +turned on with "\vpartrue" and turned off with "\vparfalse". You +can see the effects of saying "\vpartrue" in this document. + + \section {A List of the \ytex\ User Macros} + +This section contains descriptions of the most useful \ytex\ +macros. The listing is broken down by subject area; for example, +all the commands relevant to footnotes can be found in one place, +and all the commands relevant to sectioning in another. The next +section gives an alphabetized list of all the commands. + +In the following descriptions, only the "begin" half of paired +delimiters is mentioned. All the paired delimiters are available +in standard forms unless the description mentions otherwise. +Also, only the "on" form of on/off switches is mentioned. Of +course, the "off", "yes", and "no" forms are also available. + + \heading {Titling Pages} + +\ytex\ provides two kinds of titling pages: {\it part pages} +which are delimited by \+"\beginpartpage"\+ and {\it title pages} +which are delimited by \+"\begintitlepage"\+. The only +difference between the two is that title pages are always +numbered 0 while part pages have whatever number they would +normally be assigned. The contents of titling pages are centered +by default, and titling pages have no runners unless you ask for +them. + +The following commands are useful both on titling pages and +elsewhere: + +\begingab + +\*\+"\begintitle"\+ and \+"\beginctitle"\+\\set their arg as +titles. "\begintitle" gives a left-flush ragged-right paragraph +and "\beginctitle" gives a ragged-center paragraph. Inside of +titles, the commands \+"\\"\+, \+"\cr"\+, and \+"\crcr"\+ force +line breaks. + +\*\+"\beginauthor"\+ and \+"\begincauthor"\+\\are like +"\begintitle" and "\beginctitle" but use \="\authorfont"\= +(default "\regsize\rm") instead of \="\titlefont"\= (default +"\bigsize\bf"). + +\*\+"\beginabstract"\+\\delimits abstract text which is set in +\="\abstractfont"\= (default "\smlsize\rm") and indented from +both margins by "\abstractindent" (default "0pt"). + +\endgab + +The following command is available only on titling pages: + +\begingab + +\*\+"\beginbottomtext"\+\\delimits text which is set at the +bottom of the page in \="\bottomtextfont"\= (default +"\smllsize\rm"). If you use this command, the text of the page +will no longer be centered. Instead, the delimited material +appears at the bottom of the page and material above it will +start at the top of the page. + +\endgab + + \heading {Chapters and Sections} + +These macros produce titles at the top of chapters, sections, and +so on. Titles are normally set as left-flush, ragged-right +paragraphs. Inside of titles, the commands \+"\\"\+, \+"\cr"\+, +and \+"\crcr"\+ force line breaks. + + +\begingab + +\*\+"\beginchapter"\+ "\endchapter"\\starts a new +chapter. The <title> is set in the \="\chapterfont"\= (default +"\bigsize\bf") as a left-flush ragged-right paragraph. The title +is preceded by \="\prechapterpenalty"\= and +\="\abovechapterskip"\= and followed by \="\postchapterpenalty"\= +and \="\belowchapterskip"\=. Most people prefer the standard +form "\chapter"~\#{<title>}. + +\*\+"\beginpchapter"\+\\is like "\beginchapter" but it forces the +title to the top of a new page and turns off runners for that +page. In two-sided matter, it forces the title to the top of a +recto page. + +\*\+"\beginsection"\+\\is like "\beginchapter" but uses smaller +font and spacing. Neither chapters nor sections do any automatic +numbering for you. But there are no-op commands \+"\secdef"\+ +and \+"\secref"\+ which, like their figure and table cousins, can +be used to help keep track of numbering. There are commands +\+"\beginsubsection"\+ and \+"\beginsubsubsection"\+ but they are +just aliases for "\section". + +\*\+"\beginheading"\+\\is like "\beginsection" but with smaller +font and spacing. + +\endgab + +The true/false switch \:"\centerheadingstrue"\: controls whether +chapter, section, and other titles are set as left-flush or +centered ragged-margin paragraphs. The default is +"\centerheadingsfalse"; that is, headings are left-flush as +mentioned above. + + \heading {Page Layout} + +Pages have headers and footers, jointly called runners. When +they are turned on, runners are single lines that appear +separated from the main text by the distances \="\headerdrop"\= +and \="\footerdrop"\=.\footnote*{These dimensions are not +measured baseline-to-baseline; rather, they are the appearing +space between the runners and the text.} By default, headers are +turned on and footers are turned off. + +\begingab + +\*\:"\onrunners"\:, \:"\onheaders"\:, and \:"\onfooters"\:\\are +switches that turn the various runners on. Recall that the +effects of these commands are permanent; the effects of their +yes/no counterparts are confined to the current page. + +\endgab + +There are actually two versions of headers and footers---one for +recto (right-hand or odd-numbered) pages and one for verso +(left-hand or even-numbered) pages. By default, all pages are +considered to be recto pages, but you can use the switch +\:"\twosidedtrue"\: to get two-sided output and "\twosidedfalse" +to go back to one-sided. + +The contents of headers and footers are the values of the <toks> +parameters \="\versoleftheader"\=, \="\rectoleftheader"\=, and so +on. By default, the \="\rectorightheader"\=, the +"\versoleftheader", and both center footers contain a boldface +page number (called a {\it folio}); these come out in roman +numerals if they are negative. (The page number is the parameter +\="\pageno"\= which you can set.) Also by default, the +"\rectoleftheader" is the "\firstmark". + +For example, if you want your pages numbered at the bottom, you +could say +\beginverb +\offheaders % turn off the header lines +\onfooters % turn on the footer lines +\endverb +because the footers contain page numbers by default. If you want +each page to have a title and a page number, you can say +\beginverb +\rectoleftheader={The Title of My Paper} +\endverb +Since this is done so often, there is a synonym +\="\runninghead"\= for "\rectoleftheader" that lets you say +\beginverb +\runninghead={The Title of My Paper} +\endverb +instead. + +The default font for runners is kept in the <toks> parameter +\="\runnerfont"\=, which starts out as "\smlsize\rm". + + \heading {Paragraphs} + +Each paragraph is an element to \ytex. Paragraphs are considered +to consist of a crown (the first line) and a vest (all the other +lines). By default, the crown is indented "\parindent" and the +vest is not. But there are a variety of paragraph delimiters +that give you paragraph elements that are formatted differently. +(Recall that paragraph delimiters start paragraphs that are +ended by "\par" or a blank line.) + +\begingab + +\*\+"\ivpar"\+\\delimits an {\it inverted} paragraph: the crown +is not indented but the vest is. + +\*\+"\ipar"\+\\delimits an {\it indented} paragraph: both crown +and vest are indented. + +\*\+"\ftpar"\+ \#{<tag text>}\\delimits a {\it flush-tagged} +paragraph: both crown and vest are indented and the first +argument (in braces) to "\ftpar" is set flush on the left margin +of the crown. For example, +\beginverb +\ftpar {1.} First line ...\linebreak second line ...\par +\endverb +produces a paragraph that looks like this: +\begintextlines +\parindent=2em% +\ftpar{1.}First line \dots\linebreak{}second line \dots +\endtextlines + +\*\+"\atpar"\+ \#{<tag text>}\\delimits an {\it adjoint-tagged} +paragraph: both crown and vest are indented and the first +argument (in braces) to "\atpar" is set so its right edge is +\="\partagsep"\= away from the left edge of the crown line. +(This is like the \plain\ \tex\ "\item" command.) For example, +\beginverb +\atpar {a)} First line ...\linebreak second line ...\par +\endverb +produces a paragraph that looks like this: +\begintextlines +\parindent=2em% +\atpar{a)}First line \dots\linebreak{}second line \dots +\endtextlines + +\*\+"\vtpar"\+ \#{<tag text>}\\delimits a {\it variably-tagged} +paragraph: the crown, vest, and tag are set just like an +adjoint-tagged paragraph but the width of the indent is not the +"\parindent" but instead is the width of the tag text. For +example, +\beginverb +\vtpar {Keywords:} This ...\linebreak and that ...\par +\endverb +produces a paragraph that looks like this: +\begintextlines +\vtpar{Keywords:}This \dots\linebreak{}and that \dots +\endtextlines + +\*\+"\bpar"\+\\delimits a {\it bullet} paragraph: a flush-tagged +paragraph whose tag is a bullet symbol. + +\endgab + +If bullet paragraphs appear next to each other, it is good +practice to put a \+"\beginbullets"\+ before the first one and an +\+"\endbullets"\+ after the last one. This will add a little +space before and after so as to visually cluster the paragraphs. + +If you interpose math or a figure or a title between paragraphs, +it is standard typesetting practice not to indent the paragraph +immediately following the interposed element. For example, +the paragraphs which immediately follow section titles +in this document are not indented, nor are those which follow +figures or textual displays. + +To follow this practice in your own documents, you could +use "\noindent" to start the paragraphs which follow interposed +elements. But \ytex\ does this for you automatically. The +command \+"\vpar"\+ effectively forces the next paragraph to +start with "\noindent", and all \ytex\ commands which interpose +material between paragraphs---such as "\section"---end with +"\vpar". Thus you will not have to use "\noindent" after +figures and so on. + +If for some reason you want a particular paragraph that follows +interposed text to be indented normally, just give the command +\+"\unvpar"\+ in front of that paragraph. "\unvpar" cancels the +effect of "\vpar" and allows the paragraph to be indented. + +\begingab + +\*\:"\vpartrue"\: and "\vparfalse"\\allow and disallow the +effects of "\vpar". If you don't want the first paragraphs of +sections and so on to be left-flush, say "\vparfalse". + +\*\+"\linebreak"\+\\ends the current line of a paragraph, filling +out to the right hand margin with blank space. + +\*\:"\onindent"\:\\turns the default indentation of crown lines +on. If you want your paragraphs to normally have no indentation, +say "\offindent". But keep in mind that this will break commands +like "\bpar" which rely on indentation. + +\*\+"\beginquote"\+\\delimits a quote. Quotes are set in the +\="\quotefont"\= (default "\smlsize\rm") with the left and right +margins narrowed by "\parindent". Inside of quotes paragraph +indentation is turned off (with "\offindent"). + +\endgab + + \heading {Fonts and Sizes} + +To change type face in a document, you use the normal \tex\ +commands "\it", "\bf", "\tt", "\sl", and "\rm". To change to +increasingly bigger sizes of type, you can use the commands +\+"\bigsize"\+, \+"\biggsize"\+, and \+"\bigggsize"\+. For +increasingly smaller sizes, you can use \+"\smlsize"\+, +\+"\smllsize"\+, and \+"\smlllsize"\+. You can switch to the +regular size with \+"\regsize"\+. The size-changing commands all +switch to the roman face. + +There are commands \+"\smlrm"\+, \+"\smllrm"\+, and \+"\smltt"\+ +which are like face-changing commands in that the baseline +spacing does not change, but the ``typeface'' they switch to are +actually smaller sizes of the indicated face. For example, to +get the effect of what printers call ``small caps'', you can use +the "\smllrm" face. To get \lisp, you would say +"L{\smllrm"~"ISP}". + +If you ever want to set material in the font selected by a font +parameter such as "\titlefont", you can select that font by +saying "\the" in front of the parameter name. For example, to +set three words in the "\captionfont", I could say +\beginverb +Here are {\the\captionfont three small words}. +\endverb +which gives me +\begintext +Here are {\the\captionfont{}three small words}. +\endtext +\vpar + +The command \+"\singlespace"\+ causes lines to be single spaced, +and the command \+"\doublespace"\+ causes lines to be double +spaced. Single spaced lines are the default. These commands +affect all text, including footnotes and captions, so that if you +use "\doublespace" you might want to add a "\singlespace" command +to the font parameters for footnotes, captions, and so on. If +you don't like the exact spacing values used by "\singlespace" or +"\doublespace", read what it says below about line spacing for +wizards and define your own versions of these commands. + + \heading {Figures} + +You can ask \yTeX\ to lay out your figures in one of four ways: +{\it stationary}, which means that figures are boxes that appear +where they are defined; {\it section}, which are like stationary +except that they are followed by "\vfil" glue which makes them +suitable for putting all in one section with no intervening text; +{\it top}, which means all figures float to the top of a page; or +{\it floating}, which means they appear where they are defined +unless they can't fit on the page there in which case they float +to the top of the next page they fit on. The current layout +discipline (default {\it floating}) can be set with +\+"\stationaryfigures"\+, \+"\sectionfigures"\+, +\+"\topfigures"\+, and \+"\floatingfigures"\+. + +\begingab + +\*\+"\figdef"\+ and \+"\figref"\+\\are no-ops which are useful +for keeping track of figure numbers. + +\*\+"\beginfigure"\+\\delimits a figure definition. You get a +figure layed out according to the current discipline. Each +figure is enclosed in a "\vbox" so you don't have to worry about +breaks. + +\begingroup \figurelinetrue +\beginfigure + +\noindent This figure was defined with +\beginverb +\beginfigure +\noindent This figure was defined with ... + ... +\begincaption +Figure~\figdef{1}. A figure which is ... +... it will float. +\endcaption +\endfigure +\endverb +and this was the result. + +\begincaption +Figure~\figdef{1}. A figure which is also an example of how to +prepare a figure. This figure will appear where it was defined +unless it can't fit on that page, in which case it will +float. +\endcaption + +\endfigure +\endgroup + +\*\+"\beginpagefigure"\+\\delimits a full-page figure definition. +These figures go on pages by themselves. + +\beginpagefigure + +\vfil + +\noindent This full-page figure was defined with +\beginverb +\beginpagefigure +\vfil +\noindent This full-page figure was defined with ... + ... +\begincaption +Figure~\figdef{2}. A figure which is ... +... it will float. +\vfil +\endcaption +\endpagefigure +\endverb +and this was the result. + +\vfil + +\begincaption +Figure~\figdef{2}. A figure which is also an example of how to +prepare a figure. This figure will appear where it was defined +unless it can't fit on that page, in which case it will float. +\endcaption + +\endpagefigure + +\*\+"\beginstationaryfigure"\+\\gives a stationary figure no +matter what the current layout discipline is. The paired +delimiter "\beginstationarypagefigure" gives a full-page +stationary figure, and there are similar explicit commands +provided for all four of the layout disciplines. + +\*\+"\begincaption"\+\\is defined only within figures and +delimits captions, which are set as unindented paragraphs in +\="\captionfont"\= with margins narrowed by \="\captionindent"\=. +Captions are preceded by \="\abovecaptionskip"\=. + +\endgab + +For examples, see figures~\figref{1} and~\figref{2}, which I +referred to here by saying +\beginverb +... see figures~\figref{1} and~\figref{2}, ... +\endverb +Note, in particular, that figure~\figref{1} is bracketed by +horizontal lines. \ytex\ will put out such lines if you say +\:"\figurelinetrue"\: at the front of your document; the default +is \:"\figurelinefalse"\: (no lines). (The lines themselves are +put \="\figurelinedrop"\= away from the body of the figure.) + +The easiest way to leave space for a paste-in figure is to define +a figure whose body consists of a vertical skip command, as in +\beginverb +\beginfigure +\vskip 2 true in +\begincaption +This will be a 2 inch high pasted in figure. +\endcaption +\endfigure +\endverb +Note that the amount to skip was given in {\tt true} inches, not +just inches. This is because typesizes larger than ten point are +implemented by magnifying the entire document: if the dimension +had been given as "2in" and the typesize were given as "11pt", +\yTeX\ would leave 2.2 inches of space instead of 2. The use of +"true" in the dimension specification prevents \yTeX\ from +magnifying the space it leaves for the paste-in +material.\footnote*{Keep in mind that specifying sizes in true +dimensions may cause the page breaks to change when the type +size changes. If you are proofing in a larger typesize and you +want page breaks to remain consistent, you should specify +paste-in sizes {\it without} the "true" specification, basing the +declared size on the magnification which will be used in {\it +final} output. Then don't worry about the fact that the spaces +in the proof version are a little large.} + +There is a <toks> parameter \="\topsep"\= whose contents are +inserted between the floating figures and text on any page where +floating figures appear. By default, "\topsep" is empty, so only +the normal below-figure space appears between floating figures +and text. If you want more space, you can say, for example, +\beginverb +\topsep={\bigskip} +\endverb + + \heading {Tables} + +Tables are delimited with \+"\begintable"\+ and "\endtable". +Right after the "\begintable" command you must have a {\it +preamble specification} enclosed in brackets ("[" and "]"), such +as in +\beginverb +\begintable [l"r|lc] +\topline +Item&& Price&& User& Use\cr +\dmidline +Widgets&& \$2.50&& D. Brotsky& \TeX\ work\cr +\midline +Grommets&&\$2500.50&& The Pentagon& none\cr +\botline +\endtable +\endverb +which produces table~\tabref{1}. + +\beginfigure + +{\catcode`\"=12\relax + \centerline {% + \begintable [l"r|lc] + \topline + Item&& Price&& User& Use\cr + \dmidline + Widgets&& \$2.50&& D. Brotsky& \TeX\ work\cr + \midline + Grommets&&\$2500.50&& The Pentagon& none\cr + \botline + \endtable}} + +\begincaption +Table~\tabdef{1}. This table is produced by the example in the +text. Well, actually, this table is {\it almost} produced by +that example; in fact, this one has also been centered on the +page by putting the entire text of that example into the argument +of "\centerline". +\endcaption + +\endfigure + +Inside of a preamble specification, each character stands for one +column in the table. The meanings of the characters are: +\begindisplaytable [cl] +"l"& left-aligned column\cr +"L"& left-aligned math column\cr +"c"& center-aligned column\cr +"C"& center-aligned math column\cr +"r"& right-aligned column\cr +"R"& right-aligned math column\cr +"|"& single-thickness vertical line\cr + \"& double-thickness vertical line\cr +"&"& repeat specification marker\cr +\enddisplaytable +Math columns are just like their non-math counterparts except +that the entries are set in math mode in \="\tablestyle"\= +(default "\displaystyle"). The "&" specification allows you to +take advantage of \tex's automatic iteration of column +specifications: if you have more entries in a line than you have +columns in the preamble, the preamble columns will repeat from +wherever the "&" was specified. + +The thickness of a "|" line is the <dimen> parameter +\="\vbarwidth"\= (default ".4pt") and the thickness of a \" line +is the <dimen> parameter \="\dvbarwidth"\= (default "1pt"). Keep +in mind that "|" and \" columns must be delimited by "&" like +other columns. It's just that normally the contents of these +columns are empty, so you end up with "&&" in the rows of your +input. + +Inside tables the command "\\" ends rows like "\cr". In +addition, you get access to a variety of useful commands: + +\begingab + +\*\+"\inline"\+\\puts a horizontal line in the table. Better to +use are \+"\topline"\+, \+"\midline"\+, and \+"\botline"\+ (which +you normally use at the top, middle, and bottom of the table) +because they put padding around the line which looks good. + +\*\+"\dinline"\+, \+"\dtopline"\+, \+"\dmidline"\+, and +\+"\dbotline"\+\\are the double-width counterparts of the +commands mentioned above. "\inline"-type lines have thickness +\="\hbarheight"\=, and "\dinline"-type lines have thickness +\="\dhbarheight"\=. + +\*\+"\padline"\+ <dimen>\\puts <dimen> extra space between lines +of the table with the nice feature that vertical bars specified +in the preamble extend right through the extra space. The +<dimen> is not an argument: don't put it in braces. + +\endgab + +In addition, you get \+"\tabdef"\+ and \+"\tabref"\+ which, like +"\figdef" and "\figref", are no-ops useful for keeping track of +table numbers. Also, there are the following table-affecting +parameters: + +\begingab + +\*\="\pretabskip"\=, \="\intabskip"\=, and +\="\posttabskip"\=\\are the glue parameters that "\tabskip" glue +is set to before the first column, between columns, and after the +last column of a table. Defaults are "\hfil" glue for +"\pretabskip" and "\posttabskip", "1em" glue for "\intabskip". + +\*\="\tablewidth"\=\\is settable like a <dimen>, and setting it +has strong side effects. If you set it positive, all lines in +tables are set to that width. If you set it to zero, tables have +their natural width. If you set it negative, tables are expanded +by the negative of what you set it to. The default is "0pt"; +that is, tables have their natural size. + +\endgab + +Finally, in addition to the "\begintable" command which puts a +box around its table, there is \+"\beginopentable"\+ which does +not put a box and there is \+"\begindisplaytable"\+ which centers +the whole table in a "$$"-style display. + + \heading {Footnotes} + +\ytex\ gives you a footnote mechanism essentially equivalent to +\plain's, but footnotes are output as adjoint-tagged paragraphs +in the \="\footnotefont"\= with an indent of +\="\footnotemarkerwidth"\=. + +\begingab + +\*\+"\footnote"\+\#{<tag>}\#{<footnote text>}\\puts <tag> where +you call "\footnote" and also gives you a footnote marked with +<tag>. You use "\footnote" inside paragraphs. + +\*\+"\nfootnote"\+\#{<tag>}\#{<footnote text>}\\is like +"\footenote" but the <tag> must be a number. The tag is set as a +superscript. + +\*\+"\vfootnote"\+\#{<tag>}\#{<footnote text>}\\is like +"\footnote" but it doesn't put the tag where you call it, only on +the footnote text itself. You use "\vfootnote" between +paragraphs. + +\*\+"\beginfootmatter"\+\\gives you a footnote with no marker and +with no left margin indentation where the marker would go. I'm +not sure why you would want this. + +\endgab + +The no-ops \+"\footdef"\+ and \+"\footref"\+ are provided to help +keep track of footnote numbering. There is a <toks> parameter +\="\botsep"\= whose contents are inserted between the text and +footnotes on any page where footnotes appear. By default, +"\botsep" puts in some space and a short line. If you just want +space, you can say, for example, +\beginverb +\botsep={\bigskip} +\endverb + + \heading {Textual Displays} + +These macros give you "$$"-like displays containing text and +other useful textual blocks. There are no standard forms for any +of the "begin" and "end" paired delimiters that produce textual +displays. + +\begingab + +\*\+"\beginnofill"\+\\delimits text that is not made into filled +lines, but output in lines as it appears in the input. +Indentation is turned off. + +\*\+"\begintext"\+\\gives you a "$$"-like display containing the +nofill material it delimits. The displayed lines have width +"\displaywidth" and are indented "\parindent" from the normal +"\displayindent" of the display. + +\*\+"\begintextlines"\+\\is like "\begintext" but the displayed +lines are the full "\hsize" wide and the normal "\displayindent" +is ignored. + +\endgab + +\hangindent 2\parindent \hangafter0 +\noindent For example, this is a paragraph which has both its +crown and vest indented twice the normal paragraph indentation. +If, inside this paragraph, we produce a display with +\beginverb +\begintext +Here is the first line of the display +Here is the second. +\endtext +\endverb +then the result appears to have a left margin even with the +indentation of the paragraph, as in: +\begintext +Here is the first line of the display +Here is the second. +\endtext +(Each line of the display is indented "\parindent" from the +margin because each line starts a paragraph.) But if we specify +the text of the display using the following commands: +\beginverb +\begintextlines +Here is the first line of the display +Here is the second. +\endtextlines +\endverb +then the display ignores the indentation of the paragraph, +producing the following: +\begintextlines +Here is the first line of the display +Here is the second. +\endtextlines + +\begingab + +\*\+"\begincode"\+ and \+"\begincodelines"\+\\are like +"\begintext" and "\begintextlines" but the material is set in the +typewriter font. + +\*\+"\verb"\+\\is used as +\begintext +\noindent"\verb"<char><text><char> +\endtext +and gives you <text> verbatim in the typewriter font. All \tex\ +special characters (such as "\" and "&") are treated as normal +characters. + +\*\+"\beginverb"\+ and \+"\beginverblines"\+\\are like +"\begincode" and "\begincodelines" except the intervening text is +taken verbatim. + +\endgab + +\begingroup + +\newverbatim\myverb + \begincs \beginmyverb + \readcs \readmyv@rb + \endcsname endmyverb% + \display + \setup \hsize=\displaywidth \advance\leftskip\displayindent \tt + \begin + \end + \endnew + +For example +\beginmyverb +\beginverb +\noindent This is some \verbatim \text. +\centerline {Note that commands are ignored.} +\endverb +\endmyverb +produces +\beginverb +\noindent This is some \verbatim \text. +\centerline {Note that commands are ignored.} +\endverb + +\endgroup + +\begingab + +\*\+"\beginlisp"\+ and \+"\beginlisplines"\+\\delimit \lisp\ +programs. Programs are printed in the \="\lispfont"\= (default +"\regsize\tt") in nofill mode; the \tex\ control characters (such +as "#") often found in \lisp\ code are turned off; and comments +are printed in roman. Programs are boxed to prevent breaks; the +sequence ";\pbrk"\+ at the start of a line makes that line an +escape into surrounding vertical mode: you can put in breaks and +glue. If you just specify \+"\pbrk"\+ after the semicolon, with +nothing else on the line, you get a space suitable for insertion +between function definitions. + +\endgab + +For example, this input +\beginverb +\beginlisp +;;Good Old Factorial +(defun fact (n) + (cond ((zerop n) 1) ;base case + (t (* n (fact (1- n)))))) ;recursive case +;\pbrk +(defun myfact (n) + (cond ((> n 0) (fact n)) ;OK if pos + (t (- (fact (- n)))))) ;invert if neg +;\pbrk \medskip +(fact -5) ;sample usage + -125 +\endlisp +\endverb +produces this output +\beginlisp +;;Good Old Factorial +(defun fact (n) + (cond ((zerop n) 1) ;base case + (t (* n (fact (1- n)))))) ;recursive case +;\pbrk +(defun myfact (n) + (cond ((> n 0) (fact n)) ;OK if pos + (t (- (fact (- n)))))) ;invert if neg +;\pbrk \medskip +(fact -5) ;sample usage + -125 +\endlisp + + \heading {Two-Column Text} + +The paired delimiter \+"\begintwocolumntext"\+ sets its argument +material in two columns, with the columns separated by +\="\columnskip"\=. Top figures and footnotes in this material +are still set in a single column extending the full width of the +page. Note that you can not use the floating figure style in +two-column text because there is no way of knowing in advance +whether figure material set in this style should be one- or +two-columns wide. Also, full-page stationary or section figures +are liable not to work. + +The paired delimiter \+"\begindoublecolumn"\+ sets its argument +material two columns per page, just as if the "\hsize" had been +narrowed and the results pasted up. Thus, every page becomes a +single column, and commands like "\eject" refer to columns, not +pages. The command \+"\pageeject"\+ will force a true page +break. {\it Warning}: The "\begindoublecolumn" command will +throw away everything on the current page, so it is only safe to +use at the start of a fresh page. + + \heading {Formatting Small Pieces of Text} + +These commands produce little chunks of text in useful shapes, or +combine small blocks of text in handy ways. + +\begingab + +\*\+"\spread"\+\\takes two or more arguments and spreads them out +evenly spaced on a line. For example, the input +\beginverb +\spread{Piece1}{Piece2}{}{Piece4 (3 was empty)} +\endverb +produces +\begintextlines +\spread{Piece1}{Piece2}{}{Piece4 (3 was empty)} +\endtextlines +Each piece of text except the leftmost and rightmost are centered +on their appropriate position. Notice that the empty argument +took up a position even though it didn't put anything in that +place. + +\*\+"\begintleft"\+, \+"\begintcenter"\+, and +\+"\begintright"\+\\set their arguments as left-flush, centered, +and right-flush titles in the current font. Titles are allowed +to contain more than one paragraph. Inside of titles, the +commands \+"\\"\+, \+"\cr"\+, and \+"\crcr"\+ force line breaks. + +\*\+"\sy"\+ and \+"\sybox"\+\\set their arguments in a slightly +smaller typewriter font. They differ only in that "\sybox" also +puts the argument in an hbox so it can't be broken across lines. + +\*\+"\ucsy"\+ and \+"\ucsybox"\+\\are relatives of "\sy" and +"\sybox" that put their arguments in upper case. + +\*\+"\ignore"\+\\does just that to its single argument. + +\*\+"\filpage"\+\\fills up the rest of the page with white space +and does a page break. + +\endgab + + \heading {The Date} + +\begingab + +\*\="\hour"\= and \="\minute"\=\\are <number> parameters that +hold the time \ytex\ started in 24-hour format. \+"\daytime"\+ +outputs this in the form \sybox{15:35}. + +\*\+"\monthname"\+ and \+"\monthshortname"\+\\output the name of +the current month; "\monthshortname" is three letters long. + +\*\+"\shortyear"\+\\names the current year without the first two +digits, as in 86. + +\*\+"\date"\+, \+"\shortdate"\+, and \+"\slashdate"\+\\output the +current date as in June~9,~1986; 9~Jun~86; and 6/9/86. + +\endgab + +For example, you can get output like +\begintext +Today is day 14 of Aug ({\it{}i.e.} August), % +and the time is 14:34. +\endtext +by saying +\beginverb +Today is day \number\day\ of \monthshortname +({\it i.e.} \monthname), and the time is \daytime. +\endverb + + \heading {Miscellany} + +\begingab + +\*\+"\ytex"\+, "\yTeX", "\YTEX", "\YTeX", and \+"\oopstex"\+\\all +give the \ytex\ symbol. + +\*\+"\draft"\+\\adds a line to the bottom of each page that looks +like this: +\begintextlines +\let\message=\ignore% +\draft\line{\the\bottomgloss}% +\endtextlines +This command also sets the "\overfullrule" to "5pt" instead of +the default "0pt" and prints the message "{Draft}" on your +terminal screen. + +\endgab + +Here are the default values of a few parameters not yet +mentioned: +\beginverb +\hsize=28pc \vsize=44pc +\abovedisplayskip=3pt plus1pt minus2pt +\belowdisplayskip=3pt plus1pt minus2pt +\abovedisplayshortskip=0pt plus1pt +\belowdisplayshortskip=2pt plus1pt minus1pt +\parindent=2em +\parskip=0pt plus1pt +\normallineskip=2pt +\normallineskiplimit=0pt +\clubpenalty=900 +\widowpenalty=900 +\endverb +The default "\typesize" is ten point. Keep in mind that, if you +make the "\typesize" "11pt" or "12pt", the "\hsize" and "\vsize" +will be magnified by $1.1$ or $1.2$, so you probably won't need +to change them. If you have a definite measurement you want used +for the margins independent of what magnification gets used, +specify it in ``true'' units (as in "\hsize=6 true in"). The +output routine will always try to center your output on the +output page; you can use "\hoffset" and "\voffset" to shift it +off center any desired amount. + + \section {For Wizards Only} + +Here are some features that inexperienced \tex nicians should +probably avoid. Once again they are grouped by topic: some of +the topics also appeared above. + + \heading {Page Glosses} + +Pages can have {\it glosses} which are special lines that appear +above the header and below the footer. The <toks> parameters +\="\topgloss"\= and \="\bottomgloss"\= contain the contents of +the glosses. You turn glosses off and on just like runners, but +both glosses default off. The top gloss defaultly contains a +copyright message like the following: +\begintextlines +\copyrightholder={by the author}% +\line{\the\topgloss}% +\endtextlines +while the bottom gloss is defaultly empty. The words ``by the +author'' are the value of the <toks> parameter +\="\copyrightholder"\=. + +\begingab + +\*\:"\showcopyrighttrue"\: and "\showcopyrightfalse"\\allow and +disallow the showing of the top gloss. To actually get the top +gloss to show on a particular page, you also have to say +\+"\copyrightpage"\+ somewhere on that page. + +\endgab + +The "\draft" macro described above uses the bottom gloss. + + \heading {Size Changing} + +There are also explicit size-selection commands such as +"\twelevepoint", but these pay no attention to the "\typesize", +so their use is not advised. + +The baseline spacing is set whenever a size change command is +given by saying +\beginverb +\normalbaselineskip=\the\baselinefactor em% +\baselineskip\normalbaselineskip +\endverb +Thus, the value of the <toks> parameter \="\baselinefactor"\= +(default "{1.3}") can be used to vary the baseline spacing. Note +that changes in "\baselinefactor" will not take effect until you +give a size-changing command or say \+"\setnormalbaselines"\+. +For example, these are the default definitions for "\singlespace" +and "\doublespace": +\beginverb +\def\singlespace{\baselinefactor={1.3}\setnormalbaselines} +\def\doublespace{\baselinefactor={2.6}\setnormalbaselines} +\endverb + + \heading {Setup Hooks} + +A variety of the default user-level macros---such as figures, +captions, footnotes, etc.---provide for user-defined set-up +hooks. For example, every figure macro calls the macro +"\setupfigure", which in turn calls a macro "\setupfigurehook" +which the user is free to define. Check the source code for +details as to which of these hooks exist. + + \heading {More About Tables} + +There is an escape mechanism whereby arbitrary alignment +specifications can be put into the preamble of a table. A column +is normally specified by a letter, but arbitrary material +enclosed within balanced braces may be used to specify a column +instead. For example, the preamble specification +\beginverb +[l{\hfil $\displaystyle #$}c] +\endverb +produces the following preamble +\beginverb +\tabskip\intabskip +#\hfil & \hfil $\displaystyle #$& \hfil #\hfil +\tabskip\posttabskip\cr +\endverb + +The material within matching braces can only specify one column +in the preamble: you must use more than one set of braces to +specify more than one column. There is no limit on the number of +columns that can be specified in this way. When a column is +specified in this way, the entry produced for that column by +"\padline" will contain an "\omit" so as to produce white space. +Thus, if the specified material contains a "\vrule" +specification, that rule will not extend through padding. + +If the material in braces starts with a "\tabskip" specification, +\ytex\ assumes that it contains only that specification, and it +merely embeds the specification in the preamble instead of making +it a column specification. For example, the specification +\beginverb +[l{\tabskip=2em }lr] +\endverb +produces the preamble +\beginverb +\tabskip\intabskip +#\hfil & \tabskip=2em #\hfil& \hfil #% +\tabskip\posttabskip\cr +\endverb +This mechanism can be used to vary the between-column skip within +a line. Keep in mind, however, that the "\posttabskip" will +override such specifications after the last column. + +The interline glue is normally turned off in tables, and struts +are used to keep the line spacing correct. If all of the +preamble specifications in a table are given with the "{}" escape +mechanism instead of \ytex's abbreviations, you should put struts +in at least one of the columns to force correct line spacing. + +If you specify \hbox{"height" <dimen>} as the contents of a "|" +or \" column, that will override the natural height of the +"\vrule". This is the mechanism used by "\padline". + + \section {A List of Many \ytex\ Commands} + +Here is a list of all the commands, parameters, and switches +described hereto. It is not a complete list of all the \ytex\ +commands, but it gets most of the useful ones. + + \heading {The Commands} + +The {\bf type} given in this table is one of {\bf SD} for +standard delimiter, {\bf PD} for paired delimiter, {\bf Par} for +paragraph delimiter, and {\bf A} for abbreviation. If a paired +delimiter has a standard form, it appears in this table in that +form. Paired delimiters which do not have standard forms ({\it +i.e.}, those which delimit nofill text) appear in their "begin" +form alphabetized under "begin". + +\medskip + +\begingroup + \def\crs{\cr\noalign{\vskip 0pt plus.2pt}} + \intabskip=.5em + \beginopentable [lcl]% + \bf Command& \bf Type& \bf Summary\cr + \midline + "\\"& A& breaks lines in titles, ends rows in tables\crs + "\abstract"& PD& abstract text\crs + "\atpar"& Par& adjoint-tagged paragraph\crs + "\author"& PD& author's name(s)\crs + "\begincode"& PD& typewriter font textual display\crs + "\begincodelines"& PD& unindented typewriter font textual display\crs + "\beginlisp"& PD& \lisp\ program display\crs + "\beginlisplines"& PD& unindented \lisp\ program display\crs + "\beginnofill"& PD& unboxed unfilled text\crs + "\begintext"& PD& unfilled textual display\crs + "\begintextlines"& PD& unindented unfilled textual display\crs + "\beginverb"& PD& typewriter font verbatim display\crs + "\beginverblines"& PD& unindented typewriter font verbatim display\crs + "\bigsize"& A& switch to a larger size of type\crs + "\biggsize"& A& switch to an even larger size\crs + "\bigggsize"& A& switch to an even larger size still\crs + "\botline"& A& horizontal line for bottom of tables\crs + "\bottomtext"& PD& text for bottom of title page\crs + "\bpar"& Par& bullet paragraph\crs + "\bullets"& PD& group of bullet paragraphs\crs + "\caption"& PD& caption (figures only)\crs + "\cauthor"& PD& centered author's name\crs + "\chapter"& PD& chapter title\crs + "\copyrightpage"& A& allow copyright message\crs + "\cr"& A& breaks lines in titles, ends rows in tables\crs + "\crcr"& A& breaks lines in titles, ends rows in tables\crs + "\ctitle"& PD& centered title\crs + "\date"& A& date as June 9, 1986\crs + "\daytime"& A& time of day in 24 hour format\crs + "\dbotline"& A& double width line for bottom of table\crs + "\dinline"& A& double width unpadded table line\crs + "\displaytable"& PD& table display\crs + "\dmidline"& A& double width line for middle of table\crs + "\doublecolumn"& PD& double-column mode\crs + "\doublespace"& A& double space text\crs + "\draft"& A& put draft mark on all pages\crs + "\dtopline"& A& double width line for top of table\crs + "\figdef"& A& no-op for managing figure numbers\crs + "\figref"& A& no-op for managing figure numbers\crs + "\figure"& PD& figure in current style\crs + "\figurebox"& PD& stationary boxed figure\crs + "\filpage"& A& end current page with white space\crs + "\floatingfigures"& A& figure style is {\it floating}\crs + "\floatingfigure"& PD& define floating figure\crs + "\floatingpagefigure"&PD& define floating full-page figure\crs + "\footdef"& A& no-op for managing footnote numbers\crs + "\footref"& A& no-op for managing footnote numbers\crs + "\footnote"& SD& specify footnote while in paragraph\crs + "\footmatter"& PD& specify footnote text with no marker\crs + "\ftpar"& Par& flush-tagged paragraph\crs + "\heading"& PD& left-flush heading\crs + "\ignore"& A& ignore argument\crs + "\inline"& A& unpadded horizontal line in table\crs + "\ipar"& Par& indented paragraph\crs + "\ivpar"& Par& inverted paragraph\crs + "\linebreak"& A& force line break in paragraph\crs + "\midline"& A& horizontal line for middle of table\crs + "\monthname"& A& full name of current month\crs + "\monthshortname"& A& first three letters of current month\crs + "\nfootnote"& SD& specify numbered footnote in paragraph\crs + "\oopstex"& A& the \ytex\ symbol\crs + "\opentable"& PD& unboxed table\crs + "\padline"& A& put padding in table\crs + "\pageeject"& A& force a page break in double-column mode\crs + "\pagefigure"& PD& full page figure in desired style\crs + "\partpage"& PD& titling page with usual page number\crs + "\pbrk"& A& escape to vertical mode in \lisp\ programs\crs + "\pchapter"& PD& chapter title on new page\crs + "\quote"& PD& quotation text\crs + "\regsize"& A& switch to the regular size of type\crs + "\secdef"& A& no-op for managing section numbers\crs + "\secref"& A& no-op for managing section numbers\crs + "\section"& PD& section title\crs + "\sectionfigures"& A& figure style is {\it section}\crs + "\sectionfigure"& PD& define section figure\crs + "\sectionpagefigure"&PD& define section full-page figure\crs + "\setnormalbaselines"&A& use "\baselinefactor" to set baselines\crs + "\shortdate"& A& date as in 9 Jun 86\crs + "\shortyear"& A& last two digits of current year\crs + "\singlespace"& A& single space text\crs + "\slashdate"& A& date as in 6/9/86\crs + "\smlsize"& A& switch to a smaller size of type\crs + "\smllsize"& A& switch to an even smaller size\crs + "\smlllsize"& A& switch to an even smaller size still\crs + "\spread"& SD& spread args evenly on line\crs + "\stationaryfigures"& A& figure style is {\it stationary}\crs + "\stationaryfigure"& PD& define stationary figure\crs + "\stationarypagefigure"&PD& define stationary full-page figure\crs + "\subsection"& PD& synonym for "\section"\crs + "\subsubsection"& PD& synonym for "\section"\crs + "\sy"& SD& set arg in smaller typewriter font\crs + "\sybox"& SD& hboxed "\sy"\crs + "\tabdef"& A& no-op for managing table numbers\crs + "\table"& PD& vboxed table\crs + "\tabref"& A& no-op for managing table numbers\crs + "\tcenter"& PD& centered title\crs + "\title"& PD& title\crs + "\titlepage"& PD& titling page with page number 0\crs + "\tleft"& PD& left-flush title\crs + "\topfigures"& A& figure style is {\it top}\crs + "\topfigure"& PD& define top figure\crs + "\toppagefigure"& PD& define top full-page figure\crs + "\topline"& A& horizontal line for top of table\crs + "\tright"& PD& right-flush title\crs + "\twocolumntext"& PD& two-column text\crs + "\ucsy"& SD& uppercase "\sy"\crs + "\ucsybox"& SD& uppercase "\sybox"\crs + "\unvpar"& A& allow indentation on next paragraph\crs + "\verb"& A& verbatim text\crs + "\vfootnote"& PD& specify footnote text in vertical mode\crs + "\vpar"& A& disallow indentation on next paragraph\crs + "\vtpar"& Par& variably-tagged paragraph\crs + "\ytex"& A& the \ytex\ symbol\cr + \endopentable +\endgroup + + \heading {Parameters} + +The {\bf type} given in this table is one of {\bf I} for +<integer>, {\bf D} for <dimen>, {\bf G} for <glue>, and {\bf +T} for <toks>. + +\medskip + +\begingroup + \def\crs{\cr\noalign{\vskip 0pt plus.2pt}} + \intabskip=.5em + \beginopentable [lcl]% + \bf Parameter& \bf Type& \bf Default\cr + \midline + "\abovecaptionskip"& G& "\medskipamount"\crs + "\abovechapterskip"& G& "18pt", stretch is 3 times the "\parskip"'s\crs + "\abstractfont"& T& "{\smlsize\rm}"\crs + "\abstractindent"& D& "0pt"\crs + "\authorfont"& T& "{\regsize\rm}"\crs + "\baselinefactor"& T& "{1.3}"\crs + "\belowchapterskip"& G& "9pt", stretch is 3 times the "\parskip"'s\crs + "\bottomgloss"& T& <empty>\crs + "\bottomtextfont"& T& "{\smllsize\rm}"\crs + "\botsep"& T& "{\vskip\bigskipamount \footnoterule}"\crs + "\captionindent"& D& "\parindent"\crs + "\captionfont"& T& "{\smlsize\rm}"\crs + "\chapterfont"& T& "{\bigsize\bf}"\crs + "\columnskip"& D& "2pc"\crs + "\copyrightholder"& T& "{by the author}"\crs + "\dhbarheight"& D& "1pt"\crs + "\dvbarwidth"& D& "1pt"\crs + "\figurelinedrop"& D& "4pt"\crs + "\footerdrop"& D& "1.25pc"\crs + "\footnotefont"& T& "{\smlsize\rm}"\crs + "\footnotemarkerwidth"&D& "10pt"\crs + "\hbarheight"& D& "0.4pt"\crs + "\headerdrop"& D& "1.25pc"\crs + "\hour"& I& starting hour of job\crs + "\intabskip"& G& "1em"\crs + "\lispfont"& T& "{\smlsize\tt}"\crs + "\minute"& I& starting minute of job\crs + "\pageno"& I& current page number\crs + "\partagsep"& D& separation between tag and crown line\crs + "\postchapterpenalty"& I& "10000"\crs + "\posttabskip"& G& "0pt plus 1fil"\crs + "\prechapterpenalty"& I& "-500"\crs + "\pretabskip"& G& "0pt plus 1fil"\crs + "\quotefont"& T& "{\smlsize\rm}"\crs + "\rectoleftheader"& T& "{\firstmark}"\crs + "\rectocenterheader"& T& <empty>\crs + "\rectorightheader"& T& "{\bf folio}"\crs + "\rectoleftfooter"& T& <empty>\crs + "\rectocenterfooter"& T& "{\bf folio}"\crs + "\rectorightfooter"& T& <empty>\crs + "\runnerfont"& T& "{\smlsize\rm}"\crs + "\runninghead"& T& <synonym for "\rectoleftheader">\crs + "\tablewidth"& D& "0pt" (settable only)\crs + "\tablestyle"& T& {"\displaystyle"}\crs + "\titlefont"& T& "{\bigsize\bf}"\crs + "\topgloss"& T& <empty>\crs + "\topsep"& T& <empty>\crs + "\typesize"& D& 10pt (settable only)\crs + "\vbarwidth"& D& "0.4pt"\crs + "\versoleftheader"& T& "{\bf folio}"\crs + "\versocenterheader"& T& <empty>\crs + "\versorightheader"& T& <empty>\crs + "\versoleftfooter"& T& <empty>\crs + "\versocenterfooter"& T& "{\bf folio}"\crs + "\versorightfooter"& T& <empty>\cr + \endopentable +\endgroup + + \heading {Switches} + +The {\bf type} given in this table is one of {\bf O} for on/off +and {\bf T} for true/false. + +\medskip + +\begingroup + \def\crs{\cr\noalign{\vskip 0pt plus.2pt}} + \intabskip=.5em + \beginopentable [lcl]% + \bf Switch& \bf Type& \bf Default\cr + \midline + "\centerheadings"& T& false\crs + "\figureline"& T& false\crs + "\footers"& O& off\crs + "\headers"& O& on\crs + "\indent"& O& on\crs + "\runners"& O& on\crs + "\showcopyright"& T& false\crs + "\twosided"& T& false\crs + "\vpar"& T& true\cr + \endopentable +\endgroup + + \bye diff --git a/macros/ytex/yuser.mac b/macros/ytex/yuser.mac new file mode 100644 index 0000000000..960b8aee07 --- /dev/null +++ b/macros/ytex/yuser.mac @@ -0,0 +1,1351 @@ +% Copyright (c) 1985, 1986 Daniel C. Brotsky. All rights reserved. +% User interface for yTeX. See the file YTEX.MAC for details. + +% CONTENTS + +% ^L-page contents +% ---------------------------------------------------------------------- +% 1 %% User interface to YTEX macros +% 2 %% combinators +% 3 %% runners +% 4 %% glosses +% 5 %% paragraphs +% 6 %% textual displays +% 7 %% lisp programs +% 8 %% footnotes +% 9 %% figures +% 10 %% tables +% 11 %% equations +% 12 %% chapters and sections +% 13 %% special pages +% 14 %% 2 columns +% 15 %% indexes +% 16 %% citations +% 17 %% labels +% 18 %% initialization + + \message{combinators,} + +% verbatim word +\def\verb {% <token>#1<token> + \begingroup\tt\specials@ther\activespaces\ \v@rb} +\def\v@rb #1{% + \def\next##1#1{##1\endgroup}\next} + +% spread to the current hsize +\newspread\spread + \setup + \endnew +\let\@@spreadwidth=\spreadwidth \let\spreadwidth=\hsize + +% left-adjusted, center-adjusted, and right-adjusted titles +\newtitle\tleft + \box \vopen + \shape \titleleft{\z@}{\z@}% + \font + \setup + \begin + \end + \endnew +\newtitle\tcenter + \box \vopen + \shape \titlecenter{\z@}{\z@}% + \font + \setup + \begin + \end + \endnew +\newtitle\tright + \box \vopen + \shape \titleright{\z@}{\z@}% + \font + \setup + \begin + \end + \endnew + +% symbols +\newtextwrap\sy + \box \hopen + \setup \smltt + \before + \after + \begin + \end + \endnew +\newtextwrap\sybox + \box \hbox + \setup \smltt + \before + \after + \begin + \end + \endnew +\newtextwrap\ucsy + \box \hopen + \setup \smltt + \before + \after + \begin \uppercase\bgroup + \end \egroup + \endnew +\newtextwrap\ucsybox + \box \hbox + \setup \smltt + \before + \after + \begin \uppercase\bgroup + \end \egroup + \endnew + +\def\ignore #{% + \begingroup + \def\do ##1{\catcode`##1=12\relax}% + \dospecials % turn off all special chars + \catcode`\\=0\relax % need to see commands as single tokens + \catcode`\{=1\catcode`\}=2\relax % need to recognize balanced braces + \catcode`\%=14\relax % need to ignore comments + \let\par=\relax + \ignorereader} +\long +\def\ignorereader #1{% + \endgroup} + + \message{runners,} + +% contents of headers and footers +\newtoks\versoleftheader +\newtoks\versocenterheader +\newtoks\versorightheader +\newtoks\rectoleftheader +\newtoks\rectocenterheader +\newtoks\rectorightheader + +\newtoks\versoleftfooter +\newtoks\versocenterfooter +\newtoks\versorightfooter +\newtoks\rectoleftfooter +\newtoks\rectocenterfooter +\newtoks\rectorightfooter + +\newtoks\runnerfont + +\rectoheader={\the\runnerfont + \line{\hbox to\z@{\the\rectoleftheader\hss}\hfil + \hbox to\z@{\hss\the\rectocenterheader\hss}\hfil + \hbox to\z@{\hss\the\rectorightheader}}} +\versoheader={\the\runnerfont + \line{\hbox to\z@{\the\versoleftheader\hss}\hfil + \hbox to\z@{\hss\the\versocenterheader\hss}\hfil + \hbox to\z@{\hss\the\versorightheader}}} +\rectofooter={\the\runnerfont + \line{\hbox to\z@{\the\rectoleftfooter\hss}\hfil + \hbox to\z@{\hss\the\rectocenterfooter\hss}\hfil + \hbox to\z@{\hss\the\rectorightfooter}}} +\versofooter={\the\runnerfont + \line{\hbox to\z@{\the\versoleftfooter\hss}\hfil + \hbox to\z@{\hss\the\versocenterfooter\hss}\hfil + \hbox to\z@{\hss\the\versorightfooter}}} + +\versoleftheader={\bf\folio} +\rectoleftheader={\firstm@rk} +\rectorightheader={\bf\folio} + +\versocenterfooter={\bf\folio} +\rectocenterfooter={\bf\folio} + +% convenient runner settings: args are toklists +\let\fixedhead=\versorightheader +\let\runninghead=\rectoleftheader + + \message{glosses,} + +% top gloss: copyright +\newif\ifshowcopyright +\newtoks\copyrightholder +\def\copyrightpage {\ifshowcopyright\yestopgloss\fi} +\copyrightholder={by the author} +\topgloss={\regsize\bf + Copyright $\m@th\copyright$ \number\year~\the\copyrightholder\hfil + \shortdate \enspace[\daytime]} + +% drafts +\def\draft {% + \ymessage{{Draft}} + \overfullrule=5\p@ + \bottomgloss={\regsize\bf + DRAFT $\bullet$ DRAFT $\bullet$ DRAFT\hfil + \date \enspace [\daytime]} + \bottomglosstrue} + + \message{paragraphs,} + +% disciplined \rem@veindent +\newif\ifvpar +\def\vpar {% + \ifvpar \edef\next{\the\everypar}\ifx\next\empty \rem@veindent \fi\fi} +\def\unvpar {\everypar={}} + +% various paragraph shapes +\newpar\ivpar + \argtext + \setup + \vestindent \parindent + \starter \noindent + \endnew +\newpar\ipar + \argtext + \setup + \vestindent \parindent + \starter \indent + \endnew +\newdimen\partagsep +\newbox\partagbox +\newpar\ftpar + \argtext #1% + \setup \setbox\partagbox=\hbox{#1}% + \ifdim \wd\partagbox<\parindent + \setbox\partagbox=\hbox to\parindent{\unhbox\partagbox \hfil}% + \else + \setbox\partagbox=\hbox{\unhbox\partagbox \hskip\partagsep}\fi + \vestindent \parindent + \starter \noindent \box\partagbox \ignorespaces + \endnew +\newpar\atpar + \argtext #1% + \setup + \vestindent \parindent + \starter \noindent \hbox to\parindent {\hss #1\hskip\partagsep}\ignorespaces + \endnew +\newpar\vtpar + \argtext #1% + \setup \setbox\partagbox=\hbox{#1\hskip\partagsep}% + \vestindent 1\wd\partagbox + \starter \noindent \box\partagbox \ignorespaces + \endnew + +% bullet paragraphs and lists thereof +\newpar\bpar + \argtext + \setup + \vestindent \parindent + \starter \noindent \hbox to\parindent {$\m@th\bullet$\hfil}\ignorespaces + \endnew + +\newelement\bullets + \setup \unvpar + \above \minbreak \prebulletspenalty \abovebulletsskip + \below \dobreak \postbulletspenalty \belowbulletsskip \vpar + \begin + \end \endgraf + \endnew +\setskip\abovebulletsskip \dimen 2pt \glue \parskip \factor 500 +\setskip\belowbulletsskip \dimen 2pt \glue \parskip \factor 500 +\prebulletspenalty=-200 +\postbulletspenalty=-200 + +% quotes +\newtoks\quotefont +\newelement\quote + \setup \advance\leftskip\parindent \advance\rightskip\parindent + \unvpar \the\quotefont \offindent + \above \vskip\baselineskip \nobreak % compensate for smaller baseline + \begingroup \the\quotefont \vskip-\baselineskip \endgroup + \below \vpar + \begin + \end \endgraf + \endnew + +% ragged center (mostly from the TeXbook) +\def\raggedcenter {% + \leftskip=\z@ plus2em \rightskip=\leftskip + \spaceskip=.3333em \xspaceskip=.5em \parfillskip=\z@ + \pretolerance=9999 \tolerance=9999 \hbadness=9999 + \hyphenpenalty=9999 \exhyphenpenalty=9999 + \offindent} + +% ragged left +\def\raggedleft {% + \leftskip=\z@ plus2em \rightskip=\z@skip + \spaceskip=.3333em \xspaceskip=.5em \parfillskip=\z@ + \pretolerance=9999 \tolerance=9999 \hbadness=9999 + \hyphenpenalty=9999 \exhyphenpenalty=9999 + \offindent} + + \message{textual displays,} + +% nofill +\newelement\nofill + \setup \offindent \setupnofill + \above \vskip\parskip % compensate for loss of \parskip + \below \vpar + \begin + \end \endgraf + \endnew + +\newtext\text + \display + \setup \hsize=\displaywidth \advance\leftskip\displayindent \setupnofill + \begin + \end + \endnew +\newtext\textlines + \display \displaywidth=\hsize \displayindent=\z@ + \setup \setupnofill + \begin + \end + \endnew +\newtext\code + \display + \setup \hsize=\displaywidth \advance\leftskip\displayindent \tt \setupnofill + \begin + \end + \endnew +\newtext\codelines + \display \displaywidth=\hsize \displayindent=\z@ + \setup \tt \setupnofill + \begin + \end + \endnew + +% verbatim material +\def\beginverbatim {% + \par + \beginpgroup + \vskip\parskip + \setupverbatim + \re@dverbatim} +{\obeylines \catcode`\|=\@scape \catcode`\\=\@ther % + |gdef|re@dverbatim#1^^M#2\endverbatim{#1#2|endgroup}} + +\newverbatim\verb + \begincs \beginverb + \readcs \readv@rb + \endcsname endverb% + \display + \setup \hsize=\displaywidth \advance\leftskip\displayindent \tt + \begin + \end + \endnew +\newverbatim\verblines + \begincs \beginverblines + \readcs \readv@rblines + \endcsname endverblines% + \display \displaywidth=\hsize \displayindent=\z@ + \setup \tt + \begin + \end + \endnew + + \message{lisp programs,} + +% make semis active a la \obeylines +{\catcode`\;=\@ctive + \gdef\obeysemis {\catcode`\;=\@ctive\relax \let;=\lispsemi}} + +% \beginl@sp <body> \endl@sp +\def\beginl@sp {% + \beginpgroup + % semis start comments unless immediately followed by \pbrk + \def\lispsemi{\futurelet\next\l@spsemi}% + \def\l@spsemi{\ifx\next\pbrk \let\next=\relax + \else \let\next=\l@spcomment\fi + \next}% + \obeysemis + % spaces made active so they start paragraphs + % and so multiple spaces aren't collapsed to one. + \activespaces\ % + % nofill via every line a par, if spaces start next line + % we do a \noindent to make sure a par gets started. + % in addition, turn off interline skip and use struts + % to insure baseline spacing + \offinterlineskip + \parskip=\z@skip + \def\par{\ifhmode \nobreak\strut \fi \endgraf} + \obeylines + % compensate for loss of baseline spacing + \skip@=\dp\strutbox \advance\skip@ -\prevdepth + \ifdim \skip@>\z@ \vskip\skip@ \nobreak \fi + % make ',` do the right thing; make &, #, <> harmless + \makebqspecial + \makeandother + \makesharpother + \makelgtother + \vbox\bgroup} + +\def\endl@sp {% + \egroup + \endpgroup} + +{\obeylines % for defs that happen where ^^M is active +% each program is a box, preventing page splits, but we +% make the \pbrk macro work a la \noalign whose arg is +% the entire rest of the line. +\gdef\pbrk #1^^M{% + \egroup% + \def\next{#1}% + \ifx\empty\next% + \smallskip + \else \begingroup \activespaces\space \next\endgroup\fi% + \vbox\bgroup% + ^^M} % end with a CR since arg did +% semicolons start program comments which end with the end +% of the line. These comments are in roman, in an \hbox to +% avoid line breaking, <> become angle brackets, +% and ; becomes harmless +\gdef\l@spcomment {% + \begingroup% + \def\lispsemi{;\kern\p@}\obeysemis % this works even if ; already read + \def^^M{\egroup\endgroup^^M}% end with ^^M since line does + \leavevmode\hbox\bgroup \rm \strut;\kern\p@}% +} % end of def group + +\newtoks\lispfont +\newtext\lisp + \display + \setup \hsize=\displaywidth \advance\leftskip\displayindent + \the\lispfont + \begin \beginl@sp + \end \endl@sp + \endnew +\newtext\lisplines + \display \displaywidth=\hsize \displayindent=\z@ + \setup \the\lispfont + \begin \beginl@sp + \end \endl@sp + \endnew + + \message{footnotes,} + +\let\footdef=\relax +\let\footref=\relax + +\newfloat\footn@te + \type \botfloat + \floatsetup \setupfootnotefloat + \setup \setupfootnote + \floatabove + \floatbelow + \begin \startfootnote + \end \strut\endgraf + \endnew + +\def\setupfootnotefloat {% + \splittopskip=\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth=\dp\strutbox + \floatingpenalty=\@M + \setupfootnotefloathook} +\def\setupfootnotefloathook {} + +\newtoks\footnotefont +\def\setupfootnote {% + \interlinepenalty=\interfootnotelinepenalty + \leftskip=\footnotemarkerwidth + \parfillskip=\filskip + \rightskip=\z@skip + \spaceskip=\z@skip + \xspaceskip=\z@skip + \the\footnotefont + \setupfootnotehook} +\def\setupfootnotehook {} + +% footnote markers +\newdimen\footnotemarkerwidth +\def\footstrut {\vbox to\splittopskip{}} +\def\startfootnote #1{% + \noindent \llap{#1}\footstrut} + +% hmode footnote invocation +\def\footnote #1{\let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi + #1\@sf\beginfootn@te{#1}\futurelet\next\fo@t} +\def\@foot {\endfootn@te} + +% numbered hmode footnote +\def\nfootnote #1{\footnote{$\m@th^{#1}$}} + +% vmode footnote invocation +\def\vfootnote #1{\beginfootn@te{#1}\futurelet\next\fo@t} + +% general footnote invocation +\newfloat\footmatter + \type \botfloat + \floatsetup \setupfootnotefloat \leftskip=\z@skip + \setup \setupfootnote + \floatabove + \floatbelow + \begin \noindent \footstrut + \end \strut\endgraf + \endnew + + \message{figures,} + +\let\figdef=\relax +\let\figref=\relax + +% lines above and below figures +\newif\iffigureline +\newdimen\figurelinedrop +\def\figl@nabove {% + \iffigureline \hrule \vskip\figurelinedrop\relax \fi} +\def\figl@nbelow {% + \iffigureline \nobreak \vskip\figurelinedrop \hrule\relax \fi} + +% figure environment definitions +\newdimen\captionindent +\newtoks\captionfont +\def\setupcaption {% + \leftskip=\captionindent + \rightskip=\captionindent + \the\captionfont + \parskip=\z@skip + \everypar={}% + \vpar + \setupcaptionhook} +\def\setupcaptionhook {} + +\newelement\c@ption + \setup \setupcaption + \above \dobreak \prec@ptionpenalty \abovec@ptionskip + \below \dobreak \postc@ptionpenalty \belowc@ptionskip + \begin + \end \ifhmode \vrule width\z@ height\z@ depth\dp\strutbox \fi \endgraf + \endnew +\let\abovecaptionskip=\abovec@ptionskip +\let\belowcaptionskip=\belowc@ptionskip +\let\precaptionpenalty=\prec@ptionpenalty +\let\postcaptionpenalty=\postc@ptionpenalty + +\def\setupfigure {% + \let\begincaption=\beginc@ption + \let\endcaption=\endc@ption + \let\caption=\c@ption + \leftskip=\z@skip + \rightskip=\z@skip + \spaceskip=\z@skip + \xspaceskip=\z@skip + \parfillskip=\filskip + \everypar={}% + \setupfigurehook} +\def\setupfigurehook {} + +% figure type indicators +\newif\ifstationaryfigur@ +\newif\ifsectionfigur@ +\newif\iftopfigur@ +\newif\iffloatingfigur@ + +% stationary figures +\newelement\stationaryfigure + \setup \stationaryfigur@true \setupfigure + \above \minbreak \prestationaryfigurepenalty \abovestationaryfigureskip + \nointerlineskip + \below \dobreak \poststationaryfigurepenalty \belowstationaryfigureskip + \nointerlineskip + \begin \vbox\bgroup \figl@nabove + \end \figl@nbelow \egroup + \endnew +\abovestationaryfigureskip=\bigskipamount +\belowstationaryfigureskip=\bigskipamount +\prestationaryfigurepenalty=\z@ +\poststationaryfigurepenalty=-200 +\newpage\pagestationaryfigure + \setup \stationaryfigur@true \setupfigure + \glue + \begin \vbox to\vsize\bgroup \figl@nabove + \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup + \endnew +\def\stationaryfigures {% + \let\figure=\stationaryfigure + \let\pagefigure=\stationarypagefigure + \let\beginfigure=\beginstationaryfigure + \let\endfigure=\endstationaryfigure + \let\beginpagefigure=\beginstationarypagefigure + \let\endpagefigure=\endstationarypagefigure + \let\abovefigureskip=\abovestationaryfigureskip + \let\belowfigureskip=\belowstationaryfigureskip + \let\prefigurepenalty=\prestationaryfigurepenalty + \let\postfigurepenalty=\poststationaryfigurepenalty} + +% section figures +\newelement\sectionfigure + \setup \sectionfigur@true \setupfigure + \above \dobreak \presectionfigurepenalty \abovesectionfigureskip + \nointerlineskip + \below \dobreak \postsectionfigurepenalty \belowsectionfigureskip + \nointerlineskip + \begin \vbox\bgroup \figl@nabove + \end \figl@nbelow \egroup + \endnew +\abovesectionfigureskip=\z@skip +\belowsectionfigureskip=\fillskip +\presectionfigurepenalty=\@M +\postsectionfigurepenalty=-200 +\newpage\sectionpagefigure + \setup \sectionfigur@true \setupfigure + \glue + \begin \vbox to\vsize\bgroup \figl@nabove + \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup + \endnew +\def\sectionfigures {% + \let\figure=\sectionfigure + \let\pagefigure=\sectionpagefigure + \let\beginfigure=\beginsectionfigure + \let\endfigure=\endsectionfigure + \let\beginpagefigure=\beginsectionpagefigure + \let\endpagefigure=\endsectionpagefigure + \let\abovefigureskip=\abovesectionfigureskip + \let\belowfigureskip=\belowsectionfigureskip + \let\prefigurepenalty=\presectionfigurepenalty + \let\postfigurepenalty=\postsectionfigurepenalty} + +% floating top figures +\newskip\abovetopfigureskip \abovetopfigureskip=\z@skip +\newskip\belowtopfigureskip \belowtopfigureskip=\bigskipamount +\newcount\pretopfigurepenalty \pretopfigurepenalty=100 +\newcount\posttopfigurepenalty \posttopfigurepenalty=\z@ +\newfloat\topfigure + \type \topfloat + \floatsetup \floatingpenalty\posttopfigurepenalty + \splitmaxdepth\maxdimen \splittopskip\z@skip + \setup \topfigur@true \setupfigure + \floatabove \penalty\pretopfigurepenalty \vskip\abovetopfigureskip + \nointerlineskip + \floatbelow \nobreak \vskip\belowtopfigureskip + \begin \vbox\bgroup \figl@nabove + \end \figl@nbelow \egroup + \endnew +\newpagefloat\toppagefigure + \type \topfloat + \floatsetup \penalty\pretopfigurepenalty + \floatingpenalty\posttopfigurepenalty + \splitmaxdepth\maxdimen \splittopskip\z@skip + \setup \topfigur@true \setupfigure + \above + \below + \begin \vbox to\vsize\bgroup \figl@nabove + \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup + \endnew +\gdef\topfigures {% + \let\figure=\topfigure + \let\pagefigure=\toppagefigure + \let\beginfigure=\begintopfigure + \let\endfigure=\endtopfigure + \let\beginpagefigure=\begintoppagefigure + \let\endpagefigure=\endtoppagefigure + \let\abovefigureskip=\abovetopfigureskip + \let\belowfigureskip=\belowtopfigureskip + \let\prefigurepenalty=\pretopfigurepenalty + \let\postfigurepenalty=\posttopfigurepenalty} + +% inline/floating figures +\newskip\floatabovefloatingfigureskip +\newskip\floatbelowfloatingfigureskip +\newcount\floatprefloatingfigurepenalty +\newcount\floatpostfloatingfigurepenalty +\floatabovefloatingfigureskip=\z@skip +\floatbelowfloatingfigureskip=\bigskipamount +\floatprefloatingfigurepenalty=100 +\floatpostfloatingfigurepenalty=\z@ +\newskip\abovefloatingfigureskip \abovefloatingfigureskip=\bigskipamount +\newskip\belowfloatingfigureskip \belowfloatingfigureskip=\bigskipamount +\newcount\prefloatingfigurepenalty \prefloatingfigurepenalty=\z@ +\newcount\postfloatingfigurepenalty \postfloatingfigurepenalty=-200 +\newfitfloat\floatingfigure + \type \topfloat + \floatsetup \floatingpenalty\floatpostfloatingfigurepenalty + \splitmaxdepth\maxdimen \splittopskip\z@skip + \setup \floatingfigur@true \setupfigure + \floatabove \penalty\floatprefloatingfigurepenalty + \vskip\floatabovefloatingfigureskip + \nointerlineskip + \floatbelow \nobreak \vskip\floatbelowfloatingfigureskip + \above \penalty\prefloatingfigurepenalty + \vskip\abovefloatingfigureskip + \nointerlineskip + \below \penalty\postfloatingfigurepenalty + \vskip\belowfloatingfigureskip + \nointerlineskip \vpar + \begin \vbox\bgroup \figl@nabove + \end \figl@nbelow \egroup + \endnew +\newpagefloat\floatingpagefigure + \type \topfloat + \floatsetup \penalty\floatprefloatingfigurepenalty + \floatingpenalty\floatpostfloatingfigurepenalty + \splitmaxdepth\maxdimen \splittopskip\z@skip + \setup \floatingfigur@true \setupfigure + \above + \below + \begin \vbox to\vsize\bgroup \figl@nabove + \end \figl@nbelow \vskip \z@ plus\@M\p@ \egroup + \endnew +\gdef\floatingfigures {% + \let\figure=\floatingfigure + \let\pagefigure=\floatingpagefigure + \let\beginfigure=\beginfloatingfigure + \let\endfigure=\endfloatingfigure + \let\beginpagefigure=\beginfloatingpagefigure + \let\endpagefigure=\endfloatingpagefigure + \let\abovefigureskip=\abovefloatingfigureskip + \let\belowfigureskip=\belowfloatingfigureskip + \let\prefigurepenalty=\prefloatingfigurepenalty + \let\postfigurepenalty=\postfloatingfigurepenalty} + + \message{tables,} + +\let\tabdef=\relax +\let\tabref=\relax + +\newtable\table + \leftdelim [% + \rightdelim ]% + \before \vbox\bgroup + \after \egroup + \begin + \end + \endnew +\newtable\toptable + \leftdelim [% + \rightdelim ]% + \before \vtop\bgroup + \after \egroup + \begin + \end + \endnew +\newtable\centertable + \leftdelim [% + \rightdelim ]% + \before \vcenter\bgroup + \after \egroup + \begin + \end + \endnew +\newtable\opentable + \leftdelim [% + \rightdelim ]% + \before + \after + \begin + \end + \endnew +\newtable\displaytable + \leftdelim [% + \rightdelim ]% + \before \tablewidth=\hsize$$ + \after $$ + \begin + \end + \endnew + + \message{equations,} + +% equation numbering +\let\eqdef=\relax +\let\eqref=\relax + +% synonyms for $$ +\def\beginmath {$$} +\def\endmath {$$} +\def\math #1{$$#1$$} + + \message{chapters and sections,} + +\let\secref=\relax +\let\secdef=\relax + +% are section, etc. headings centered or left-flush +\newif\ifcenterheadings + +% chapters +\newtoks\chapterfont +\newtitle\chaptertitle + \box \vopen + \shape \ifcenterheadings \titlecenter{\z@}{\z@}\else + \titleleft{\z@}{\z@}\fi + \font \the\chapterfont + \setup \interlinepenalty=\@M + \begin + \end + \endnew + +\def\chaptersetup {% + \chaptersetuphook} +\def\chaptersetuphook {} + +\newelement\chapter + \setup \get@rg\endchapter \chaptersetup + \above \minbreak \prechapterpenalty \abovechapterskip + \below \dobreak \postchapterpenalty \belowchapterskip \vpar + \begin \get@rg + \end \ymessage{{Chapter: \the\toks@}}\chaptertitle{\the\toks@}% + \endnew +\setskip\abovechapterskip \dimen 36pt \glue \parskip \factor 3000 +\setskip\belowchapterskip \dimen 18pt \glue \parskip \factor 2000 +\prechapterpenalty=-500 +\postchapterpenalty=10000 + +\newelement\pchapter + \setup \get@rg\endpchapter \chaptersetup + \above \rectosupereject + \below \dobreak \postchapterpenalty \belowchapterskip \vpar + \begin \get@rg + \end \ymessage{{Chapter: \the\toks@}}\chaptertitle{\the\toks@}% + \endnew + +% starts sections. +\newtoks\sectionfont +\newtitle\sectiontitle + \box \vbottom + \shape \ifcenterheadings \titlecenter{\z@}{\z@}\else + \titleleft{\z@}{\z@}\fi + \font \the\sectionfont + \setup + \begin + \end + \endnew + +\def\sectionsetup {% + \sectionsetuphook} +\def\sectionsetuphook {} + +\newelement\section + \setup \get@rg\endsection \sectionsetup + \above \minbreak \presectionpenalty \abovesectionskip + \below \dobreak \postsectionpenalty \belowsectionskip \vpar + \begin \get@rg + \end \ymessage{{Section: \the\toks@}}\sectiontitle{\the\toks@}% + \endnew +\setskip\abovesectionskip \dimen 18pt \glue \parskip \factor 3000 +\setskip\belowsectionskip \dimen 9pt \glue \parskip \factor 2000 +\presectionpenalty=-200 +\postsectionpenalty=10000 + +\let\beginsubsection=\beginsection +\let\endsubsection=\endsection +\let\subsection=\section + +\let\beginsubsubsection=\beginsubsection +\let\endsubsubsection=\endsubsection +\let\subsubsection=\subsection + +% simple heading +\newtoks\headingfont +\newtitle\headingtitle + \box \vbottom + \shape \ifcenterheadings \titlecenter{\z@}{\z@}\else + \titleleft{\z@}{\z@}\fi + \font \the\headingfont + \setup + \begin + \end + \endnew + +\def\headingsetup {% + \headingsetuphook} +\def\headingsetuphook {} + +\newelement\heading + \setup \get@rg\endheading \headingsetup + \above \minbreak \preheadingpenalty \aboveheadingskip + \below \dobreak \postheadingpenalty \belowheadingskip \vpar + \begin \get@rg + \end \ymessage{{Heading: \the\toks@}}\headingtitle{\the\toks@}% + \endnew +\setskip\aboveheadingskip \dimen 9pt \glue \parskip \factor 1000 +\setskip\belowheadingskip \dimen 4pt \glue \parskip \factor 1000 +\preheadingpenalty=-200 +\postheadingpenalty=10000 + + \message{special pages,} + +% titling pages +\newsuperpage\titlingpage + \setup \norunners \copyrightpage + \glue \vfil + \begin + \end + \endnew + +% main title pages +\newelement\titlepage + \setup \titlepagedefs + \above + \below + \begin \begintitlingpage \global\pageno=\z@ \ymessage{{Main title}} + \end \endgraf \endtitlingpage \global\pageno=\@ne + \endnew + +% title pages for sub-parts of a book, etc. +\newelement\partpage + \setup \titlepagedefs + \above + \below + \begin \begintitlingpage \ymessage{{Part title}} + \end \endgraf \endtitlingpage + \endnew + +% titles and abstracts +\newtoks\titlefont +\newtoks\authorfont +\newtitle\title + \box \vbottom + \shape \titleleft{\z@}{\z@}% + \font \the\titlefont + \setup + \begin + \end + \endnew +\newtitle\ctitle + \box \vbottom + \shape \titlecenter{\z@}{\z@}% + \font \the\titlefont + \setup + \begin + \end + \endnew +\newtitle\author + \box \vbottom + \shape \titleleft{\z@}{\z@}% + \font \the\authorfont + \setup + \begin + \end + \endnew +\newtitle\cauthor + \box \vbottom + \shape \titlecenter{\z@}{\z@}% + \font \the\authorfont + \setup + \begin + \end + \endnew + +\newtoks\abstractfont +\newdimen\abstractindent +\newelement\abstract + \setup \the\abstractfont \parindent=2em% + \leftskip=\abstractindent \rightskip=\abstractindent + \above \minbreak \preabstractpenalty \aboveabstractskip + \below \dobreak \postabstractpenalty \belowabstractskip + \begin + \end \endgraf + \endnew + +\newtoks\bottomtextfont +\def\titlepagedefs {% + \newelement\bottomtext + \setup \the\bottomtextfont \offindent + \above \bigskip \vfill + \below + \begin + \end \endgraf + \endnew} + + \message{2 columns,} + +% N.B. this stuff mostly adapted from the TeXbook + +% parameters +\newdimen\columnskip + +\newbox\partialp@ge +\newdimen\onec@lhsize +\newdimen\onec@lvsize +\newtoks\onec@loutput +\newdimen\twoc@lvsize + +\def\setuptwocolumn {% + \trimpagesfalse + \onec@lfigfoot + \def\columneject{\vfil\penalty200}% + \baselinefactor={1.2}\setnormalbaselines + \spaceskip=.3333em plus .3333em minus .1666em + \xspaceskip=.3333em plus .6666em minus .0833em + \advance\parskip by 0pt plus 2pt + \setuptwocolumnhook} +\def\setuptwocolumnhook {} + +% make figures and footnotes be one column +\def\onec@lfigfoot {% + \topmag=2000% + \botmag=2000% + \addtodef\setupfigurehook{% + \iffloatingfigur@ + \errhelp={I will assume it doesn't float.}% + \errmessage{You can't use a floating figure in two-column text.}% + \fi + \iftopfigur@ \hsize=\onec@lhsize \fi + \vsize=\onec@lvsize}% + \addtodef\setupfootnotehook{\hsize=\onec@lhsize}} + +\def\begintwocolumntext {% + \begingroup + \onec@lhsize=\hsize + \onec@lvsize=\vsize + \onec@loutput=\output + \output={\global\setbox\partialp@ge=\vbox{\unvbox\@cclv}}% + \let\dosupereject=\twoc@lsupereject + \eject + \output={\twoc@lout}% + \hsize=.5\hsize \advance\hsize by-.5\columnskip + \vsize=2\vsize \advance\vsize by2pc\relax + \twoc@lvsize=\vsize + \advance\vsize by-2\ht\partialp@ge + \setuptwocolumn} + +\def\endtwocolumntext {% + \output={\balancec@ls}% + \eject + \global\output=\onec@loutput + \global\vsize=\onec@lvsize + \endgroup + \pagegoal=\vsize} + +\def\twocolumntext #1{\begintwocolumntext #1\endtwocolumntext} + +\def\twoc@lout {% + \dimen@=\onec@lvsize \advance\dimen@ by-\ht\partialp@ge + \advance\dimen@ by-\ht\topfloat \advance\dimen@ by-\dp\topfloat + \advance\dimen@ by-\ht\botfloat \advance\dimen@ by-\dp\botfloat + \ifdim \dimen@>\baselineskip + \dimen@i=\ht\@cclv \advance\dimen@i\dp\@cclv + \ifdim \dimen@i>\z@ + \splittopskip=\topskip \splitmaxdepth=\maxdimen + \setbox\z@=\vsplit\@cclv to\dimen@ + \setbox\@ne=\vsplit\@cclv to\dimen@ + \else + \setbox\z@=\box\voidb@x + \setbox\@ne=\box\voidb@x + \fi + \else + \setbox\z@=\box\voidb@x + \setbox\@ne=\box\voidb@x + \fi + \def\line{\hbox to\onec@lhsize}% + \let\pagebody=\twoc@lpagebody + \ytexoutput + \global\vsize=\twoc@lvsize + \unvbox\@cclv + \penalty\outputpenalty} + +\def\twoc@lsupereject {% + \ifnum\insertpenalties>\z@ % something is being held over + \hbox{}\kern-\topskip\nobreak\vskip 0pt plus.5\vsize\penalty-200% + \hbox{}\kern-\topskip\nobreak\vskip 0pt plus.5\vsize\supereject\fi} + +\def\twoc@lpagebody {% + \vbox{\twoc@lpagecontents}} + +\def\twoc@lpagecontents {% + \dimen@i=\ht\partialp@ge \advance\dimen@i\ht\z@ + \ifvoid\topfloat\else + \dimen@=\ht\topfloat \advance\dimen@\dp\topfloat + \unvbox\topfloat + \ifdim \dimen@>\z@ \ifdim\dimen@i>\z@ \the\topsep\fi\fi + \fi + \unvbox\partialp@ge + \wd\z@=\hsize \wd\@ne=\hsize + \hbox to\onec@lhsize{\box\z@\hfil\box\@ne} + \ifvoid\botfloat\else + \dimen@=\ht\botfloat \advance\dimen@\dp\botfloat + \ifdim \dimen@>\z@ \ifdim\dimen@i>\z@ \the\botsep\fi\fi + \unvbox\botfloat + \fi} + +\def\balancec@ls {% + \setbox\z@=\vbox{\unvbox\@cclv}% + \dimen@=\ht\z@ \advance\dimen@ by\topskip \advance\dimen@ by-\baselineskip + \divide\dimen@ by2 \splittopskip=\topskip \splitmaxdepth=\maxdimen + {\vbadness=10000 + \loop \global\setbox\tw@=\copy\z@ \global\setbox\@ne=\vsplit\tw@ to\dimen@ + \ifdim\ht\tw@>\dimen@ \global\advance\dimen@ by\p@ \repeat} + \setbox\z@=\vbox to\dimen@{\unvbox\@ne}% + \setbox\@ne=\vbox to\dimen@{\unvbox\tw@}% + \global\output={\balancing@rror} + \unvbox\partialp@ge + \wd\z@=\hsize \wd\@ne=\hsize + \hbox to\onec@lhsize{\box\z@\hfil\box\@ne}} + +\def\balancing@rror {% + \errhelp={Please change the page into one that works.}% + \errmessage{Page can't be balanced.}% + \def\line{\hbox to\onec@lhsize}% + \def\pagebody{\vbox{\unvbox\@cclv}}% + \ytexoutput} + +% complete double columns +\newif\iffirstc@l +\newbox\firstc@l +\newbox\secondc@l + +\def\setupdoublecolumn {% + \trimpagesfalse + \def\pageeject{% + \filpage\iffirstc@l \else \line{}\filpage \fi}% + \baselinefactor={1.2}\setnormalbaselines + \spaceskip=.3333em plus .3333em minus .1666em + \xspaceskip=.3333em plus .6666em minus .0833em + \advance\parskip by 0pt plus 2pt + \setupdoublecolumnhook} +\def\setupdoublecolumnhook {} + +\def\begindoublecolumn {% + \begingroup + \onec@lhsize=\hsize + \output={\box\@cclv=\voidb@x}% + \eject + \output={\doublec@lout}% + \global\firstc@ltrue + \hsize=.5\hsize \advance\hsize by-.5\columnskip + \setupdoublecolumn} + +\def\enddoublecolumn {% + \pageeject + \endgroup + \pagegoal=\vsize} + +\def\doublecolumn #1{\begindoublecolumn #1\enddoublecolumn} + +\def\doublec@lout {% + \iffirstc@l + \def\line{\hbox to\onec@lhsize}% + \global\setbox\firstc@l=\pagebody + \def\next{\global\firstc@lfalse} + \else + \def\line{\hbox to\onec@lhsize}% + \global\setbox\secondc@l=\pagebody + \wd\firstc@l=\hsize + \wd\secondc@l=\hsize + \def\pagecontents{\vbox{\line{\box\firstc@l\hfil\box\secondc@l}}}% + \def\next{\ytexoutput\global\firstc@ltrue}% + \fi + \next} + + \message{indexes,} + +\gdef\beginindex {% + \beginpgroup + \def\entry##1{% + \hangindent=2\parindent + \hangafter=\@ne + \noindent ##1\par} + \def\subentry##1{% + \hangindent=2\parindent + \hangafter=\@ne + \indent ##1\par} + \raggedright + \exhyphenpenalty=\@M + \tolerance=\@M + \interlinepenalty=\@M + \begintwocolumntext} + +\gdef\endindex {% + \endtwocolumntext + \endpgroup} + + \message {citations,} + +\def\writec@te {\write\m@ne} + +\def\setciteaux #1{% + \stripn@me{}#1% + \edef\writec@te{\expandafter\noexpand\csname write\next \endcsname}} + +\def\c@te #1{% + \expandafter\ifx \csname @cd-#1\endcsname \relax + \expandafter\let\csname @cd-#1\endcsname=\cite% + \writec@te{\string\citation{#1}}% + \fi + \expandafter\ifx \csname @cr-#1\endcsname \relax + \expandafter\def\csname @cr-#1\endcsname{??}% + \ywarning{{Citation #1 undefined}}% + \fi} + +\def\cite #1{% + \c@te{#1}% + \csname @cr-#1\endcsname} + +\def\explicitcite #1#2{% + \c@te{#1}% + #2} +\let\ecite=\explicitcite + +\def\citation #1{\relax} + +\def\bibcite #1#2{% + \expandafter\def\csname @cr-#1\endcsname{#2}} + +\def\setbibstyle #1{% + \toks@={#1}% + \immediate\writec@te{\string\bibstyle{\the\toks@}}} + +\def\bibstyle #1{\relax} + +\newcount\bibcount +\newskip\bibparskip +\newtoks\biblabelfont +\newtoks\bibsetup +\newif\ifbibopenform + +\def\setupbibliography #1{ + \bibcount=\z@ + \setbox\z@=\hbox{\the\biblabelfont [#1]\enspace}\parindent=\wd\z@ + \ifbibopenform \let\newblock=\linebreak \else \let\newblock=\relax \fi + \setupbibliographyhook}% + +\def\setupbibliographyhook {} + +\def\bibpar #1{\ftpar{\the\biblabelfont [#1]}} + +\def\bibitem {\futurelet\next\bib@tem} +\def\bib@tem {% + \if[\noexpand\next + \let\next=\bibit@m + \else + \let\next\b@bitem + \fi + \next} +\def\bibit@m [#1]#2{% + \toks@={#1}% + \immediate\writec@te{\string\bibcite{#2}{\the\toks@}}% + \bibpar{#1}} +\def\b@bitem #1{% + \advance\bibcount\@ne + \edef\next{\number\bibcount} + \immediate\writec@te{\string\bibcite{#1}{\next}}% + \bibpar{\number\bibcount}} + +\def\bibliography #1{% + \toks@={#1}% + \immediate\writec@te{\string\bibdata{\the\toks@}}% + \begingroup % for latex-like defs + \def\begin##1##2{\begingroup \setupbibliography{##2}}% + \def\end##1{\par\endgroup}% + \@input{\jobname.bbl}{\ywarning{{No file \jobname.bbl}}}% + \endgroup} + +\def\explicitbibliography #1#2{% + \toks@={#1}% + \writec@te{\string\bibdata{\the\toks@}} + \@input{#2.bbl}{\ywarning{{No file #2.bbl}}}} +\let\ebibligraphy=\explicitbibliography + +\def\bibdata #1{\relax} + + \message {labels,} + +\def\writel@bel {\write\m@ne} + +\def\setlabelaux #1{% + \stripn@me{}#1% + \edef\writel@bel{\expandafter\noexpand\csname write\next \endcsname}} + +\def\reference #1{% + \expandafter\ifx \csname @lr-#1\endcsname \relax + \expandafter\def\csname @lr-#1\endcsname{??}% + \ywarning{{Reference #1 undefined}}% + \else + \csname @lr-#1\endcsname + \fi} + +\def\pagereference #1{% + \expandafter\ifx \csname @lrp-#1\endcsname \relax + \expandafter\def\csname @lrp-#1\endcsname{??}% + \ywarning{{Page reference #1 undefined}}% + \else + \csname @lrp-#1\endcsname + \fi} + +\def\label #1#2{% + \edef\next{#2}% + \expandafter\ifx \csname @lr-#1\endcsname \relax + \ywarning{{Label #1 defined as \next}}% + \fi + \expandafter\let\csname @lr-#1\endcsname=\next + \writel@bel{\string\deflabel{#1}{\csname @lr-#1\endcsname}{\the\pageno}}} + +\def\deflabel #1#2#3{% + \expandafter\def\csname @lr-#1\endcsname{#2}% + \expandafter\def\csname @lrp-#1\endcsname{#3}} + + \message{initialization,} + +% output routine +\output={\fixsiz@ \ytexoutput} + +% page layout +\hsize=28pc \vsize=44pc +\onheaders +\offfooters +\twosidedfalse +\showcopyrightfalse +\columnskip=2pc + +% displays +\abovedisplayskip=3pt plus1pt minus2pt +\belowdisplayskip=3pt plus1pt minus2pt +\abovedisplayshortskip=0pt plus1pt +\belowdisplayshortskip=2pt plus1pt minus1pt + +% footnotes +\footnotemarkerwidth=10pt +\botsep={\vskip\bigskipamount \footnoterule} + +% figures +\figurelinefalse +\figurelinedrop=4pt +\topsep={} +\floatingfigures +\abovecaptionskip=\medskipamount +\captionindent=2em + +% tables +\tablewidth=0pt +\intabskip=\emskip +\pretabskip=\filskip +\posttabskip=\filskip + +% miscellany +\abstractindent=0pt +\centerheadingsfalse + +% citations and labels +\newaux\aux + \filename \perjob + \extension aux% + \endnew +\setciteaux\aux +\setlabelaux\aux +\bibsetup={} +\biblabelfont={} +\bibopenformfalse + +% fonts +\runnerfont={\smlsize\rm} +\footnotefont={\smlsize\rm} +\captionfont={\smlsize\rm} +\quotefont={\smlsize\rm} +\titlefont={\bigsize\bf} +\authorfont={\regsize\rm} +\abstractfont={\smlsize\rm} +\bottomtextfont={\smllsize\rm} +\chapterfont={\bigsize\bf} +\sectionfont={\regsize\bf} +\headingfont={\regsize\bf} +\lispfont={\regsize\tt} + +% running text +\vpartrue +\overfullrule=0pt +\parindent=2em +\partagsep=.5em +\parskip=1pt plus2pt minus1pt +\normallineskip=2pt +\normallineskiplimit=0pt +\def\singlespace {\baselinefactor={1.3}\setnormalbaselines} +\def\doublespace {\baselinefactor={2.6}\setnormalbaselines} +\singlespace +\clubpenalty=900 +\widowpenalty=900 + -- cgit v1.2.3