Wie kann ich LaTeX dazu bringen, die Höhe der Unterstrebe zu ignorieren?

Wie kann ich LaTeX dazu bringen, die Höhe der Unterstrebe zu ignorieren?

Ich habe diese Matrix erstellt:

Bildbeschreibung hier eingeben

Mit diesem LaTeX-Code:

\documentclass{article}
\usepackage[pdftex,active,tightpage]{preview}
\setlength\PreviewBorder{2mm}

\usepackage{amsmath,array}
\renewcommand\arraycolsep{4pt} % default value: 6pt


\begin{document}
\begin{preview}
\begin{equation*}
\left( \,
\begin{array}{r@{}r@{}r r r}  % @{} is used twice to suppress intercolumn whitespace
  \overbrace{
    \boxed{
      \begin{array}{rrr}    % First block (1)
        1 &        &   \\
          & \ddots &   \\
          &        & 1 \\
      \end{array}
    }
  }^{r_+(s)-mal} \\
  & 
  \underbrace{
    \boxed{
      \begin{array}{rrr}    % Second block (-1)
        -1 &        &   \\
           & \ddots &   \\
           &        & -1\\
      \end{array}
    }
  }_{r_{-}(s)-mal} \\
  & & 
  \underbrace{
    \boxed{
      \begin{array}{rrr}    % Third block
        0  &        &  \\
           & \ddots &  \\
           &        & 0\\
      \end{array}
    }
  }_{r_0(s)-mal} \\
\end{array}\,\right)
\end{equation*}
\end{preview}
\end{document}

Sie können sehen, dass die Unterstrebe dazu führt, dass der dritte Block etwas niedriger erscheint, als er ohne die Unterstrebe des zweiten Blocks erscheinen würde. Aber ich möchte nicht, dass der dritte Block niedriger erscheint.

Wie kann ich LaTeX dazu bringen, die Höhe der zweiten Unterstrebe zu ignorieren?

Noch besser wäre es, wenn ich diagonale Streben machen und die Blöcke entfernen könnte. Aber ich schätze, das ist kompliziert.

Antwort1

Eine Lösung mit TikZdiagonalen Streben:

\documentclass{article}
\usepackage{amsmath,array}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}

\setlength\arraycolsep{4pt} % default value: 6pt

\newcommand\tikzmark[1]{%
  \tikz[overlay,remember picture,baseline] \coordinate [anchor=base] (#1);}

\newcommand\DrawBrace[3]{%
  \draw [decorate,decoration={brace,amplitude=2pt,mirror,raise=2pt}]
    (#1) -- (#2) node [black,midway,sloped,yshift=-10pt] {\footnotesize$#3$};
}

\begin{document}

\begin{equation*}
\left(
\begin{array}{*{9}{c}}
\tikzmark{a}\phantom{-}1 \\
& \ddots & \\
& & \tikzmark{b}\phantom{-}1 \\
& & & \tikzmark{c}-1 \\
& & & & \ddots & \\
& & & & & \tikzmark{d}-1\\
& & & & & & \tikzmark{e}\phantom{-}0 \\
& & & & & & & \ddots & \\
& & & & & & & & \tikzmark{f}\phantom{-}0 \\
\end{array}
\right)
\end{equation*}

\begin{tikzpicture}[remember picture,overlay]
\DrawBrace{a}{b}{r_{+}(s)-mal}
\DrawBrace{c}{d}{r_{-}(s)-mal}
\DrawBrace{e}{f}{r_{0}(s)-mal}
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Keine wirklich elegante Lösung. Im Grunde genommen muss man nur den zusätzlichen vertikalen Raum, der durch den entsteht, auf Null setzen \underbrace. Ein einfaches Werkzeug hierfür ist \raiseboxwhich in seiner ersten und zweitenOptionalDas Argument ermöglicht die Angabe einer expliziten Höhe und Tiefe für die resultierende Box.

Zwei Komplikationen:

  1. DerinnereDas Array wird vertikal zentriert ausgegeben, daher sind Höhe und Tiefe der \underbraceKonstruktion unklar.
  2. Wenn eine der Zeilen die Tiefe Null hat, wird im äußeren Array etwas zusätzlicher vertikaler Raum eingefügt, sodass die gesamte Boxkonstruktion erneut abgesenkt werden muss.

Dies führt zu dieser "Lösung":

\begin{equation*}
\left( \,
\begin{array}{r@{}r@{}r r r}  % @{} is used twice to suppress intercolumn whitespace
  \overbrace{
    \boxed{
      \begin{array}{rrr}    % First block (1)
        1 &        &   \\
          & \ddots &   \\
          &        & 1 \\
      \end{array}
    }
  }^{r_+(s)-mal} \\
  & 
  \raisebox{-.5\height}[.5\height][.5\height]
  {%
    $\underbrace{
      \raisebox{\depth}
      {%
        $\boxed{
          \begin{array}{rrr}    % Second block (-1)
            -1 &        &   \\
            & \ddots &   \\
            &        & -1\\
          \end{array}
        }$%
      }%
    }_{r_{-}(s)-mal}$%
  }%
  \\
  & & 
  \underbrace{
    \boxed{
      \begin{array}{rrr}    % Third block
        0  &        &  \\
           & \ddots &  \\
           &        & 0\\
      \end{array}
    }
  }_{r_0(s)-mal} \\
\end{array}\,\right)
\end{equation*}

Beispiel

Antwort3

Es muss doch einen tikzmarkWeg geben. Aber ich habe jetzt keine Zeit. In der Zwischenzeit wäre ein hässlicher Hack, den Platz manuell zu verkleinern, \\[length]wie in

\documentclass{article}
\usepackage[pdftex,active,tightpage]{preview}
\setlength\PreviewBorder{2mm}

\usepackage{amsmath,array}
\renewcommand\arraycolsep{4pt} % default value: 6pt


\begin{document}
\begin{preview}
\begin{equation*}
\left( \,
\begin{array}{r@{}r@{}r r r}  % @{} is used twice to suppress intercolumn whitespace
  \overbrace{
    \boxed{
      \begin{array}{rrr}    % First block (1)
        1 &        &   \\
          & \ddots &   \\
          &        & 1 \\
      \end{array}
    }
  }^{r_+(s)-mal} \\
  &
  \underbrace{
    \boxed{
      \begin{array}{rrr}    % Second block (-1)
        -1 &        &   \\
           & \ddots &   \\
           &        & -1\\
      \end{array}
    }
  }_{r_{-}(s)-mal} \\[-17pt]         %%% <--Here
  & &
  \underbrace{
    \boxed{
      \begin{array}{rrr}    % Third block
        0  &        &  \\
           & \ddots &  \\
           &        & 0\\
      \end{array}
    }
  }_{r_0(s)-mal} \\
\end{array}\,\right)
\end{equation*}
\end{preview}
\end{document}

Bildbeschreibung hier eingeben

Um den entsprechenden Wert für abzuschätzen, ist allerdings ein wenig Augenmaß erforderlich \\[-17pt].

verwandte Informationen