プリアンブルで以下のように書く。
\makeatletter使い方
\def\jcat#1{\vbox{\hbox{$_\textrm{\rm\scriptsize\mathstrut#1}$}\hrule height 0pt}}
\def\jlist#1{\vbox{\@for\i:=#1\do{\hbox{$\mathstrut$\textsc{\i}}}\hrule height 0pt}}
\def\jarg#1#2{$\left[\vcenter{\hbox{\jcat{#1} \jlist{#2}}}\right]$}
\def\jfunc#1#2{#1$\left(\vcenter{\hbox{#2}}\right)$}
\makeatother
\jarg{Object}{car,red}結果
\jfunc{have}{John, car}
\jarg{Event}{\jfunc{have}{\jarg{Object}{John},\jarg{Object}{car,\jarg{Property}{red}}}}
ポイント
- かっこは数式モードの\left[や\right]などで書く。
- かっこのすぐ内側には\vcenterを置く。
- ( )の内側は\vboxでもいいかも。
- \vcenterや\vboxの内側には\hboxと\hruleのみ置く。
- vbox系は内部のhboxの幅に応じて自動的に横幅が決まる。
- hboxを置かずに直接文字などを置くと横幅が行幅いっぱいに広がる。
- \vbox内の最後には高さ0の\hruleを置く。
- ベースラインをそろえるため。
- 高さ0にするのは不可視にするため。
- 文字列を置く可能性のある場所には$\mathstrut$を置く。
- 行高を確保してレイアウト崩れを防ぐ。