由于方阵内容不对称,因此通常将其渲染为矩形。我想使用一些规范解决方案自动强制这些矩阵为方阵,即
- 得到的矩阵应该是好的用于大多数目的;
- 是自动的(当给出平方的附加可选参数时);
- 理想情况下,不需要我自己定义新环境(不是强制性的(英文):
- 有各种
\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
您可以更改c
为array
包wc{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}