我如何修改下面的代码,使文本以1
s 的形式位于矩阵列的中心,而不是与列的左边缘对齐。
以下是 MWE 代码和输出。
\documentclass{article}
\usepackage{amsmath}
% command for overbrace in matrix
\newcommand\bovermat[2]{%
\makebox[0pt][l]{$\smash{\overbrace{\phantom{%
\begin{matrix}#2\end{matrix}}}^{#1}}$}#2}
\begin{document}
\begin{equation}
\left[ {\begin{array}{ccccccccc}
0 & \cdots & 0
& \bovermat{\text{columns }q_1,\ldots,q_\ell}{1 & \cdots & 1}
& 0 & \cdots & 0\\
0 & \cdots & 0 & 1 & \cdots & 1 & 0 & \cdots & 0\\
\vdots & & \vdots & \vdots & & \vdots & & & \vdots \\
0 & \cdots & 0 & 1 & \cdots & 1 & 0 & \cdots & 0\\
\end{array} } \right]
\end{equation}
\end{document}
答案1
您也可以使用blkarray
,它具有更大的灵活性。
\documentclass{article}
\usepackage{blkarray}
\usepackage{amsmath}
\begin{document}
\[
\begin{blockarray}{ccccccccc}
& & & & \makebox[0pt]{$\overbrace{\rule{4em}{0pt}}^{\text{columns }q_1,\ldots,q_\ell}$} & & & & \\
\begin{block}{[ccccccccc]}
0 & \cdots & 0 & 1 & \cdots & 1 & 0 & \cdots & 0 \\
0 & \cdots & 0 & 1 & \cdots & 1 & 0 & \cdots & 0 \\
\vdots & & \vdots & \vdots & & \vdots & & & \vdots \\
0 & \cdots & 0 & 1 & \cdots & 1 & 0 & \cdots & 0 \\
\end{block}
\end{blockarray}
\]
\end{document}
答案2
正如 Phelype Oleinik 在评论部分所建议的那样,解决方案是删除&
之前的\bovermat
并将其放入 的第二个参数中\bovermat
。
\documentclass{article}
\usepackage{amsmath}
% command for overbrace in matrix
\newcommand\bovermat[2]{%
\makebox[0pt][l]{$\smash{\overbrace{\phantom{%
\begin{matrix}#2\end{matrix}}}^{#1}}$}#2}
\begin{document}
\begin{equation} \left[ {\begin{array}{ccccccccc}
0 & \cdots & 0
\bovermat{ \text{columns }q_1,\ldots,q_\ell}{& 1 & \cdots & 1}
& 0 & \cdots & 0\\
0 & \cdots & 0 & 1 & \cdots & 1 & 0 & \cdots & 0\\
\vdots & & \vdots & \vdots & & \vdots & & & \vdots \\
0 & \cdots & 0 & 1 & \cdots & 1 & 0 & \cdots & 0\\
\end{array} } \right]
\end{equation}
\end{document}