Ausrichten mathematischer Klammern in AVMs

Ausrichten mathematischer Klammern in AVMs

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:

Bildbeschreibung hier eingeben

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:

Bildbeschreibung hier eingeben

Das Problem besteht darin, dass zwischen den beiden Klammern ganz rechts zu viel Platz ist.

Antwort1

\delimiterfactor=1000Sie möchten wahrscheinlich und festlegen \delimitershortfall=0pt, um sicherzustellen, dass die Trennzeichen immer das Array abdecken.

Ich habe den Code für geändert, \msum Code-Duplikationen zu vermeiden. Außerdem ist es nicht notwendig (und mittlerweile auch falsch), das Argument mit zu \msbeenden \\.

\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 \msObjekten (ich habe eines nur zur Veranschaulichung stehen gelassen). Die Lösung wäre \msin diesem Fall, nicht zu verwenden, aber für die Klammern sollte \textup[und \textup]verwendet werden.

Bildbeschreibung hier eingeben

verwandte Informationen