如何在 blkarray 包中的 blockarray 之前垂直对齐文本?

如何在 blkarray 包中的 blockarray 之前垂直对齐文本?

我必须在矩阵周围标记行和列索引。我知道这blkarray会有所帮助,所以我这样写:

\documentclass[a4paper,12pt]{article}

\usepackage{amsmath}
\usepackage{blkarray}% http://ctan.org/pkg/blkarray
\newcommand{\matindex}[1]{\mbox{#1}}% Matrix index

\begin{document}

pmatrix way:
\[
J(i,j,\theta)=\begin{pmatrix}
1 & \cdots & 0 & \cdots & 0 & \cdots & 0 \\
\vdots & \ddots & \vdots & & \vdots & & \vdots \\
0 & \cdots & c & \cdots & -s & \cdots & 0 \\
\vdots & & \vdots & \ddots & \vdots & & \vdots \\
0 & \cdots & s & \cdots & c & \cdots & 0 \\
\vdots & & \vdots & & \vdots & \ddots & \vdots \\
0 & \cdots & 0 & \cdots & 0 & \cdots & 1 
\end{pmatrix}
\]

blkarray way:
\[
  J(i,j,\theta)=\begin{blockarray}{cccccccc}
    \begin{block}{(ccccccc)c}
        1 & \cdots & 0 & \cdots & 0 & \cdots & 0 \\
        \vdots & \ddots & \vdots & & \vdots & & \vdots \\
        0 & \cdots & c & \cdots & -s & \cdots & 0 & \matindex{$i$} \\
        \vdots & & \vdots & \ddots & \vdots & & \vdots \\
        0 & \cdots & s & \cdots & c & \cdots & 0 & \matindex{$j$} \\
        \vdots & & \vdots & & \vdots & \ddots & \vdots \\
        0 & \cdots & 0 & \cdots & 0 & \cdots & 1 \\
    \end{block}
    & & \matindex{$i$} & & \matindex{$j$} & \\
  \end{blockarray}
\]

Why $J(i,j,\theta)$ isn't vertical aligned int blkarray way?
\end{document}

结果如下: 在此处输入图片描述 我想知道为什么blkarray 方式没有垂直对齐。

以及如何像 pmatrix 方式那样垂直对齐它。

谢谢。

答案1

问题在于块数组相对于其整个大小(包括下面的索引)垂直居中。

在这种情况下,最简单的方法是将整个内容放入 中blkarray

\documentclass[a4paper,12pt]{article}

\usepackage{amsmath}
\usepackage{blkarray}% http://ctan.org/pkg/blkarray

\begin{document}

\[
\begin{blockarray}{r@{}cccccccc}
\begin{block}{r(ccccccc)c}
                 & 1 & \cdots & 0 & \cdots & 0 & \cdots & 0 \\
                 & \vdots & \ddots & \vdots & & \vdots & & \vdots \\
                 & 0 & \cdots & c & \cdots & -s & \cdots & 0 & i \\
J(i,j,\theta)={} & \vdots & & \vdots & \ddots & \vdots & & \vdots \\
                 & 0 & \cdots & s & \cdots & c & \cdots & 0 & j \\
                 & \vdots & & \vdots & & \vdots & \ddots & \vdots \\
                 & 0 & \cdots & 0 & \cdots & 0 & \cdots & 1 \\
\end{block}
                 & & & i & & j & \\
\end{blockarray}
\]

\end{document}

在此处输入图片描述

答案2

您可以使用 和 来获得此结果pmatrixpstricks将某些元素定义为节点,并将标签附加到这些节点,或者使用blockarray, stackenginemakecell\raisebox命令:

\documentclass[a4paper,12pt]{article}

\usepackage{mathtools}
\usepackage{blkarray, makecell,  stackengine}
\usepackage{pst-node, auto-pst-pdf} %

\begin{document}

\verb|pmatrix way + pstricks way:|\bigskip

\[
 \begin{postscript}
 J(i,j,\theta)=%
 \begin{pmatrix}
1 & \cdots & 0 & \cdots & 0 & \cdots & 0 \\
\vdots & \ddots & \vdots & & \vdots & & \vdots\\
0 & \cdots & c & \cdots & -s & \cdots &\rnode{rowi}{0}\\%
\vdots & & \vdots & \ddots & \vdots & & \vdots \\
0 & \cdots & s & \cdots & c & \cdots & \rnode{rowj}{0}\\%
\vdots & & \vdots & & \vdots & \ddots & \vdots \\
0 & \cdots & \rnode{coli}{0} & \cdots & \rnode{colj}{0} & \cdots & 1
\end{pmatrix}
 \psset{labelsep=1.2em}
\nput{0}{rowi}{i}\nput{0}{rowj}{j}
 \psset{labelsep=1.2ex}
\nput{-90}{coli}{i}\nput{-90}{colj}{j}
\end{postscript}
\]

\verb|blkarray + makecell or stackengine way:  |
\[
  J(i,j,\theta)= \raisebox{-0.3\baselineskip}{$ \begin{blockarray}{(*{7}{c})c}
        1 & \cdots & 0 & \cdots & 0 & \cdots & 0 \\
        \vdots & \ddots & \vdots & & \vdots & & \vdots \\
        0 & \cdots & c & \cdots & -s & \cdots & 0 & i\\ 
        \vdots & & \vdots & \ddots & \vdots & & \vdots \\
        0 & \cdots & s & \cdots & c & \cdots & 0 & j \\
        \vdots & & \vdots & & \vdots & \ddots & \vdots \\
        0 & \cdots & \smash{\stackunder[1.2ex]{0}{$ i $}} & \cdots &\smash{\makecell[tc]{0\\j}} & \cdots & 1
  \end{blockarray} $} 
\]%

 \end{document} 

在此处输入图片描述

答案3

使用{pNiceMatrix}nicematrix您将直接得到预期的结果。

\documentclass[a4paper,12pt]{article}

\usepackage{nicematrix}

\begin{document}

\[
J(i,j,\theta)=\begin{pNiceMatrix}[last-row=8,last-col=8]
1 & \cdots & 0 & \cdots & 0 & \cdots & 0 \\
\vdots & \ddots & \vdots & & \vdots & & \vdots \\
0 & \cdots & c & \cdots & -s & \cdots & 0 & i \\
\vdots & & \vdots & \ddots & \vdots & & \vdots \\
0 & \cdots & s & \cdots & c & \cdots & 0 & j \\
\vdots & & \vdots & & \vdots & \ddots & \vdots \\
0 & \cdots & 0 & \cdots & 0 & \cdots & 1 \\
  & & i & & j & \\
\end{pNiceMatrix}
\]

\end{document}

上述代码的输出

相关内容