我有这个pmatrix
(amsmath
包):
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{equation}
\begin{pmatrix}
\frac{a}{b} & \frac{a}{b} & 0 & 1-\frac{a}{b} \\
0 & 0 & -1 & 0 \\
c-\frac{a}{b} & c-\frac{a}{b} & 0 & \frac{a}{b} \\
d+c-\frac{a}{b} & d+c-\frac{a}{b} & 0 & -\frac{a}{b}
\end{pmatrix}
\end{equation}
\end{document}
我想对齐矩阵的条目,以便所有分数都对齐。有没有办法在环境中做到这一点pmatrix
,还是我必须使用\begin{array}
?
答案1
该mathtools
包允许调整矩阵元素的对齐:
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\begin{document}
\begin{equation}
\begin{pmatrix*}[r]
\frac{a}{b} & \frac{a}{b} & 0 & 1-\frac{a}{b} \\
0 & 0 & -1 & 0 \\
c-\frac{a}{b} & c-\frac{a}{b} & 0 & \frac{a}{b} \\
d+c-\frac{a}{b} & d+c-\frac{a}{b} & 0 & -\frac{a}{b}
\end{pmatrix*}
\end{equation}
\end{document}
答案2
这使用array
环境
\documentclass[a4paper]{article}
\usepackage[margin=1cm]{geometry}
\usepackage{amsmath}
\begin{document}
\begin{equation}
\begin{pmatrix}
\begin{array}{rrrr}
\frac{a}{b} & \frac{a}{b} & 0 & 1-\frac{a}{b} \\
0 & 0 & -1 & 0 \\
c-\frac{a}{b} & c-\frac{a}{b} & 0 & \frac{a}{b} \\
d+c-\frac{a}{b} & d+c-\frac{a}{b} & 0 &-\frac{a}{b}
\end{array}
\end{pmatrix}
\end{equation}
\end{document}
答案3
一种方法是使用来\makebox
确保每列都设置在相同大小的框中,并将对齐方式设置为r
右对齐:
笔记:
- 使用简单的
hphantom{}
方法插入足够的空间以使所有条目右对齐,大部分情况下都是可行的,但很难使最后一个条目正确,而且仍然具有一元负间距而不是二进制负间距。 - 我保留了中心间距的常数——如果需要的话,也可以进行调整。
第二个问题(在评论中提到)关于在括号内居中需要在引入空格的位置和大小方面0
进行更多的精心设计:\phantom
\makebox
希望您能研究下面的代码并实现您想要的任何对齐。我不认为存在一种适用于所有情况的通用解决方案,每种情况都需要根据具体情况进行调整。
笔记:
- 我通过 在第一行下方添加了一些垂直间距
\\[0.5ex]
。
代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{calc}
\newcommand*{\MakeBox}[2]{\makebox[\widthof{#1}][r]{#2}}%
\newcommand{\ColumnA}[1]{\MakeBox{$d + c - \frac{1}{b}$}{$#1$}}%
\newcommand{\ColumnD}[1]{\MakeBox{$1 - \frac{1}{b}$}{$#1$}}%
\newcommand{\PhantomFrac}{\hphantom{\frac{1}{2}}}%
\newcommand{\PhantomRe}{\hphantom{\Re\text{e}}}%
\newcommand{\PhantomIm}{\hphantom{\Im\text{m}}}%
\newcommand{\CenterInAPlusB}[1]{\PhantomFrac\makebox[\widthof{$(a+b)$}][c]{$#1$}}%
\newcommand{\CenterInATimesB}[2]{#1\makebox[\widthof{$(ab)$}][c]{$#2$}}%
\begin{document}
\begin{equation}
\begin{pmatrix}{}
\ColumnA{\frac{a}{b}} & \ColumnA{\frac{a}{b}} & 0 & 1-\frac{a}{b} \\
0 & 0 & -1 & 0 \\
\ColumnA{c -\frac{a}{b}}& \ColumnA{c -\frac{a}{b}} & 0 & \ColumnD{\frac{a}{b}} \\
d+c-\frac{a}{b} & d+c-\frac{a}{b} & 0 & \ColumnD{-\frac{a}{b}}
\end{pmatrix}
\end{equation}
\begin{equation}
\begin{pmatrix}
\frac{1}{2}(a+b) & \frac{1}{2}(a-b) & \CenterInATimesB{\PhantomRe}{0} & \CenterInATimesB{\PhantomIm}{0} \\[0.5ex]
\frac{1}{2}(a-b) & \frac{1}{2}(a+b) & \CenterInATimesB{\PhantomRe}{0} & \CenterInATimesB{\PhantomIm}{0} & 0 & \Im\text{m}(a b) & \Re\text{e}(a b)\\
\CenterInAPlusB{0} & \CenterInAPlusB{0} & \Re\text{e}(a b) & \Im\text{m}(a b)
\end{pmatrix}
\end{equation}
\end{document}
答案4
第一个问题的一个简单解决方案是使用包中定义的矩阵*环境mathtools
对于第二个问题,我稍微简化了以更简单的方式定义代码\RE
并将\IM
其作为数学运算符:使用包解决垂直间距问题cellspace
:它确保在数组类型环境中一行底部和下一行顶部之间的最小间距;适用于 amsmath 环境 - 但不幸的是不适用于 mathtools 扩展。
\documentclass[12pt]{article}
\usepackage{mathtools}
\DeclareMathOperator{\IM}{\Im{m}}
\DeclareMathOperator{\RE}{\Re{e}}
\usepackage[math]{cellspace}
\cellspacetoplimit = 3pt
\cellspacebottomlimit = 3pt
\begin{document}
\begin{equation}
\begin{pmatrix*}[r]
\dfrac{a}{b} & \dfrac{a}{b} & 0 & 1-\dfrac{a}{b} \\[8pt]
0 & 0 & -1 & 0 \\[4pt]
c-\dfrac{a}{b} & c-\dfrac{a}{b} & 0 & \dfrac{a}{b} \\[12pt]
d+c-\dfrac{a}{b} & d+c-\dfrac{a}{b} & 0 & -\dfrac{a}{b}
\end{pmatrix*}
\end{equation}
\bigskip
\begin{equation}
\begin{pmatrix}
\frac{1}{2}(a+b) & \frac{1}{2}(a-b) & 0 & 0 \\
\frac{1}{2}(a-b) & \frac{1}{2}(a+b) & 0 & 0 & 0 & \IM(a b) & \RE(a b)\\
0 & 0 & \RE(a b) & \IM(a b)
\end{pmatrix}
\end{equation}
\end{document}