![我怎样才能让 LaTeX 忽略底部支撑的高度?](https://linux22.com/image/254647/%E6%88%91%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E8%AE%A9%20LaTeX%20%E5%BF%BD%E7%95%A5%E5%BA%95%E9%83%A8%E6%94%AF%E6%92%91%E7%9A%84%E9%AB%98%E5%BA%A6%EF%BC%9F.png)
我创建了这个矩阵:
使用此 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}
您可以看到,底部支撑使第三个块看起来比没有第二个块的底部支撑时要低一点。但我不希望第三个块看起来更低。
我怎样才能让 LaTeX 忽略第二个下支撑的高度?
如果我能制作斜撑并移除块,那就更好了。但我想那太复杂了。
答案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
。一个简单的工具是\raisebox
在其第一和第二个选修的参数允许为生成的盒子给出明确的高度和深度。
两个复杂因素:
- 这内数组垂直居中,因此
\underbrace
构造的高度和深度很模糊。 - 如果其中一条线的深度为零,则会在外部数组中插入一些额外的垂直空间,因此必须再次降低整个盒装结构。
这导致了这个“解决方案”:
\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]
。