
Я хочу набрать AVM. Коллега написал следующий код, и он работает довольно хорошо. Однако есть небольшая проблема со скобками. Некоторые из них не выровнены должным образом. Например, вторая закрывающая скобка слишком низкая:
Это код. \ms проверяет, указан ли тип (выделен курсивом) в качестве необязательного аргумента или нет.
\documentclass{article}
\usepackage{array}
\setlength{\extrarowheight}{1pt}
\def\ms{\futurelet\msLook\msdecide}
\def\msdecide{\ifx\msLook[\let\next=\xxtms%
\else\let\next=\xxms\fi\next}
%
\def\xxtms[#1]#2{%
\mbox{%
\tabcolsep0pt\arraycolsep0pt%
$%
\left[%
\begin{tabular}{>{\upshape\scshape}l@{\hspace{5pt}}>{\normalfont\itshape}l}%
#2%
\multicolumn{2}{>{\normalfont\itshape}l}{#1}%
\end{tabular}%
\right]%
$%
}%
\vspace{1mm}%
}
\def\xxms#1{%
\mbox{%
\tabcolsep0pt\arraycolsep0pt%
$%
\left[%
\begin{tabular}{>{\upshape\scshape}l@{\hspace{5pt}}>{\normalfont\itshape}l}%
#1%
\end{tabular}%
\rule{0mm}{5mm}%
\right]%
$%
}%
\vspace{1mm}%
}
\begin{document}
\ms[word]{
syntax-semantics & \ldots \ms[local]{ category & \ms[category]{ head & \ms[noun]{ case & 1\\
}\\[6mm]
subcat & Det[\textsc{case}~1] \\
} \\[6mm]
content & \ldots \ms[grammatik]{ inst & X \\
}\\
}\\
}
\end{document}
Редактировать:
Похоже, в таких случаях возникает проблема:
\ms{
synsem$|$loc$|$cat \ms{ head & \ms[verb]{vform & fin
}\\
subcat & \ldots\\
}
}
Вывод выглядит так:
Проблема в том, что между двумя крайними правыми скобками слишком много места.
решение1
Вероятно, вы захотите установить \delimiterfactor=1000
и \delimitershortfall=0pt
, чтобы гарантировать, что разделители всегда будут охватывать массив.
Я изменил код для \ms
того, чтобы избежать дублирования кода; также не обязательно (и неправильно, на данный момент) заканчивать аргумент \ms
на \\
.
\documentclass{article}
\usepackage{array}
\setlength{\extrarowheight}{1pt}
\makeatletter
\newcommand{\ms}[2][]{%
\mbox{%
\delimiterfactor=1000 \delimitershortfall=0pt
\tabcolsep=0pt
$\left[%
\begin{tabular}{>{\upshape\scshape}l@{\hspace{5pt}}>{\normalfont\itshape}l}
#2%
\if\relax\detokenize{#1}\relax\else
\\ \multicolumn{2}{>{\normalfont\itshape}l}{#1}%
\fi
\end{tabular}%
\right]$%
}%
\vspace{1mm}%
}
\begin{document}
\ms[word]{
syntax-semantics & \ldots
\ms[local]{
category &
\ms[category]{
head & \ms[noun]{ case & 1 }
\\[6mm]
subcat & Det \ms{ case & 1 }
}
\\[6mm]
content & \ldots \ms[grammatik]{ inst & X }
}
}
\end{document}
Есть проблема с \ms
объектами одной строки (я оставил один только для того, чтобы показать). Решением было бы не использовать \ms
в этом случае, но \textup[
и \textup]
следует использовать для скобок.