AVM(attribute-value matrix: 属性値行列)は,LFGとHPSGにおいて素性構造を記述するのに使われます.基本的には数学環境の行列に括弧を付ければ良いのですが,大きなAVMを書こうとするとソースが複雑化するため,スタイルファイルを読み込むか,マクロを書いておいた方が良いでしょう.スタイルファイルとしてはavm.styが最も一般的ですので,以下でその基本的な使い方を解説します.スタイルファイルのダウンロード,および詳細な解説は作者であるChris Manningのページを参照してください.
avm.styを読み込んだら,まずプリアンブルにデフォルトで使用するフォントを指定しておきましょう.何も指定しないとローマンになりますが,LFGやHPSGの場合,スモールキャピタルを使うことが多いので,以下のように書いておくとよいでしょう.
\avmfont{\sc}
では書いていきます.まず\begin{avm}…\end{avm}という風に環境を宣言し,その中に記述していきます.角括弧を\[と\]で指定し,その中に属性と値を&で組にして書いていきます.複数の組がある場合,改行(\\)するのを忘れないようにして下さい.
\begin{avm} \[ num & sg\\ gend & f \] \end{avm}
この記述で以下のような小さいAVMが得られます.
さらにAVMの中に別のAVMを埋め込んでみましょう.
\begin{avm} \[ subj & \[ num & sg\\ gend & f \]\\ obj & \[ num & pl\\ gend & m \] \] \end{avm}
結果は以下のようになります.
デフォルトで指定した以外のフォントを使う場合は個別に指定します.例えば以下ではローマン体の部分は{\rm …}と指定しています.また括弧の種類も様々なものが用意されていて,所謂中括弧は\{, \},小さい山括弧は\q<, \q>,大きい山括弧は\<, \>で表します.またHPSGでよく用いられる囲み数字は\@{…}で記述します(数字が1桁の場合は{}は省略可).
\begin{avm} \[ pred & `{\rm kiss}\q<subj,obj\q>'\\ adjunct & \{\[ pred & `{\rm yesterday}'\]\} \] \end{avm}
\begin{avm} \[ cat \| subcat \<NP$_{\@1}$, NP$_{\@2}$, S[comp]:\@3\> \] \end{avm}
ここまでは&で属性と値の組を記述していましたが,ある属性の名前が長い場合,以下のように少し不格好なAVMができあがることがあります.
ADJUNCTという属性の名前が長いために,その他の属性と値の間が大きく空きすぎています.これが気になるという人は以下のような感じで&の代わりに\;を使用すると値を揃えずに出力することができます.
\begin{avm} \[ pred \; `{\rm kiss}\q<subj,obj\q>'\\ tense \; past\\ subj \; \[ pred & `{\rm John}'\] \\ obj \; \[ pred & `{\rm Mary}'\] \\ adjunct \; \{\[ pred & `{\rm yesterday}'\]\} \] \end{avm}
しかし,これはこれで値の位置が揃っていなくて不格好に感じるという人は,\avmspan{…}というコマンドで属性と値を囲むことで,その部分だけを揃えないということができます.例えば,以下のように記述すると\avmspanで囲まれたADJUNCT以外の属性と値は揃った出力を得ることができるわけです.
\begin{avm} \[ pred & `{\rm kiss}\q<subj,obj\q>'\\ tense & past\\ subj & \[ pred & `{\rm John}'\] \\ obj & \[ pred & `{\rm Mary}'\] \\ \avmspan{adjunct \; \{\[ pred & `{\rm yesterday}'\]\}} \] \end{avm}
最近のHPSGでは素性構造がタイプ付けがなされています.タイプは\asort{…}で付与することができます.また通常タイプはイタリック体で示しますので,\avmsortfont{\it}と指定しておきましょう.この指定は上述した\avmfont{\sc}同様プリアンブルに記述しておくこともできます.
\begin{avm} \avmsortfont{\it} \[ \asort{hd-comp-ph} phon & \q<\@3, \@4\q>\\ synsem & VP \] \end{avm}
最後にLFGのfunctional controlなど素性構造内の値を線で結ぶ方法を紹介します.これはavm.styの機能ではなく,tree-dvipsを使用します.こちらのサイトからスタイルファイルなどをダウンロードして,tree-dvips.styをいつもスタイルファイルを置いている場所に,tree-dvips91.proを$TEXMFの中にあるdvipsディレクトリのどこかに放り込んでおきます.通常tree-dvipsでは\node{ノードの名前}{ノードとする範囲}を指定して,複数のノードを直線や曲線で結びますが,avm.styにはこの\nodeを簡略化して\!というコマンドを使うことができます.例えば以下のように記述します.
\begin{avm} \[ pred & `{\rm expect}\q<subj,xcomp\q>obj'\\ subj & \[ pred & `{\rm John}'\]\\ obj & \!{a}{\[ pred & `{\rm Mary}'\]}\\ xcomp & \[ pred & `{\rm kiss}\q<subj,obj\q>'\\ subj & \!{b}{}\\ obj & \[ pred & `{\rm Paul}'\]\] \] \end{avm} \nodecurve[r]{a}[r]{b}{2in}
この例では\nodecurveでaという名前を付けられたノード(OBJの値のAVM)とbという名前を付けられたノード(空となっているXCOMPのSUBJの値)とを結んでいます.\nodecurveはつなぎ合わせる2つのノードの名前の前にそれぞれどの位置を線でつなぐかの指定ができます.この場合,どちらもノードの左側をつないでいるので[r](rightの略)と指定しています.そして,最後に線の長さを決めます.上の例では2in(ch)にしています.以下のような結果が得られます.
tree-dvipsはpostscriptで線を記述していますので,コンパイルの際はdvipdfm(x)のようにdviファイルから直接pdfを生成せずに,dvipsでpsファイルを作って,ps2pdfなどでpdfにする(もしくはbxdpx-pstricks.styを使う)必要があるので注意してください.