次のようなマトリックスを作成しました:
この LaTeX コードでは:
\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}
アンダーブレースにより、3 番目のブロックが、2 番目のブロックのアンダーブレースがない場合よりも少し低く表示されることがわかります。しかし、3 番目のブロックを低く表示したくはありません。
LaTeX で 2 番目の下括弧の高さを無視するにはどうすればよいでしょうか?
斜めのブレースを作成してブロックを削除できれば、さらに良いでしょう。しかし、それは複雑だと思います。
答え1
TikZ
斜め括弧を使用したソリューション:
\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}
答え2
あまりエレガントな解決策ではありません。基本的に必要なのは、によって生成される追加の垂直スペースを\underbrace
ゼロに設定することだけです。これを行うための簡単なツールの1つは、\raisebox
最初の2番目のオプション引数を使用すると、結果のボックスの高さと深さを明示的に指定できます。
2つの合併症:
- の内側配列は垂直方向に中央揃えで出力されるため、構造の高さと深さは
\underbrace
不明瞭になります。 - いずれかの行の深さが 0 の場合、外側の配列に追加の垂直スペースが挿入されるため、ボックス構造全体を再度下げる必要があります。
これにより、次の「解決策」が導き出されます。
\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*}
答え3
方法があるはずです。でも今は時間がありません。一方、醜いハックとしては、次のようにしてtikzmark
手動でスペースを縮小するという方法があります。\\[length]
\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}
ただし、の適切な値を推定するには、目測ではほとんど必要ありません\\[-17pt]
。