我需要创建具有正确维度的块矩阵。矩阵的块具有不同的维度。
以下是 MWE:
\documentclass{article}
\usepackage{easybmat}
\usepackage{bm}
\newcommand{\smsub}[1]{\scriptscriptstyle\mathrm{#1}}
\begin{document}
\begin{equation}
\hat{\bm{P}}=
\left(
\begin{BMAT}(b){c}{ccc.c}
P_{\smsub{1}} \\
\vdots \\
P_{\smsub{K-1}}\\
P_{\smsub{K}}
\end{BMAT}
\right)=
\left(
\begin{BMAT}(b){c}{ccc.c}
\vphantom{\vdots} \\
\bm{\breve{P}} \\
\vphantom{\vdots} \\
P_{\smsub{K}}
\end{BMAT}
\right)
\begin{BMAT}(@)[1pt,10pt,0pt]{l}{cc}
\left. \vphantom{\rule{0mm}{30pt}}\right\rbrace{\scriptstyle (K-1)\times 1}\\
\left. \vphantom{\rule{0mm}{10pt}}\right\rbrace{\scriptstyle \; 1 \times 1}\\
\end{BMAT}
\end{equation}
\end{document}
问题:
我不知道如何创建厚度相同的支架。如您所见,(k-1)x1 尺寸的上部支架比下部块的支架更大且更厚。理想情况下,它们应该具有相同的厚度,并且应该很薄。
第三个 BMAT 中添加的括号与其他两个 BMAT 的对齐是手动完成的。有没有办法自动对齐括号?
我并不一定要使用 easybmat,因此如果有人能提出更好的解决方案,我也会接受。
答案1
重新修订答案,采纳了芭芭拉评论中的深刻建议。在这里,与之前的答案一样,我使用 Knuth 的\underbrace
旋转来制作垂直支架。但是,我采纳了芭芭拉的建议,使短支架看起来更好,\underbrace
方法是先将其宽度增加一倍,然后将其挤压成两半。最终效果是使支架的点在垂直方向上更加压缩。
控制参数 控制\hsqz
括号的水平压缩,以及\sqz
和它的倒数\sqzinverse
控制括号点的垂直压缩。和前面一样,bls
经验上与行距匹配BMAT
,因此 的第一个参数\scalebrace
可以作为行数的整数给出,而不是长度。
\documentclass{article}
\usepackage{easybmat}
\usepackage{bm}
\usepackage{graphicx}
\def\sqz{.5}
\def\sqzinverse{2}
\def\hsqz{.7}
\newcommand{\smsub}[1]{\scriptscriptstyle\mathrm{#1}}
\newlength\bls
\bls=1.5\baselineskip\relax
\newlength\tmplength
\def\scalebrace#1#2{\tmplength=#1\bls\relax%
\scalebox{\hsqz}[\sqz]{\rotatebox{90}{$\underbrace{\hspace{\sqzinverse\tmplength}}$}}%
\raisebox{\dimexpr+.5\tmplength+.5\dp\strutbox-.5\ht\strutbox}{$\scriptstyle \; #2$}}
\begin{document}
\begin{equation}
\hat{\bm{P}}=
\left(
\begin{BMAT}(b){c}{ccc.c}
P_{\smsub{1}} \\
\vdots \\
P_{\smsub{K-1}}\\
P_{\smsub{K}}
\end{BMAT}
\right)=
\left(
\begin{BMAT}(b){c}{ccc.c}
\vphantom{\vdots} \\
\bm{\breve{P}} \\
\vphantom{\vdots} \\
P_{\smsub{K}}
\end{BMAT}
\right)
\begin{BMAT}(@)[1pt,10pt,0pt]{l}{cc}
\scalebrace{3}{(K-1)\times 1}\\
\scalebrace{1}{1 \times 1}\\
\end{BMAT}
\end{equation}
\end{document}
修改后的答案(scalerel
用旋转的 替换拉长的括号\underbrace
)。用户语法将与原始答案相同(例如\scalebrace{1}{1 \times 1}
),但生成的括号看起来会有所不同(并且更好)。
\documentclass{article}
\usepackage{easybmat}
\usepackage{bm}
\usepackage{graphicx}
\newcommand{\smsub}[1]{\scriptscriptstyle\mathrm{#1}}
\newlength\bls
\bls=1.5\baselineskip\relax
\newlength\tmplength
\def\scalebrace#1#2{\tmplength=#1\bls\relax%
\scalebox{.7}[1]{\rotatebox{90}{$\underbrace{\hspace{\tmplength}}$}}%
\raisebox{\dimexpr+.5\tmplength+.5\dp\strutbox-.5\ht\strutbox}{$\scriptstyle \; #2$}}
\begin{document}
\begin{equation}
\hat{\bm{P}}=
\left(
\begin{BMAT}(b){c}{ccc.c}
P_{\smsub{1}} \\
\vdots \\
P_{\smsub{K-1}}\\
P_{\smsub{K}}
\end{BMAT}
\right)=
\left(
\begin{BMAT}(b){c}{ccc.c}
\vphantom{\vdots} \\
\bm{\breve{P}} \\
\vphantom{\vdots} \\
P_{\smsub{K}}
\end{BMAT}
\right)
\begin{BMAT}(@)[1pt,10pt,0pt]{l}{cc}
\scalebrace{3}{(K-1)\times 1}\\
\scalebrace{1}{1 \times 1}\\
\end{BMAT}
\end{equation}
\end{document}
括号的宽度由\scalebox
定义中的参数 控制\scalebrace
,当前设置为.7
。将其更改为1
将只产生一个简单的旋转\underbrace
。
原始答案:
这是一种方法。该scalerel
包允许限制宽度的缩放。因此,当我将右上括号缩放到 3 行高,将右下括号缩放到 1 行高时,我将每个括号的缩放宽度限制为 1.2ex。在这种情况下,我使用语法
\scaleleftright[1.2ex]{.}{phantom rule}{\}}
,
其中我使用新定义的幻影规则创建了\irule
以整数行数作为参数的规则。
我把所有事情都包裹在一个宏里
\scalebrace{rows}{aftertext}
仅供参考:矩阵内的“行高”是根据经验确定的1.5\baselineskip
,设置为长度\bls
。
\documentclass{article}
\usepackage{easybmat}
\usepackage{bm}
\usepackage{scalerel}
\newcommand{\smsub}[1]{\scriptscriptstyle\mathrm{#1}}
\newlength\bls
\bls=1.5\baselineskip\relax
\newlength\tmplength
\def\irule#1{\tmplength=#1\bls\relax%
\rule[-.5\tmplength-.5\dp\strutbox+.5\ht\strutbox]{0ex}{\tmplength}}
\def\scalebrace#1#2{%
\scaleleftright[1.2ex]{.}{\irule{#1}}{\}}{\scriptstyle \; #2}}
\begin{document}
\begin{equation}
\hat{\bm{P}}=
\left(
\begin{BMAT}(b){c}{ccc.c}
P_{\smsub{1}} \\
\vdots \\
P_{\smsub{K-1}}\\
P_{\smsub{K}}
\end{BMAT}
\right)=
\left(
\begin{BMAT}(b){c}{ccc.c}
\vphantom{\vdots} \\
\bm{\breve{P}} \\
\vphantom{\vdots} \\
P_{\smsub{K}}
\end{BMAT}
\right)
\begin{BMAT}(@)[1pt,10pt,0pt]{l}{cc}
\scalebrace{3}{(K-1)\times 1}\\
\scalebrace{1}{1 \times 1}\\
\end{BMAT}
\end{equation}
\end{document}