%% avm.sty - a style file for attribute-value matrices %% Copyright 1992, 1993, 2006, 2013 Christopher Manning (manning@cs.stanford.edu) %% Copyright 2018 Language Science Press (felix.kopecky@langsci-press.org) % % v 1.00 mar 29, 1992 % v 1.01 dec 6, 1993 % v 1.02 jan 5, 2006 % v 1.03 dec 8, 2013 % v 1.03l feb 16, 2018 % % 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. % The Maintainer for Language Science Press additions is Felix Kopecky. % % 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 %% Additions by Language Science Press \RequirePackage{tikz} \usetikzlibrary{calc} \def\LangsciAvmStretchfactor{15} \newcommand{\LangsciAvmLeftDelim}[2]% #1 = height, #2 = depth {\tikz[baseline]{\coordinate (middle) at ($(-.\LangsciAvmStretchfactor,-#2)!0.5!(-.\LangsciAvmStretchfactor,#1)$);\draw[thick] (0,-#2) -- (middle) -- (0,#1);}\:} \newcommand{\LangsciAvmRightDelim}[2]% #1 = height, #2 = depth {\:\tikz[baseline]{\coordinate (middle) at ($(.\LangsciAvmStretchfactor,-#2)!0.5!(.\LangsciAvmStretchfactor,#1)$);\draw[thick] (0,-#2) -- (middle) -- (0,#1);}} \newlength{\LangsciAvmAngleBoxHeight} \newlength{\LangsciAvmAngleBoxDepth} \newsavebox{\LangsciAvmAngleBox} \newcommand{\LangsciAvmAngle}[1]% #1 = text to be enclosed {\savebox{\LangsciAvmAngleBox}{#1}% get size of box \settoheight{\LangsciAvmAngleBoxHeight}{\usebox{\LangsciAvmAngleBox}}% \settodepth{\LangsciAvmAngleBoxDepth}{\usebox{\LangsciAvmAngleBox}}% \LangsciAvmLeftDelim{\LangsciAvmAngleBoxHeight}{\LangsciAvmAngleBoxDepth}% \,\usebox{\LangsciAvmAngleBox}\,% \LangsciAvmRightDelim{\LangsciAvmAngleBoxHeight}{\LangsciAvmAngleBoxDepth}} \def\avmjprolog#1{$\mskip-\thinmuskip \left#1\hskip\avmjbskip\vcenter\bgroup\vskip\avmjvskip \ialign\bgroup\bgroup\normalfont\avmjfont \strut ##\egroup\unskip\hfil &&\hskip\avmjhskip\bgroup\normalfont\avmjvalfont ##\egroup\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}% \def\+{$\oplus\,$} \ifavmsorted \def[##1{\setbox\avmboxthree=\hbox{\bgroup\normalfont\avmjsortfont##1\egroup}\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\+{$\oplus\,$} \def\){\avmjpostlog)}% \def\<{\avmjprolog\langle}% \def\>{\avmjpostlog\rangle}% % \ifavmsorted \def\[##1{\setbox\avmboxthree=\hbox{\bgroup\normalfont\avmjsortfont##1\egroup}\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{\bgroup\normalfont\avmjsortfont##1\egroup}\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{\bgroup\normalfont\avmjsortfont ##1\egroup}\avmjsort}% \def\asort##1{\avmspan{\bgroup\normalfont\avmjsortfont ##1\egroup}\\}% \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}}