强制 \bmatrix 采用方形形式:2020 年有没有规范的方法?

强制 \bmatrix 采用方形形式:2020 年有没有规范的方法?

由于方阵内容不对称,因此通常将其渲染为矩形。我想使用一些规范解决方案自动强制这些矩阵为方阵,即

  1. 得到的矩阵应该是好的用于大多数目的;
  2. 是自动的(当给出平方的附加可选参数时);
  3. 理想情况下,不需要我自己定义新环境(不是强制性的(英文):
  4. 有各种\xmatrix命令的选项,例如,x = b、B、p,或者具有与 \xmatrix 类似的语法。

以下是不符合预期结果的示例图\bmatrix

在此处输入图片描述

水平尺寸明显大于垂直尺寸。

有一个较旧的问题2014 年起,其答案不符合上述某些标准,定义新的环境,可能不适用于各种类型的\xmatrix或通过手动的本质上。(接受的答案中的 MWE 也无法编译)。

如果需要,我愿意导入任何包。该解决方案也应该适用于 Beamer。

  • 问题:在撰写本文时是否能满足上述标准(1-4)?

这是一个可供尝试的 MWE,它也用于生成示例图像。

\documentclass{beamer}

\begin{document}

    \begin{frame}{Example}
        %Should look like square matrix but does not.
        $$
        \begin{bmatrix}
            a_{0, 0} & \dots & a_{0, n - 1} \\ 
            \vdots & \ddots & \vdots \\ 
            a_{n - 1, 0} & \dots & a_{n - 1, n - 1}
        \end{bmatrix}
        $$
    \end{frame}
       
\end{document}

答案1

amsmath矩阵环境使用数组前导, *{..}c您可以更改carraywc{3em},以便所有列的宽度相同,然后调整\arraystretch以垂直拉伸矩阵以匹配。这个在日志中报告为

(146.29016pt,131.40112pt)

因此它不完全是正方形,但如果我强制将数组设置得更高,那么从视觉上看,括号看起来会很长。

在此处输入图片描述

\documentclass{beamer}
\usepackage{array}

\makeatletter
\def\env@matrix{\hskip -\arraycolsep
  \let\@ifnextchar\new@ifnextchar
  \def\arraystretch{3.2}%
  \array{*\c@MaxMatrixCols{wc{3.4em}}}}
\makeatother

\begin{document}

    \begin{frame}{Example}
        %Should look like square matrix but does not.
        \[
        \sbox0{$\begin{bmatrix}
            a_{0, 0} & \dots & a_{0, n - 1} \\ 
            \vdots & \ddots & \vdots \\ 
            a_{n - 1, 0} & \dots & a_{n - 1, n - 1}
        \end{bmatrix}$}
\typeout{(\the\wd0,\the\dimexpr\ht0+\dp0)}
\box0
        \]
    \end{frame}
       
\end{document}

公式中的使用\sbox只是为了测试用,在实际文件中不需要。

答案2

tabularray

\documentclass[draft]{beamer}
\usepackage{tabularray}
\UseTblrLibrary{amsmath}
\begin{document}
\begin{frame}{Example}
    \[
    \begin{+bmatrix}[ 
        columns={3.5em, c, colsep=2pt},
        rows={3.5em, m, rowsep=2pt}
        ]
        a_{0, 0} & \dots & a_{0, n - 1} \\ 
        \vdots & \ddots & \vdots \\ 
        a_{n - 1, 0} & \dots & a_{n - 1, n - 1}
    \end{+bmatrix}
    \]
\end{frame}
\begin{frame}{And the same example with rules just to show the cells are squares}
    \[
    \begin{+bmatrix}[ 
        columns={3.5em, c, colsep=2pt},
        rows={3.5em, m, rowsep=2pt}, 
        vlines, 
        hlines
        ]
        a_{0, 0} & \dots & a_{0, n - 1} \\ 
        \vdots & \ddots & \vdots \\ 
        a_{n - 1, 0} & \dots & a_{n - 1, n - 1}
    \end{+bmatrix}
    \]
\end{frame}
\end{document}

在此处输入图片描述

相关内容