我正在尝试创建一个矩阵,使每列之间的间距相等,但到目前为止我还没有成功。我现在使用的代码是
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align}
U &= \begin{pmatrix}
e^{\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & e^{\frac{i}{\hbar}|A|t}
\end{pmatrix}
\end{align}
\end{document}
这会产生相当丑陋的输出,其中包含指数的列比其他列宽得多:
我想这是一个非常愚蠢和基本的问题,但遗憾的是快速搜索并没有给我带来任何结果。
答案1
以 TABstack 形式完成。该包有一个\fixTABwidth{T}
选项。我还稍微增加了行之间的垂直间距,以提供更平衡的外观。
\documentclass{article}
\usepackage{tabstackengine}
\stackMath
\begin{document}
\begin{equation}
\setstackgap{L}{1.1\baselineskip}
\fixTABwidth{T}
U = \parenMatrixstack{
e^{\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & e^{\frac{i}{\hbar}|A|t}
}
\end{equation}
\end{document}
事实上,这并不是一个“非常愚蠢和基本的问题”,正如该问题得到的许多赞同所表明的那样:根据最宽的列编写具有等间距列的表格
答案2
使用命令array
定义一个新列类型来确定数学数组中最宽的元素。同样的概念也适用于这种情况。顺便提一下,包提供的内容也可以作为替代方案。C
settowidth
pmatrix
calc
\widthof{...}
代码
\documentclass{article}
\usepackage{amsmath,calc}
\usepackage{array} % http://ctan.org/pkg/array
\newcolumntype{C}[1]{>{\centering\arraybackslash$}m{#1}<{$}}
\newlength{\mycolwd} % array column width
\settowidth{\mycolwd}{$e^{-\frac{i}{\hbar}|A|t}$}% "width" of $e^{-\frac{i}{\hbar}|A|t$; largest element in array
\begin{document}
\begin{equation}
B=\left [
\begin{array}{*{9}{@{}C{\mycolwd}@{}}}
e^{\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & e^{\frac{i}{\hbar}|A|t}
\end{array}
\right ]
\end{equation}
\settowidth{\mycolwd}{$e^{-\frac{i}{\hbar}|A|t}$}
\newcommand\w[1]{\makebox[\mycolwd]{$#1$}}
\begin{align}
B &= \begin{pmatrix}
e^{\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & \w1 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & e^{\frac{i}{\hbar}|A|t}
\end{pmatrix}
\end{align}
\end{document}
答案3
您可以用类似这样的方法填充列(但如果您将其设置为这么宽,则方程式编号会向下移动一行)
\documentclass{article}
\usepackage{amsmath}
\newcommand\w[1]{\makebox[2.5em]{$#1$}}
\begin{document}
\begin{align}
U &= \begin{pmatrix}
e^{\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\
\w0 & \w0 & \w0 & \w0 & \w1 & \w0 & \w0 & \w0 & \w0\\
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & e^{\frac{i}{\hbar}|A|t}
\end{pmatrix}
\end{align}
\end{document}
答案4
使用最新版本的array
包,您可以使用列类型执行以下操作w{c}{<length>}
:
\documentclass{article}
\usepackage{amsmath,array}
\makeatletter
\newenvironment{fwpmatrix}[2][\arraycolsep]
{%
\left(
\settowidth{\dimen@}{$#2$}%
\setlength{\arraycolsep}{#1}%
\let\@ifnextchar\new@ifnextchar
\hskip -\arraycolsep
\array{ *{\value{MaxMatrixCols}}{w{c}{\dimen@}} }
}
{%
\endarray
\hskip -\arraycolsep
\right)
}
\makeatother
\begin{document}
\begin{equation}
U = \begin{fwpmatrix}[-2pt]{e^{-\frac{i}{\hbar}|A|t}}
e^{\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & e^{\frac{i}{\hbar}|A|t}
\end{fwpmatrix}
\end{equation}
\begin{equation}
\begin{fwpmatrix}{e^{-\frac{i}{\hbar}|A|t}}
e^{-\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 & e^{-\frac{i}{\hbar}|A|t} \\
0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0 & 0 & 0 \\
0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 0 & 0 & 0 \\
0 & 0 & 0 & e^{-\frac{i}{\hbar}|A|t} & 1 & 1
\end{fwpmatrix}
\end{equation}
\end{document}
强制参数是 最宽条目,可选参数设置\arraycolsep
。在第一种情况下,没有与最宽条目相邻的列,因此使用负数 是有意义的\arraycolsep
,但第二种情况并非如此。