% CgMacros.tex of September 2, 1983 7:23 pm --- Stolfi
% DESIRABLE CHANGES
% Fix \lpike and \rpike in \small
% Delete \un (leave only \uni, parallel to \inte)
% Define \um#1{{\cmr\" #1}} and use \um{\rm o} instead of \uo, etc.
% Delete \ety (leave only \empty)
% FONT DEFINITIONS
\font m←timesroman at 12truebp
\font b←timesromani at 12truebp
\font <←timesromanb at 12truebp
\font M←math at 10 truebp
\font S𡤊rrows at 10 truebp
\font v𡤌mtt
\font p←timesroman at 8truebp
\font o←timesromani at 8truebp
\font t←timesromanb at 8truebp
\font Z←timesromanbi at 8truebp
\font e𡤌mr8
\font k𡤌mi8
\font y𡤌msy8
\font h𡤌mtt8
\font N←math at 8 truebp
\font R𡤊rrows at 8truebp % should be ArrowsTwo at 18truebp
\font D𡤌mr6
\font J𡤌mi6
\font X𡤌msy6
\font U𡤏leur at 28truebp
\def\headerfont{\curfont <} % font used for headers and page no.s
\def\titlefont{\curfont =} % font used for paper title
% Relativized fonts (get the right size depending on context).
% Default (12 point)
\def\fx{\:v} % typewriter font
\def\mrm{\:c} % math roman font
\def\cmr{\:a} % computer modern roman
\def\mal{\:M} % Alto math font
\def\bi{\:w} % Bold italic font
\def\em{\bf } % for emphasis
\def\arfont{\:S} % arrows font
% see also \rm, \bf, \it in TBasic.tex
% Smaller (9 point)
% Usage: {\small ...}, {\small\hbox par{...}}, etc
% (\hbox par{\small ...} will get wrong \baselineskip & c.)
\def\small{\baselineskip \smallbaselineskip pt \parskip \smallparskip pt
\dispskip9pt plus3pt minus7pt
\dispaskip0pt plus3pt \dispbskip 5pt plus3pt minus2pt
\def\bxparskip{\smallbxparskip}
\def\rm{\:p} \def\it{\:o} \def\bf{\:t} \def\bi{\:Z}
\def\cmr{\:e}
\def\mrm{\:e} \def\mal{\:N} \def\fx{\:h}
\def\arfont{\:R}
\mathrm eDf \mathit kJl \mathsy yXz \rm }
% Math symbols.
\def\leq{\mathrel{\char'424}}
\def\geq{\mathrel{\char'425}}
\def\neq{\not=}
\def\dist{\mathop{\char d\char i\char s\char t}}
\def\deg{^\circ}
\def\gets{\mathrel{\char'440}} % assign. arrow
\def\to{\mathrel{\char'441}} % limit arrow
\def\lbrace{\{}
\def\rbrace{\}}
\def\la{\langle}
\def\ra{\rangle}
\def\implies{\mathrel{\char'451}} % right implication arrow
\def\impliedby{\mathrel{\char'450}} % left implication arrow
\def\doubleimpl{\mathrel{\char'454}} % two-way implication arrow
\def\rmiff{\,\mathrel{\hbox{iff}}\,} % "iff" in roman font
\def\rmif{\,\mathrel{\hbox{if}}\,} % "if" in roman font
\def\rmand{\,\mathrel{\hbox{and}}\,} % "and" in roman font
\def\rmor{\,\mathrel{\hbox{or}}\,} % "or" in roman font
\def\inte{\mathbin{\char'534}} % infix intersection operator
\def\uni{\mathbin{\char'533}} % infix union operator
\def\and{\mathbin{\char'536}} % logical and operator
\def\or{\mathbin{\char'537}} % logical or operator
\def\equiv{\mathrel{\char'421}} % logical equivalence
\def\land{\mathbin{\char'536}} % boolean and operator
\def\lor{\mathbin{\char'537}} % boolean or operator
\def\lnot{\mathop{\char'430}} % boolean not operator
\def\xor{\oplus }
\def\hull{\mathop{\char h\char u\char l\char l}}
\def\bound#1{\partial {#1}} % boundary
\def\clos#1{\bar{#1}} % closure
\def\star{^\ast} % asterisk in superscript position.
\def\iso{\mathrel{\char'430}} % single squiggle
\def\simil{\mathrel{\char'431}} % double squiggle
\def\empty{\emptyset}
\def\forall{\mathop{\hbox{\mal A}}}
\def\exists{\mathop{\hbox{\mal E}}}
\def\reals{\hbox{\bi R\/}} % set of real numbers
\def\integers{\hbox{\bi Z\/}} % set of all integers
\def\sphere{\hbox{\bi S\/}} % needs dimensionality subscript
\def\bar#1{{\overline{#1}}}
\def\pr{^\prime}
\def\prr{^{\prime\prime}}
\def\rpike{\hbox{\arfont n}} % black triangle pointing right
\def\lpike{\hbox{\arfont x}} % black triangle pointing left
\def\hat#1{{\A #1}} % fix this!
\def\det#1{\left\char'550614 #1 \right\char'550614} % determinant
\def\set#1{{\{#1\}}} % set defined by enumeration
\def\rset#1{{\leftset #1 \rightset}} % set defined by \relv
\def\seq#1{\langle #1 \rangle}
\def\sp{\,\,\,} % to denote unordered spans (segs, arcs, etc)
\def\dollar{\char'44}
\def\flower{{\curfont U B}} % upright lotus flower
\def\bu{$\bullet$\ } % for items in text
\def\item{\indent\bu}
\def\note#1{{\small \bf << #1 >>}} % for annotations to manuscript
% Obsolete macros (kept for backwards ompatibility only)
\def\uo{{\cmr\"\rm o}} % umlaut o in roman
\def\uu{{\cmr\"\rm u}} % umlaut u
\def\ua{{\cmr\"\rm a}} % umlaut a
\def\arc{\mathop{\char a\char r\char c}}
\def\seg{\overline} % same as \bar
\def\ety{\emptyset} % same as \empty
\def\un{\mathbin{\char'533}} % infix union operator; same as \uni
\def\span{\,\,\,} % same as \sp
% macro for flagging TEX errors
\def\bug{\hbox{\hskip1pt\vrule width10pt height10pt \hskip1pt}}
% placeholders and notes for our use
\def\xx#1{{\small \bf << #1 >>}}
% Conditional expressions.
\chcode'174𡤄 % alignment tab
\def\alter#1{\left\lbrace\vcenter{
\halign{\lft{##}\quad\quad|\lft{##}\cr #1}
}\right.}
\def\va{\noalign{\vskip 3pt plus1pt}} % extra space after \cr
\def\vb{\noalign{\vskip 6pt plus2pt}}
\def\vc{\noalign{\vskip 9pt plus3pt}}
\def\vd{\noalign{\vskip 12pt plus4pt}}
% rectangular matrices
% Usage: for a matrix of 5 columns, use
% \matrix5{x{11}|x{12}|x{13}|x{14}|x{15}\cr
% x{21}| ... | x{25}\cr
% ...
% x{m1}| ... |x{m5}\cr}
%
% Warning: uses counter #4
\def\matrixctrfmt{\ctr{$ ## $}}
\def\matrixcr{\cr }
\def\matrixhalign{\halign}
\def\matrixreploop{\xdef\matrixaccum{\matrixaccum\matrixctrfmt}
\advcount4 by-1
\ifpos4{\xdef\matrixaccum{\matrixaccum\hskip7pt |}
\matrixreploop}
\else{\xdef\matrixaccum{\matrixaccum\matrixcr}}}
\def\matrix#1#2{\setcount4 #1
\xdef\matrixaccum{}
\matrixreploop
\xdef\matrixaccum{\matrixhalign{\matrixaccum #2}}
\;\vcenter{\matrixaccum}\;}
% Indented paragraph.
\def\indent{\par\vskip 2pt\hangindent \textindent pt after 0 }
% Page break control.
\def\opteject{\vfil\penalty0\vfilneg} % optional break w/ short page
\def\keep#1{\vbox to #1cm{}
\vskip-#1cm} % keeps next #1 cm on same page
% Paragraph break in \hbox par
\def\bxparskipper{\vbox to \bxparskip pt{}} % for par spacing in boxed text
\def\bxpar{\hfil\null\penalty-2000
\bxparskipper} % begin new left-justified paragraph
\def\ctrpar{\hfil\null\penalty-2000
\bxparskipper\hfil } % begin new centered paragraph
% Fake display math in \hbox par{...}
% Usage: \bxpar\bxdisp{\pi>e}\bxpar
% or \bxpar\bxdisp{\pi>e}\bxeqno{(73)}\bxpar
\def\bxdisp#1{\hfil\vbox{\vskip 3pt \hbox{$\dispstyle #1 $}\vskip 3pt}}
\def\bxeqno#1{\hfil \hbox{#1}\hfilneg}
% Puts frame around box #1.
\def\boxit#1{\vbox{\hrule\hbox{\vrule\hskip3pt\vbox{
\vskip3pt #1 \vskip3pt}\hskip3pt\vrule}\hrule}}
% Program mode.
% usage: {\prog<cr>line1<cr>line2<cr> ...linen<cr>\endprog}
% (NOTE BRACES! ! ! !)
\def\prog{\chcode'40\chcode'15\hsize\progwidth pt\def\
{\par}\parskip0pt\vskip3ptplus3pt\penalty-500\fx}
\def\endprog{\vskip3ptplus3pt\hsize\textwidth pt\penalty-600}
\def\prg#1{\hbox{\fx #1}} % usage: $\prg{line}$
\def\pgets{$\gets$} % left arrow in progs
% Footnotes.
% Use \foot7{Blah Blah} for footnote number 7.
% Using \footfig7(3){Blah Blah} leaves space at the right margin of
% the footnote for a figure 3cm high.
% Use \ftpar to break paragraphs in a footnote.
\def\footbox#1#2#3{{\small\hbox par #3 pt{$\null^{#1}$ #2}}}
\def\footfigbox#1{\vbox to #1cm{\hbox to 0pt{\null}}}
\def\footline{\vskip6pt plus10pt\hrule width 4cm\vskip4pt}
\def\footfirstp#1{\if 1#1{\footline}\else{}
\if \dag#1{\footline}\else{}}
\def\foot#1#2{$\null^{#1}$\botinsert{\footfirstp{#1}
\vskip 5pt plus2pt\footbox{#1}{#2}{\textwidth}}}
\def\footfig#1(#2)#3{$\null^{#1}$\botinsert{\footfirstp{#1}
\vskip 5pt plus2pt\hbox{
$\vcenter{\footbox{#1}{#3}{\ftfigwidth}}
\vcenter{\footfigbox{#2}}$\hfil}}}
\def\ftpar{\bxpar} % \par (of sorts) in footnotes
% Small print paragraph.
\def\digress#1{\vskip 1pt plus3pt \hangindent 15pt after0
{\small #1\par}\vskip1pt plus3pt}
\def\dp{\hangindent 15pt after0} % new paragraph in digression
% Problem and caveat prefixes.
\def\prob{\problem{\count1} \advcount1}
\def\problem#1{$\rpike$\ {\bf #1}.\ }
\def\caveat{\vskip 4 pt plus 2 pt \it}
% Theorem, lemma, conjecture and definition.
\def\lemma{\theolemma{\it}{Lemma}}
\def\theorem{\theolemma{\it}{Theorem}}
\def\conjecture{\theolemma{\it}{Conjecture}}
\def\definition{\theolemma{\rm}{Definition}}
\def\theolemma#1#2#3#4{\par\vskip 5pt plus 3pt minus 3pt\hangindent \theostatindent pt
{\bf #2 #3. }{#1 #4}\par\vskip 3pt plus 3pt}
\def\tp{\hangindent\theostatindent pt after0 } % new par in thm.'s/def. statement
\def\proof#1{
\hangindent\proofindent pt after0\begproofmark #1\penalty1000
\endproofmark\par\vskip 3pt plus 6pt}
\def\pp{\hangindent \proofindent pt after0} % new par in proof
% Algorithm format.
% uses counters 3 (to compute useful width), 4 (to count bars), and
% 5 (current nesting level).
\def\algorithm#1#2#3{{\penalty-300\vskip10pt plus3pt minus3pt
\hangindent \theostatindent pt {\bf Algorithm #1. }{\it #2}\par
\vskip 3pt plus 2pt minus0pt\penalty 1000
\algbody{#3}
\par\vskip 10pt plus 3pt minus 3pt}}
\def\algbody#1{{
\parindent 0pt \hangindent 0pt after0
\baselineskip 0pt \lineskip0pt
\setcount5 0
#1
\parindent\stdparindent pt}}
\def\vbars{\setcount3 \algwidth\setcount4 \count5
\hskip \algindent pt\advcount3 by -\algindent
\advcount3 by -\algindent % to indent right margin too
\vbarsloop
\hskip-\stepindent pt\advcount3 by \stepindent
}
\def\vbarsloop{\ifpos4
{\vrule width0.4pt
\hskip-0.4pt
\hskip\stepindent pt\advcount3 by -\stepindent
\advcount4 by -1
\vbarsloop}
\else
{}}
\def\afig#1{
\ftpar\vbox to #1cm{\null}\ftpar
} % figure in algorithm steps
\def\step#1{\par\hbox to \pagewidth pt
{\vbars
\hskip \snoindent pt\advcount3 by -\snoindent
\hskip \contindent pt\advcount3 by -\contindent
\vbox{
\vskip 2pt plus0pt minus0pt
{\baselineskip12pt \lineskip1pt
\hbox par \count3pt{\hskip-\contindent pt #1}}
\vskip 2pt plus0pt minus0pt}
\hfil}}
\def\comm#1{\par\hbox to \pagewidth pt
{\vbars
\hskip \snoindent pt\advcount3 by -\snoindent
\hskip \contindent pt\advcount3 by -\contindent
\vbox{
\vskip 2pt plus0pt minus0pt
{\small \hbox par \count3pt{#1}}
\vskip 3pt plus0pt minus0pt}
\hfil}}
\def\begblock#1\endblock{\advcount5 by 1\ear #1\ear \advcount5 by-1}
\def\ear{\par\hbox to \pagewidth pt
{\vbars \vrule height 0.4pt width 3pt \hfil}}
\def\sno#1 {{\baselineskip0pt
\lineskip0pt
\vbox{\hbox to \contindent pt{}
\hbox{\bf #1.\hskip2pt}}}} % step number.
\def\nono{\hskip \contindent pt } % for unnumbered steps.
\def\sna#1{{\it #1}} % step name and comments.
\def\blug{\hskip 3pt\blackslug}
% Space for figure.
% Use \fig5 for a figure 5cm high
% Use \figno(7)5 for a figure with number (7) and 5 cm high
\def\gnaw{} % to eat spaces after \fig etc
\def\fig#1{\dispaskip0pt plus100pt $$\hbox to 2in{\vbox to #1cm{\null}}$$\dispaskip0pt plus3pt\gnaw}
\def\figno(#1)#2{\dispaskip0pt plus100pt $$\vcenter{\hbox to 2in{\vbox to #2cm{\null}}}\eqno(\hbox{#1})$$\dispaskip0pt plus3pt\gnaw}
\def\figcap#1#2{\ctrline{
\hbox par 5in{Figure #1. #2}}} % figure captions
% Reference format.
% Usage: \ref [\Boo] {\refauth{Boojum, C. D.}
% \reftit{Salting jubjubs in glue.}
% \refpub{J. of Beavers and Butchers V. 1 N. 357 (1999)}
% \refrem{Charming; reminds me of smiles and soap.}}
% fix the numbers after selecting the reference codes
\def\ref [#1] #2{\vskip \refvskip pt\hbox to \textwidth pt{\hskip\refindent pt\hbox par \refbodywidth pt{\hbox to 0.0in {$\hskip -\refindent pt \hbox{[#1]} \hskip 0pt plus 1000pt minus 1000pt$}#2}}\par}