
Ich möchte AVMs setzen. Ein Kollege hat den folgenden Code geschrieben und er funktioniert ganz gut. Allerdings gibt es ein kleines Problem mit den Klammern. Einige von ihnen sind nicht richtig ausgerichtet. Beispielsweise ist die zweite schließende Klammer zu tief:
Dies ist der Code. \ms prüft, ob ein Typ (kursiv gesetzt) als optionales Argument angegeben ist oder nicht.
\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}
Bearbeiten:
In Fällen wie diesem scheint es ein Problem zu geben:
\ms{
synsem$|$loc$|$cat \ms{ head & \ms[verb]{vform & fin
}\\
subcat & \ldots\\
}
}
Die Ausgabe sieht folgendermaßen aus:
Das Problem besteht darin, dass zwischen den beiden Klammern ganz rechts zu viel Platz ist.
Antwort1
\delimiterfactor=1000
Sie möchten wahrscheinlich und festlegen \delimitershortfall=0pt
, um sicherzustellen, dass die Trennzeichen immer das Array abdecken.
Ich habe den Code für geändert, \ms
um Code-Duplikationen zu vermeiden. Außerdem ist es nicht notwendig (und mittlerweile auch falsch), das Argument mit zu \ms
beenden \\
.
\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}
Es gibt ein Problem mit einzeiligen \ms
Objekten (ich habe eines nur zur Veranschaulichung stehen gelassen). Die Lösung wäre \ms
in diesem Fall, nicht zu verwenden, aber für die Klammern sollte \textup[
und \textup]
verwendet werden.