我如何强制乳胶在数学模式下将方阵打印为宽度和高度相等的方阵?
我也阅读了 amsmath 文档,但没有发现任何有用的帮助。
例如对于这个矩阵:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
\left[
\begin{matrix}
\times & \times & \times &&&&&&&\\
\times & \times & & \times & \times & & & &\\
\times & & \times & & \times & & & & \\
& \times & & \times & & \times &&& \\
& \times & \times & & \times & \times & \times & &&\\
&&& \times & \times & \times && \times & \times\\
&&&& \times && \times & \times & \\
&&&&& \times & \times & \times & \times \\
&&&&& \times && \times & \times
\end{matrix}
\right]
\]
\end{document}
结果是:
那是一个长方形,不是正方形!
答案1
如果您愿意接受所有矩阵元素占据相同宽度的约束(尽管您的问题暗示这样的约束实际上可能是理想的要求),那么这个\sqmatrix[alignment]{content}
宏将自动执行“平方”。
元素间间距(默认 0pt)可以用 指定\setstacktabbedgap{length}
。
\documentclass{article}
\usepackage{tabstackengine}
\stackMath
\makeatletter
\newcommand\sqmatrix[2][c]{%
\fixTABwidth{T}%
\setbox0=\hbox{$\tabbedCenterstack{#2}$}%
\setstackgap{L}{\dimexpr\maxTAB@width+\tabbed@gap}%
\tabbedCenterstack[#1]{#2}%
}
\makeatother
\begin{document}
\def\mymatrix{\sqmatrix{
\XXX & \times & \times &&&&&&\\
\times & \times & & \times & \times & & & &\\
\times & & \times & & \times & & & & \\
& \times & & \times & & \times &&& \\
& \times & \times & & \times & \times & \times & &&\\
&&& \times & \times & \times && \times & \times\\
&&&& \times && \times & \times & \\
&&&&& \times & \times & \times & \times \\
&&&&& \times && \times & \times%
}}
\def\XXX{\times}
$\left[ \mymatrix \right]$%
\setstacktabbedgap{1ex}%HORIZONTAL GAP BETWEEN ENTRIES
$\left[ \mymatrix \right]$
\small\def\XXX{(x\times x)}
\setstacktabbedgap{0ex}%HORIZONTAL GAP BETWEEN ENTRIES
$\left[ \mymatrix \right]$
\end{document}
答案2
调整\arraystretch
为适当的因素:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\[
\renewcommand{\arraystretch}{1.3}
\begin{bmatrix}
\times & \times & \times & & & & & & \\
\times & \times & & \times & \times & & & & \\
\times & & \times & & \times & & & & \\
& \times & & \times & & \times & & & \\
& \times & \times & & \times & \times & \times & & \\
& & & \times & \times & \times & & \times & \times \\
& & & & \times & & \times & \times & \\
& & & & & \times & \times & \times & \times \\
& & & & & \times & & \times & \times
\end{bmatrix}
\]
\end{document}
答案3
您可以手动设置每行的高度,并在每行结束后的方括号中提供行高:
\times & \times & ... & \times\\[1ex]
要使所有行具有相同的高度,可以使用宏:
\documentclass{article}
\usepackage{amsmath}
\newcommand{\squarelineheight}{0.9ex}
\begin{document}
\[
\left[
\begin{matrix}
\times & \times & \times &&&&&&&\\[\squarelineheight]
\times & \times & & \times & \times & & & &\\[\squarelineheight]
\times & & \times & & \times & & & & \\[\squarelineheight]
& \times & & \times & & \times &&& \\[\squarelineheight]
& \times & \times & & \times & \times & \times & &&\\[\squarelineheight]
&&& \times & \times & \times && \times & \times\\[\squarelineheight]
&&&& \times && \times & \times & \\[\squarelineheight]
&&&&& \times & \times & \times & \times \\[\squarelineheight]
&&&&& \times && \times & \times
\end{matrix}
\right]
\]
\end{document}