我制作了以下矩阵:
\newcommand{\mtx}[2]{\begin{#1matrix}#2\end{#1matrix}}
\newcommand{\mtxR}[2]{\begin{#1matrix*}[r]#2\end{#1matrix*}}
\begin{equation*}
A=\mtx{}{\mtx{}{e_1&e_2&e_3&e_4&e_5&e_6&e_7&e_8}&\\\mtxR{b}{1&&1&&&&&\\-1&1&&1&&&&\\&-1&&&1&1&&\\&&&&-1&-1&&1\\&&&-1&&&1&-1\\&&-1&&&&-1&}&\mtx{}{v_1\\v_2\\v_3\\v_4\\v_5\\v_6}}
\end{equation*}
有没有办法将顶行中的 e 与 bmatrix 中的数字对齐,并且将最右边一列中的 v 与 bmatrix 中的数字对齐?
答案1
像这样?
\documentclass{article}
\usepackage{blkarray}
\begin{document}
\[
A=\begin{blockarray}{cccccc}
e_1 & e_2 & e_3 & e_4 & e_5 \\
\begin{block}{[ccccc]l}
1 & -1 & 1 & 1 & 1 & v_1 \\
& 1 & & & 1 & v_2 \\
& & 1 & & 1 & v_3 \\
& & & 1 & 1 & v_4 \\
& & & & 1 & v_5 \\
\end{block}
\end{blockarray}
\]
\end{document}
如果您希望1
和-1
条目对齐,以便数字正好位于彼此下方,则可以尝试使用 定义内部block
。[rrrrr]l
但您可能会认为(例如)右侧列太靠近右括号。
或者你可以“作弊”将\smash
减号设置在零宽度框中。我个人并不介意-1
条目稍微向右突出一点,因为我认为这可能会让它们更容易阅读。
或者您可以nicematrix
按照其他答案所示使用。
答案2
您可以使用nicematrix
。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\[
\begin{bNiceArray}{*{8}{R}}[
first-row,
last-col,
]
e_1 & e_2 & e_3 & e_4 & e_5 & e_6 & e_7 & e_8 & \\
1 & & 1 & & & & & & v_1 \\
-1 & 1 & & 1 & & & & & v_2 \\
& -1 & & & 1 & 1 & & & v_3 \\
& & & & -1 & -1 & & 1 & v_4 \\
& & & -1 & & & 1 & -1 & v_5 \\
& & -1 & & & & -1 & & v_6 \\
\end{bNiceArray}
\]
\end{document}
答案3
这里有两种方法:withblkarray
和 with bigdelim
:
\documentclass{article}
\usepackage{array, blkarray}
\usepackage{bigdelim}
\begin{document}
\[ A = \begin{blockarray}{*{8}{r}l}
e_1 & e_2 & e_3 & e_4 & e_5 & e_6 & e-7 & e_8 & \\
\begin{block}{[*{8}{r}]@{\quad}l}
1 & & 1 & & & & & & v_1 \\
-1 & 1 & &1 & & & & & v_2 \\
& -1 & & & 1 & 1 & & & v_3 \\
& & & & -1 & -1 & & 1 & v_4 \\
& & & -1 & & & 1 & -1 & v_5 \\
& & -1 & & & & -1 & &v_6 \\
\end{block}
\end{blockarray}
\]
\[ A = \begin{array}{r@{\,}*{8}{r}@{\,}l@{}l}
& e_1 & e_2 & e_3 & e_4 & e_5 & e_6 & e-7 & e_8 & \\
\ldelim[{6}{*} & 1 & & 1 & & & & & & \rdelim]{6}{*} & v_1 \\
& -1 & 1 & &1 & & & & & & v_2 \\
& & -1 & & & 1 & 1 & & & & v_3 \\
& & & & & -1 & -1 & & 1 & & v_4 \\
& & & & -1 & & & 1 & -1 & & v_5 \\
& & & -1 & & & & -1 & & & v_6
\end{array}
\]
\end{document}
答案4
您可以使用nicematrix
和它的好键,如code-for-first-row
和code-for-last-col
。这样您就不必输入等e_1
,也不必输入等。这还允许您将列或行的条目居中。e_2
v_1
v_2
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\[\pgfmathsetmacro{\myw}{width("$-1$")}
\begin{bNiceArray}{*{8}{R}}[
first-row,
last-col,
code-for-first-row = \makebox[\myw pt][c]{$e_{\arabic{jCol}}$},
code-for-last-col = v_{\arabic{iRow}}
]
& & & & & & & & \\
1 & & 1 & & & & & & \\
-1 & 1 & & 1 & & & & & \\
& -1 & & & 1 & 1 & & & \\
& & & & -1 & -1 & & 1 & \\
& & & -1 & & & 1 & -1 & \\
& & -1 & & & & -1 & & \\
\end{bNiceArray}
\]
\end{document}