如何排版出美观的对角矩阵?我发现自己又一次摆弄幻影并运行 raisebox 以获得美观的效果。这种微观管理是不好的做法,但为什么默认看起来这么糟糕,有没有更好的方法?
\documentclass{article}
\usepackage{mathtools}
\begin{document}
\begin{align*}
\operatorname{diag} x &=
\begin{bmatrix}
x_1 & 0 & 0\\
0 & \ddots & 0 \\
0 & 0 & x_n
\end{bmatrix}
&
\operatorname{diag} x &=
\begin{bmatrix}
x_1 & 0 & 0\\
0 & \raisebox{-0.4ex}{\(\ddots\)}\rule[3.4ex]{0pt}{0pt} & 0 \\
0 & 0 & x_n \rule[3.4ex]{0pt}{0pt}
\end{bmatrix}
\end{align*}
\end{document}
答案1
TABstack 的替代品。
\documentclass{article}
\usepackage{mathtools,tabstackengine}
\TABstackMath% STACK MATRIX IN MATH MODE
\setstacktabbedgap{10pt}% INTER-COLUMN GAP SIZE
\setstackgap{L}{1.5\baselineskip}% INTER-ROW BASELINESKIP
\newcommand\cddots{\raisebox{-1pt}{$\ddots$}}
\begin{document}
\[ \operatorname{diag} x =
\bracketMatrixstack{
x_1 & 0 & 0\\
0 & \cddots & 0 \\
0 & 0 & x_n
}
\]
\end{document}
虽然 OP 描述的对角矩阵类型不需要,但该包有一个\fixTABwidth{<T or F>}
声明,将所有列宽固定为矩阵中的最大列宽。如果有宽矩阵条目,这会很有帮助:
\documentclass{article}
\usepackage{mathtools,tabstackengine}
\TABstackMath% STACK MATRIX IN MATH MODE
\setstacktabbedgap{10pt}% INTER-COLUMN GAP SIZE
\setstackgap{L}{1.5\baselineskip}% INTER-ROW BASELINESKIP
\newcommand\cddots{\raisebox{-1pt}{$\ddots$}}
\begin{document}
\fixTABwidth{T}
\[ \operatorname{diag} x =
\bracketMatrixstack{
x_1 & 0 & 12345\\
0 & \cddots & 0 \\
0 & 0 & x_n
}
\]
\end{document}
答案2
如果您愿意,可以使用包nicematrix
。在定义的许多选项之间nicematrix
有一个列宽度,您可以在其中根据值将矩阵的两个括号放入其中。
\documentclass{article}
\usepackage{mathtools}
\usepackage{nicematrix}
\NiceMatrixOptions{transparent,nullify-dots}
\begin{document}
\[\operatorname{diag} x =\begin{bmatrix}[columns-width = 3mm]
x_1 & 0 & 0\\
0 & \ddots & 0 \\
0 & 0 & x_n
\end{bmatrix}\]
\end{document}
另一种可能性是使用columns-width = auto
:
\documentclass{article}
\usepackage{mathtools}
\usepackage{nicematrix}
\NiceMatrixOptions{transparent,nullify-dots}
\begin{document}
\[\operatorname{diag} x =\begin{bmatrix}[columns-width = auto]
x_1 & 436436 & 67676\\
0 & \ddots & 0 \\
8778 & 0 & x_n
\end{bmatrix}\]
\end{document}