%% avm.sty - a style file for attribute-value matrices %% Copyright 1992, 1993, 2006, 2013 Christopher Manning (manning@cs.stanford.edu) % % v 1.00 mar 29, 1992 % v 1.01 dec 6, 1993 % v 1.02 jan 5, 2006 % v 1.03 dec 8, 2013 % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is Christopher Manning. % % This work consists of the files avm.sty, avm-doc.tex, avm-test.tex. \newif\ifavmactive\newif\ifavmsorted\newif\ifavmlabeled \newif\ifavmcenter\newif\ifavmbottom \newif\ifavmbottomright\newif\ifavmtopleft\newif\ifavmtopright \newdimen\avmdimen \newbox\avmboxone\newbox\avmboxthree \def\avmoptions#1{\avmactivefalse\avmsortedfalse\avmlabeledfalse \avmcenterfalse\avmbottomfalse \avmbottomrightfalse\avmtopleftfalse\avmtoprightfalse \def\more{#1}\ifx\more\empty\else\avmjoptions#1,\@nil\fi} \def\avmjoptions#1,#2\@nil{\def\more{#2}\csname avm#1true\endcsname \ifx\more\empty\else\avmjoptions#2\@nil\fi} \def\avmfont#1{\def\avmjfont{#1}} \def\avmjfont{} \def\avmvalfont#1{\def\avmjvalfont{#1}} \def\avmjvalfont{} \def\avmsortfont#1{\def\avmjsortfont{#1}} \def\avmjsortfont{} \def\avmhskip#1{\def\avmjhskip{#1}} \def\avmjhskip{1em} \def\avmbskip#1{\def\avmjbskip{#1}} \def\avmjbskip{0em} \def\avmvskip#1{\def\avmjvskip{#1}} \def\avmjvskip{0.385ex}%was .3875 \def\avmjprolog#1{$\mskip-\thinmuskip \left#1\hskip\avmjbskip\vcenter\bgroup\vskip\avmjvskip \ialign\bgroup\avmjfont \strut ##\unskip\hfil &&\hskip\avmjhskip\avmjvalfont ##\unskip\hfil\cr} \def\avmjpostlog#1{\crcr\egroup\vskip\avmjvskip\egroup \hskip\avmjbskip\right#1\mskip-\thinmuskip$\ignorespaces} \def\avmjcatcode{\let\lparen=(\let\rparen=)\catcode`\[=13\catcode`\]=13 \catcode`\<=13\catcode`\@=13\catcode`\(=13\catcode`\)=13 \catcode`\>=13\catcode`\|=13} {\avmjcatcode % new group: redefine above catcodes as active \gdef\specialavm{\avmjcatcode \def({\avmjprolog\lparen}% \def){\avmjpostlog\rparen}% \def<{\avmjprolog\langle}% \def>{\avmjpostlog\rangle}% \ifavmsorted \def[##1{\setbox\avmboxthree=\hbox{\avmjsortfont##1\/}\setbox2=\hbox \bgroup\avmjprolog\lbrack}% \def]{\avmjpostlog\rbrack\egroup\avmjsort}% \else\ifavmlabeled \def[##1{\def\more{##1}\setbox2=\hbox\bgroup\avmjprolog[}% \def]{\avmjpostlog]\egroup\node{\more}{\box2}}% \else \def[{\avmjprolog\lbrack}% \def]{\avmjpostlog\rbrack}% \fi\fi % \def\<{$\langle$}\def\>{$\rangle$}% \def\({\lparen} \def\){\rparen}% \def\[{\lbrack} \def\]{\rbrack}% \def|{$\,\vert\,$}% \def@##1{\avmbox{##1}}% } % end defn of \specialavm } % restore active catcodes \long\def\avm{\begingroup \ifavmactive\specialavm \else \def\({\avmjprolog(}% \def\){\avmjpostlog)}% \def\<{\avmjprolog\langle}% \def\>{\avmjpostlog\rangle}% % \ifavmsorted \def\[##1{\setbox\avmboxthree=\hbox{\avmjsortfont##1\/}\setbox 2=\hbox\bgroup\avmjprolog[}% \def\]{\avmjpostlog]\egroup\avmjsort}% \else\ifavmlabeled \def\[##1{\def\more{##1}\setbox2=\hbox\bgroup\avmjprolog[}% \def\]{\avmjpostlog]\egroup\node{\more}{\box2}}% \else \def\[{\avmjprolog[}% \def\]{\avmjpostlog]}% \fi\fi % \def\|{$\,\vert\,$}% \def\@##1{\avmbox{##1}}% \fi % end not active % \ifx\LaTeX\undefined\def\\{\cr}% running under TeX \else \ifx\@tabularcr\relax \def\\{\@arraycr}% fix for the Mainz array package \else \def\\{\@tabularcr}% Leverage off LaTeX's \\*[dimen] options \fi \fi \def\!{\node}% \long\def\avmjsort{\dimen2=\ht2\advance\dimen2 by -.25\baselineskip \global\dimen\avmdimen=\wd\avmboxthree \ifavmtopleft \raise\dimen2\llap{\box\avmboxthree}\box2% \else\ifavmtopright \box2\raise\dimen2\box\avmboxthree \else\ifavmbottomright \box2\lower\dimen2\box\avmboxthree \else \lower\dimen2\llap{\box\avmboxthree}\box2% \fi\fi\fi}% \long\def\sort##1##2{\setbox2=\hbox{##2}\setbox \avmboxthree=\hbox{\avmjsortfont##1\/}\dimen2=\ht2% \advance\dimen2 by -.25\baselineskip \ifavmtopleft \raise\dimen2\box\avmboxthree\box2% \else\ifavmtopright \box2\raise\dimen2\box\avmboxthree% \else\ifavmbottomright \box2\lower\dimen2\box\avmboxthree% \else \lower\dimen2\box\avmboxthree\box2% \fi\fi\fi}% \long\def\osort##1##2{\setbox2=\hbox{##2}\setbox \avmboxthree=\hbox{\avmjsortfont ##1\/}\avmjsort}% \def\asort##1{\avmspan{\avmjsortfont ##1}\\}% \def\avml{\avmjprolog.}% \def\avmr{\avmjpostlog.}% \def\avmb##1{\node{##1}{\lbrack\;\rbrack}}% \def\avmd##1{\node{##1}{---}}% \def\q##1{\ifx ##1\{$\lbrace$\else \ifx ##1\}$\rbrace$\else \ifx ##1<$\langle$\else \ifx ##1>$\rangle$\fi \fi \fi \fi}% \def\{{\avmjprolog\lbrace}% \def\}{\avmjpostlog\rbrace}% \def\;{\hskip\avmjhskip}% \def\avmspan##1{\multispan2\strut ##1\expandafter\hfil}% \avmjfont \openup\avmjvskip \setbox\avmboxone=\hbox\bgroup\ignorespaces } % end defn of \avm \def\endavm{\egroup\ifvmode\leavevmode\fi % this if is useful! \ifavmsorted\null\hskip\dimen\avmdimen\fi \ifavmcenter \box\avmboxone \else \ifavmbottom \lower.575\baselineskip\hbox{\vbox{\box\avmboxone\null}}% \else % the next bit is ripped off from Emma's \evnup in lingmacros.sty \dimen2=\ht\avmboxone\advance\dimen2 by -.725\baselineskip \lower\dimen2\box\avmboxone \fi \fi \endgroup} % based on TeXbook exercise 21.3 \def\avmbox#1{\setbox2=\hbox{$\scriptstyle #1$}\lower.2ex\vbox{\hrule \hbox{\vrule\kern1.25pt \vbox{\kern1.25pt\box2\kern1.25pt}\kern1.25pt\vrule}\hrule}}