矩阵中间距相等

矩阵中间距相等

我正在尝试创建一个矩阵,使每列之间的间距相等,但到目前为止我还没有成功。我现在使用的代码是

\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定义一个新列类型来确定数学数组中最宽的元素。同样的概念也适用于这种情况。顺便提一下,包提供的内容也可以作为替代方案。Csettowidthpmatrixcalc\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,但第二种情况并非如此。

在此处输入图片描述

相关内容