|
| 1 | +% avm.sty -- for attribute-value matrices -- mar 29, 1992; rev. dec 6, 1993 |
| 2 | +% (c) 1992 christopher manning ([email protected]) -- see avm.doc.tex |
| 3 | + |
| 4 | +\newif\ifavmactive\newif\ifavmsorted\newif\ifavmlabeled |
| 5 | +\newif\ifavmcenter\newif\ifavmbottom |
| 6 | +\newif\ifavmbottomright\newif\ifavmtopleft\newif\ifavmtopright |
| 7 | + |
| 8 | +\newdimen\avmdimen |
| 9 | +\newbox\avmboxone\newbox\avmboxthree |
| 10 | + |
| 11 | +\def\avmoptions#1{\avmactivefalse\avmsortedfalse\avmlabeledfalse |
| 12 | + \avmcenterfalse\avmbottomfalse |
| 13 | + \avmbottomrightfalse\avmtopleftfalse\avmtoprightfalse |
| 14 | + \def\more{#1}\ifx\more\empty\else\avmjoptions#1,\@nil\fi} |
| 15 | +\def\avmjoptions#1,#2\@nil{\def\more{#2}\csname avm#1true\endcsname |
| 16 | + \ifx\more\empty\else\avmjoptions#2\@nil\fi} |
| 17 | + |
| 18 | + |
| 19 | +\def\avmfont#1{\def\avmjfont{#1}} |
| 20 | +\def\avmjfont{} |
| 21 | + |
| 22 | +\def\avmvalfont#1{\def\avmjvalfont{#1}} |
| 23 | +\def\avmjvalfont{} |
| 24 | + |
| 25 | +\def\avmsortfont#1{\def\avmjsortfont{#1}} |
| 26 | +\def\avmjsortfont{} |
| 27 | + |
| 28 | +\def\avmhskip#1{\def\avmjhskip{#1}} |
| 29 | +\def\avmjhskip{1em} |
| 30 | + |
| 31 | +\def\avmbskip#1{\def\avmjbskip{#1}} |
| 32 | +\def\avmjbskip{0em} |
| 33 | + |
| 34 | +\def\avmvskip#1{\def\avmjvskip{#1}} |
| 35 | +\def\avmjvskip{0.385ex}%was .3875 |
| 36 | + |
| 37 | + |
| 38 | +\def\avmjprolog#1{$\mskip-\thinmuskip |
| 39 | + \left#1\hskip\avmjbskip\vcenter\bgroup\vskip\avmjvskip |
| 40 | + \ialign\bgroup\avmjfont |
| 41 | + \strut ##\unskip\hfil |
| 42 | + &&\hskip\avmjhskip\avmjvalfont ##\unskip\hfil\cr} |
| 43 | +\def\avmjpostlog#1{\crcr\egroup\vskip\avmjvskip\egroup |
| 44 | + \hskip\avmjbskip\right#1\mskip-\thinmuskip$\ignorespaces} |
| 45 | +
|
| 46 | +
|
| 47 | +\def\avmjcatcode{\let\lparen=(\let\rparen=)\catcode`\[=13\catcode`\]=13 |
| 48 | + \catcode`\<=13\catcode`\@=13\catcode`\(=13\catcode`\)=13 |
| 49 | + \catcode`\>=13\catcode`\|=13} |
| 50 | +
|
| 51 | +{\avmjcatcode % new group: redefine above catcodes as active |
| 52 | +
|
| 53 | +\gdef\specialavm{\avmjcatcode |
| 54 | +\def({\avmjprolog\lparen}% |
| 55 | +\def){\avmjpostlog\rparen}% |
| 56 | +\def<{\avmjprolog\langle}% |
| 57 | +\def>{\avmjpostlog\rangle}% |
| 58 | +\ifavmsorted |
| 59 | +\def[##1{\setbox\avmboxthree=\hbox{\avmjsortfont##1\/}\setbox2=\hbox |
| 60 | + \bgroup\avmjprolog\lbrack}% |
| 61 | +\def]{\avmjpostlog\rbrack\egroup\avmjsort}% |
| 62 | +\else\ifavmlabeled |
| 63 | +\def[##1{\def\more{##1}\setbox2=\hbox\bgroup\avmjprolog[}% |
| 64 | +\def]{\avmjpostlog]\egroup\node{\more}{\box2}}% |
| 65 | +\else |
| 66 | +\def[{\avmjprolog\lbrack}% |
| 67 | +\def]{\avmjpostlog\rbrack}% |
| 68 | +\fi\fi |
| 69 | +% |
| 70 | +\def\<{$\langle$}\def\>{$\rangle$}% |
| 71 | +\def\({\lparen}\def\){\rparen}% |
| 72 | +\def\[{\lbrack}\def\]{\rbrack}% |
| 73 | +\def|{$\,\vert\,$}% |
| 74 | +\def@##1{\avmbox{##1}}% |
| 75 | +} % end defn of \specialavm |
| 76 | +} % restore active catcodes |
| 77 | +
|
| 78 | +
|
| 79 | +\long\def\avm{\begingroup |
| 80 | +\ifavmactive\specialavm |
| 81 | +\else |
| 82 | +\def\({\avmjprolog(}% |
| 83 | +\def\){\avmjpostlog)}% |
| 84 | +\def\<{\avmjprolog\langle}% |
| 85 | +\def\>{\avmjpostlog\rangle}% |
| 86 | +% |
| 87 | +\ifavmsorted |
| 88 | +\def\[##1{\setbox\avmboxthree=\hbox{\avmjsortfont##1\/}\setbox |
| 89 | + 2=\hbox\bgroup\avmjprolog[}% |
| 90 | +\def\]{\avmjpostlog]\egroup\avmjsort}% |
| 91 | +\else\ifavmlabeled |
| 92 | +\def\[##1{\def\more{##1}\setbox2=\hbox\bgroup\avmjprolog[}% |
| 93 | +\def\]{\avmjpostlog]\egroup\node{\more}{\box2}}% |
| 94 | +\else |
| 95 | +\def\[{\avmjprolog[}% |
| 96 | +\def\]{\avmjpostlog]}% |
| 97 | +\fi\fi |
| 98 | +% |
| 99 | +\def\|{$\,\vert\,$}% |
| 100 | +\def\@##1{\avmbox{##1}}% |
| 101 | +\fi % end not active |
| 102 | +% |
| 103 | +\ifx\LaTeX\undefined\def\\{\cr}% running under TeX |
| 104 | +\else \def\\{\@tabularcr}% Leverage off LaTeX's \\*[dimen] options |
| 105 | +\fi |
| 106 | +\def\!{\node}% |
| 107 | +\long\def\avmjsort{\dimen2=\ht2\advance\dimen2 by -.25\baselineskip |
| 108 | + \global\dimen\avmdimen=\wd\avmboxthree |
| 109 | + \ifavmtopleft \raise\dimen2\llap{\box\avmboxthree}\box2% |
| 110 | + \else\ifavmtopright \box2\raise\dimen2\box\avmboxthree% |
| 111 | + \else\ifavmbottomright \box2\lower\dimen2\box\avmboxthree% |
| 112 | + \else \lower\dimen2\llap{\box\avmboxthree}\box2% |
| 113 | + \fi\fi\fi}% |
| 114 | +\long\def\sort##1##2{\setbox2=\hbox{##2}\setbox |
| 115 | + \avmboxthree=\hbox{\avmjsortfont##1\/}\dimen2=\ht2 |
| 116 | + \advance\dimen2 by -.25\baselineskip |
| 117 | + \ifavmtopleft \raise\dimen2\box\avmboxthree\box2% |
| 118 | + \else\ifavmtopright \box2\raise\dimen2\box\avmboxthree% |
| 119 | + \else\ifavmbottomright \box2\lower\dimen2\box\avmboxthree% |
| 120 | + \else \lower\dimen2\box\avmboxthree\box2% |
| 121 | + \fi\fi\fi}% |
| 122 | +\long\def\osort##1##2{\setbox2=\hbox{##2}\setbox |
| 123 | + \avmboxthree=\hbox{\avmjsortfont ##1\/}\avmjsort}% |
| 124 | +\def\avml{\avmjprolog.}% |
| 125 | +\def\avmr{\avmjpostlog.}% |
| 126 | +\def\avmb##1{\node{##1}{\lbrack\;\rbrack}}% |
| 127 | +\def\avmd##1{\node{##1}{---}}% |
| 128 | +\def\q##1{\ifx ##1\{$\lbrace$\else |
| 129 | + \ifx ##1\}$\rbrace$\else |
| 130 | + \ifx ##1<$\langle$\else |
| 131 | + \ifx ##1>$\rangle$\fi \fi \fi \fi}% |
| 132 | +\def\{{\avmjprolog\lbrace}% |
| 133 | +\def\}{\avmjpostlog\rbrace}% |
| 134 | +\def\;{\hskip\avmjhskip}% |
| 135 | +\def\avmspan##1{\multispan2\strut ##1\expandafter\hfil}% |
| 136 | +\avmjfont |
| 137 | +\openup\avmjvskip |
| 138 | +\setbox\avmboxone=\hbox\bgroup\ignorespaces |
| 139 | +} % end defn of \avm |
| 140 | +
|
| 141 | +
|
| 142 | +\def\endavm{\egroup\ifvmode\leavevmode\fi % this if is useful! |
| 143 | + \ifavmsorted\null\hskip\dimen\avmdimen\fi |
| 144 | + \ifavmcenter |
| 145 | + \box\avmboxone |
| 146 | + \else \ifavmbottom |
| 147 | + \lower.575\baselineskip\hbox{\vbox{\box\avmboxone\null}}% |
| 148 | + \else |
| 149 | +% the next bit is ripped off from Emma's \evnup in lingmacros.sty |
| 150 | + \dimen2=\ht\avmboxone\advance\dimen2 by -.725\baselineskip |
| 151 | + \lower\dimen2\box\avmboxone |
| 152 | +\fi \fi \endgroup} |
| 153 | +
|
| 154 | +
|
| 155 | +% based on TeXbook exercise 21.3 |
| 156 | +\def\avmbox#1{\setbox2=\hbox{$\scriptstyle #1$}\lower.2ex\vbox{\hrule |
| 157 | + \hbox{\vrule\kern1.25pt |
| 158 | + \vbox{\kern1.25pt\box2\kern1.25pt}\kern1.25pt\vrule}\hrule}} |
0 commit comments