% TexConversion.tex of February 27, 1984 11:59:56 pm PST --- Stolfi % Differences between my TEX80 and TeX82 macros % Uses counters 1 thru 6 % Things to fix: % (?) change internal absolute \*skips to ex and em instead of pt % provide for centered figure captions (optional)? % Fix \twoline! % Modify \pcomm to use small and \hbox par % Add automatic indentation to \prog % Put penalty around \figspaces (but not \capfigs?), like math displays % CHARACTER CODES % Begin \chcode'032_5 % Control-Z as end-of-line (for Bravo) [no more] \chcode'176_2 % Tilde as end-of-group (for SAIL) [no more] \chcode'026_4 % Control-TAB (via TEX.TIP) as aligment tab [no more] \chcode'136_7 % "^" as superscript sign [ok] \chcode'001_8 % Control-"^" (via TEX.TIP) as subscript sign [ok] \chcode'272_'3072 % to make things like "$x:=x+1$" and "$f\?:X\to Y$" work [no more] % MATH SYMBOLS AND FUNCTIONS % Math functions and other spelled-out operators \def\mod{\<\,\mathbin{\char m\char o\char d}\<\,} % [\bmod] % Delimiters \def\}{\~} % backslash-brace as equivalent to backslash-tilde [no more] % Multiple dots \def\ldotss{{.\.\.\}} [no more] \def\cdotss{\cdots\} [no more] \def\ldotsm{{\.\.\.\}} [no more] \def\cdotsm{{\\cdots\}} [no more] % Special constructs \def\pr{^\prime} % [becomes '] \def\prr{^{\prime\prime}} % [becomes ''] \def\star{^\ast} % asterisk in superscript position. % [becomes \st] \def\bar#1{{\overline{#1}}}% [some cases become \overline ] \def\modulo#1{\penalty0\;(\char m\char o\char d\char u\char l\char o,\,#1)}% [now \pmod ] % ALIGNMENT MACROS % Two-line formulas. % Usage: \twoline{line1}{glue}{line2} \def\twoline#1#2#3{\vbox{ % [use \displaylines instead ] \hbox to \textwidth pt{$ \quad\dispstyle {#1} $\hfill} \vskip#2 \hbox to \textwidth pt{\hfill $\dispstyle {#3}\quad$}}} % Centered vertical stacks of boxes. \def\cpile#1{\vcenter{\halign{\hfill$## $\hfill\cr#1}}} \def\lpile#1{\vcenter{\halign{$## $\hfill\cr#1}}} \def\rpile#1{\vcenter{\halign{\hfill$## $\cr#1}}} % rectangular matrices \def\matrix#1#2{ % [Now only one arg] % LOOPING [replaced by \loop ... \if ... \repeat] % Repeats #1 times argument #2 (warning: uses counter 9) \def\repeat#1#2{\setcount9 #1\reploop{#2}} \def\reploop#1{\ifpos9 {#1\advcount9 by -1\reploop{#1}}\else{}} % BOX TWIDDLING % pretends that #2 is #1pt deep (warning: uses box 0) \def\chop % [no more] to#1pt#2{\save0\hbox{$\dispstyle{#2}$}\hbox{\lower#1pt\null \vbox to 1ht0{\box0\vss}}} % % Macros for measuring boxes [use \the, and glue/dimen arthmetic?] % The macro \convert divides dimension #1 by the unit #2, % and sets \count6 to the result (rounded down and clamped above zero). % For example, \convert{2in}{pt} sets \count6 to 2x72=144. \def\convert#1#2{\setcount6 0 \xdef\convdim{#1}\xdef\convunit{#2}\convloopa} \def\convloopa{\ifdimen \convdim > \count6\convunit {{\advcount6 by 64}\convloopa} \else {\convloopb}} \def\convloopb{\ifdimen \convdim < \count6\convunit {{\advcount6 by -16}\convloopb} \else {\convloopc}} \def\convloopc{\ifdimen \convdim > \count6\convunit {{\advcount6 by 4}\convloopc} \else{\convloopd}} \def\convloopd{\ifdimen \convdim < \count6\convunit {{\advcount6 by -1}\convloopd} \else{}} % (WHAT A CROCK...) % PARAGRAPH MACROS [Use \line, \leftline, \rightline, \centerline] % Left-justified (i.e., standard), centered, and right-justified \hbox par. % Usage: % \lftpar 200 pt {This is the first line.\lp This is the second line.} % \ctrpar 200 pt {This is the first line.\cp This is the second line.} % \rtpar 200 pt {This is the first line.\rp This is the second line.} \def\lftpar#1pt#2{\hbox par #1 pt{#2}} \def\ctrpar#1pt#2{\hbox par #1 pt{\hfil #2}} \def\rtpar#1pt#2{\hbox par #1 pt{\hfil #2\hfilneg}} \def\boxparskipper{\vbox to3ex{}} % for par spacing in boxed text % Line breaks in \hbox par{...} \def\lb{\hfil\linebreak } % line break in \lftpar (or paragraph) \def\cb{\hfil\linebreak\hfil } % line break in \ctrpar \def\rb{\linebreak\hfil } % line break in \rtpar % Fake paragraph breaks in \hbox par{...} \def\lp{\hfil\linebreak\boxparskipper } % parag. break in \lftpar \def\cp{\hfil\linebreak\boxparskipper\hfil } % parag. break in \ctrpar \def\rp{\linebreak\boxparskipper\hfil } % parag. break in \rtpar % Fake display math in \hbox par{...} % Usage: \lp\boxdisp{\pi>e}\lp % or \lp\boxdisp{\pi>e}\boxeqno{(73)}\lp \def\boxdisp#1{\hfil\vbox{\vskip 1ex \hbox{$\dispstyle #1 $}\vskip 1ex}} \def\boxeqno#1{\hfil \hbox{#1}\hfilneg} % Indented paragraphs. % Usage: % \indent Bla bla bla... or % \begitems\item Foo;\item Bar;...\item Baz.\enditems OR % \begitems\itemno{1.}Foo;\itemno{2.}Bar;...\itemno{9.}Baz.\enditems \def\begitems{\par\vskip1ex plus0.3ex\penalty800 } \def\enditems{\par\vskip1.1ex plus0.4ex } \def\indent{\par\vskip 0.3ex\hangindent\textindent pt after0 } \def\item{\itemno{$\bullet$}} % for unnumbered items \def\itemno#1{\par\vskip-0.1ex\hangindent\itemindent pt after0 {$\rspose{#1\ } $}} % numbered items % Digressions: small print text, indented. % Usage: \digress{Mumble mumble.\dp More mumble.} \def\digress#1{\vskip 0.2ex plus0.5ex \hangindent \textindent pt after0 {\small #1\par}\vskip0.2ex plus0.5ex} \def\dp{\par\hangindent 15pt after0} % new paragraph in digression % Page break control. \def\opteject{\vfil\penalty0\vfilneg} % optional break w/ short page \def\keep#1cm{\vbox to #1cm{}\vskip-#1cm} % keeps next #1 cm on same page % MISCELLANEOUS % Accent macros that work in any font % A crock to get cmr accents in other fonts \let\umlautac=\" \let\tildeac=\s \let\tieac=\t \let\acuteac=\' \let\graveac=\` \let\hatac=\A \let\cedillaac=\c \let\breveac=\u \let\longac=\= \let\doubleS=\ss \def\"#1{{\cmr\umlautac\mainfont #1}} % umlaut \def\s#1{{\cmr\tildeac\mainfont #1}} % tilde \def\t#1{{\cmr\tieac\mainfont #1}} % ligature (for russian IA etc) \def\'#1{{\cmr\acuteac\mainfont #1}} % acute accent \def\`#1{{\cmr\graveac\mainfont #1}} % grave accent \def\A#1{{\cmr\hatac\mainfont #1}} % hat accent \def\c#1{{\cmr\cedillaac\mainfont #1}} % cedilla accent \def\C#1{{\spose{\cmr\char'30} #1}} % cedilla accent for capitals \def\=#1{{\cmr\longac\mainfont #1}} % long accent \def\u#1{{\cmr\breveac\mainfont #1}} % breve accent \def\ss{{\cmr\doubleS}} % German double s % Puts border around given box, 3pt away from it. \def\framebox#1{\vbox {\hrule \hbox{\vrule\hskip3pt\vbox{\vskip3pt #1 \vskip3pt}\hskip3pt\vrule} \hrule}} % Mnemonics for TEX parameters \def\jpar{\chpar1_} \def\ragged{\chpar8_} \def\jjpar{\chpar15_} \def\loose{\chpar14_} \def\uchyph{\chpar16_} % DEBUGGING % TEX trace macros \def\trace{\chpar0_} \def\macrotrace{\trace'355} \def\pagetrace{\trace'347} \def\fullpagetrace{\trace'77777747} \def\normaltrace{\trace'345} % Puts thin border around box #1 on the inside (useful to debug boxes). \def\showbox#1{\vbox {\hrule height0.2pt\vskip-0.2pt \hbox{\vrule width0.2pt\hskip-0.2pt #1 \hskip-0.2pt\vrule width0.2pt} \vskip-0.2pt\hrule height0.2pt}} % Shows a 1em by 1ex black box for the current font, and its size in pt. % Usage: {\rm \showfontbox} \def\showfontbox{This box is 1em by 1ex \save7\hbox{\vrule height1ex width1em} $(\approx\convert{10wd7}{pt}{{\count6}\over{10}}\hbox{\rm pt}\times \convert{10ht7}{pt} {{\count6}\over{10}}\hbox{\rm pt})$: \box7.} ʹ–"stolfitex" style˜JšÏcD˜Dš1˜1Jš˜š˜JšB˜BJš3˜3Jš˜Jš,˜,Jš&˜&JšH˜H——šœ˜š˜Jšœ'Ðbc œ#ž œ,ž œžœ.žœ9ž ˜‚——šœ˜š3˜3Jšœ2 ˜<—š˜Jšœ =˜I—š˜Jš œ œ œ œ œ˜Œ—š˜Jš œž œž œ'ž ˜Jšœžœ˜=JšœKž œ˜\——šœ˜š˜Jš&˜&Jšœžœ˜¹—š%˜%Jšœœ˜œ—š˜Jšœžœ˜(——šœ ž'˜4š:˜:J˜+J˜@——šœ˜š7˜7Jšœ ž œ\˜u—šž%˜DJš¿˜¿JšœO˜OJšœ˜œ˜®——šœž/˜EšL˜LJšä˜äJšœˆ˜ˆJšœ" ˜B—š ˜ Jšœ'˜AJšœ˜7Jšœ˜1—š*˜*Jšœ(˜BJšœ-˜GJšœ(˜A—š&˜&JšP˜PJšœI˜IJšœ(˜(—š˜Jš¨˜¨Jšœ»œU˜¸—š+˜+Jš2˜2Jšœq˜qJšœ%˜C—š˜Jšœ& ˜FJšœ* ˜J——šœœ˜š&œ˜'Jš,œ˜-JšœŸ˜ŸJšœ'œ(œ(œ(œ(œ( œ(œ(œ( œ(œ(œ˜ç—š1œ˜2Jšœo˜o—šœ˜Jšœm˜m——šœ œ˜šœ˜Jšœ˜—šGœ˜HJšœ¡˜¡—šHœ˜IJšœ˜JšœÞ˜Þ——J˜—…— Û