\phantom
我想使用和的组合来垂直对齐两个矩阵\llap
。但是 和 都没有\llap
给出\clap
正确的间距。
附言:当我使用时\makebox[\widthof{$\infty$}][c]{7}
,它可以工作。我无法解释它们之间的区别。
平均能量损失
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{calc}
%\def\clap#1{\hbox to 0pt{\hss#1\hss}}
\begin{document}
\begin{align*}
D_0 &= \left[\begin{array}{cccc}
0 & 7 & 1 & 6 \\
\infty & 0 & 9 & \infty \\
4 & 4 & 0 & 2 \\
1 & \infty & \infty & 0
\end{array}\right]\\
D_1 &= \left[
\begin{array}{cccc}
0 & \phantom{\infty}\llap{7} & 1 & 6 \\
\infty & 0 & 9 & \infty \\
4 & 4 & 0 & 2 \\
1 & 8 & 2 & 0
\end{array}\right]
\end{align*}
\end{document}
答案1
最好查看\phantom
s 和\*lap
ping 的某些组合的输出。以下是所有可能的重叠(要么\phantom
先输入\*lap
s,然后输入 s,要么\*lap
先输入 s,然后输入。第 1 列表示广泛使用,而第 2 列显示实际输出。第 3 列使用浅灰色\phantom
显示文本,只是为了清晰起见。插入了一个eft (红色)\phantom
l
rule
前构造;插入一个c
entre (绿色)rule
在中间结构;插入一r
盏灯(蓝色)rule
后那个工程。
\documentclass{article}
\usepackage{xcolor}
\newcommand{\lrule}{\textcolor{red}{\rule[-.3\normalbaselineskip]{.4pt}{1.3\normalbaselineskip}}\hspace*{-.4pt}}
\newcommand{\crule}{\textcolor{green}{\rule[-.3\normalbaselineskip]{.4pt}{1.3\normalbaselineskip}}\hspace*{-.4pt}}
\newcommand{\rrule}{\textcolor{blue}{\rule[-.3\normalbaselineskip]{.4pt}{1.3\normalbaselineskip}}\hspace*{-.4pt}}
\newcommand{\abcd}{\textcolor{black!50}{abcd}}
\begin{document}
\begin{tabular}{ l @{\hspace{4em}} l @{\hspace{4em}} l }
\verb|\phantom\llap| & \lrule\phantom{abcd}\crule\llap{efgh}\rrule & \lrule \abcd \crule \llap{efgh}\rrule \\
\verb|\phantom\clap| & \lrule\phantom{abcd}\crule\clap{efgh}\rrule & \lrule \abcd \crule \clap{efgh}\rrule \\
\verb|\phantom\rlap| & \lrule\phantom{abcd}\crule\rlap{efgh}\rrule & \lrule \abcd \crule \rlap{efgh}\rrule \\
\verb|\llap\phantom| & \lrule\llap{efgh}\crule\phantom{abcd}\rrule & \lrule \llap{efgh}\crule \abcd \rrule \\
\verb|\clap\phantom| & \lrule\clap{efgh}\crule\phantom{abcd}\rrule & \lrule \clap{efgh}\crule \abcd \rrule \\
\verb|\rlap\phantom| & \lrule\rlap{efgh}\crule\phantom{abcd}\rrule & \lrule \rlap{efgh}\crule \abcd \rrule
\end{tabular}
\end{document}
所有可用选项均未显示efgh
恰好位于 的中间abcd
。因此,无法使用上述方法实现您想要的操作。您必须求助于其他框操作。伯纳德已经提到eqparbox
(它会自动计算内<stuff>
所有相似的的最大宽度;可以指定可选的 ment,默认为entre)。<tag>
\eqmakebox[<tag>][<align>]{<stuff>}
<align>
c
您可以使用\makebox[\widthof{<other stuff>}]{<stuff>}
来设置<stuff>
与 宽度匹配的框<other stuff>
。或者,您可以使用框或类似物自己测量宽度(例如,\newlength{\inftylen} \settowidth{\inftylen}{$\infty$}
然后使用\makebox[\inftylen]{<stuff>}
)。
您也可以只\infty
在零宽度框中设置(th
在\infty
或\thinfty
命令中创建一个):
\documentclass{article}
\usepackage{mathtools}
\newcommand{\thinfty}{\makebox[0pt]{$\infty$}}
\begin{document}
\begin{align*}
D_0 &= \left[
\begin{array}{ *{4}{c} }
0 & 7 & 1 & 6 \\
\thinfty & 0 & 9 & \thinfty \\
4 & 4 & 0 & 2 \\
1 & \thinfty & \thinfty & 0
\end{array}
\right] \\
D_1 &= \left[
\begin{array}{ *{4}{c} }
0 & 7 & 1 & 6 \\
\thinfty & 0 & 9 & \thinfty \\
4 & 4 & 0 & 2 \\
1 & 8 & 2 & 0
\end{array}
\right]
\end{align*}
\end{document}
答案2
\fixTABwidth
的功能强制tabstackengine
所有列的宽度相等。虽然这不一定与从另一种(align*
或array
)技术生成的矩阵相匹配,但通过在 中同时执行它们tabstackengine
,可以实现完美对齐,在这种情况下,不会出现\phantom
s 和\llap
s 的混乱。
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{calc}
\usepackage{tabstackengine}
\fixTABwidth{T}
\setstacktabbedgap{2ex}
\begin{document}
\[
D_0 =
\bracketMatrixstack{
0 & 7 & 1 & 6 \\
\infty & 0 & 9 & \infty \\
4 & 4 & 0 & 2 \\
1 & \infty & \infty & 0
}
\]
\[
D_1 =
\bracketMatrixstack{
0 & 7 & 1 & 6 \\
\infty & 0 & 9 & \infty \\
4 & 4 & 0 & 2 \\
1 & 8 & 2 & 0
}
\]
\end{document}
答案3
一个简单的解决方案eqparbox
。两个观察结果,环境已经用可扩展括号定义了矩阵,并且您在加载时bmatrix
不必加载:后者会为您完成此操作,此外,它还定义 和命令。amsmath
mathtools
\clap
\mathclap
\documentclass{article}
\usepackage{mathtools}
\usepackage{calc}
\usepackage{eqparbox, booktabs}
\newcommand*{\eqmathbox}[2][2]{\eqmakebox[#1]{$\displaystyle#2$}}
\begin{document}
\begin{align*}
D_0 &=\begin{bmatrix}
0 & 7 & 1 & 6 \\
\infty & 0 & 9 & \infty \\
4 & 4 & 0 & 2 \\
1 & \eqmathbox{\infty} & \infty & 0
\end{bmatrix}\\
\addlinespace
D_1 &=
\begin{bmatrix}
0 & \phantom{\infty}\llap{7} & 1 & 6 \\
\infty & 0 & 9 & \infty \\
4 & 4 & 0 & 2 \\
1 & \eqmathbox{8} & \eqmathbox{2} & 0
\end{bmatrix}
\end{align*}
\end{document}
答案4
您可以定义一种新的列类型,为无穷大符号保留精确的空间。
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{calc}
\usepackage{array}
\newcolumntype{i}{>{$}w{c}{\widthof{$\infty$}}<{$}}
\begin{document}
\begin{align*}
D_0 &=
\left[\begin{array}{@{}iiii@{}}
0 & 7 & 1 & 6 \\
\infty & 0 & 9 & \infty \\
4 & 4 & 0 & 2 \\
1 & \infty & \infty & 0
\end{array}\right]\\
D_1 &= \left[
\begin{array}{@{}iiii@{}}
0 & 7 & 1 & 6 \\
\infty & 0 & 9 & \infty \\
4 & 4 & 0 & 2 \\
1 & 8 & 2 & 0
\end{array}\right]
\end{align*}
\end{document}
回答你的问题:如何将某物置于至少与另一个物体一样宽的空间中?
\ooalign
当然,您可以使用:
\documentclass{article}
\makeatletter
\newcommand{\cenover}[2]{%
\mathord{% force usage in math mode
\vphantom{#2}%
\ooalign{\hphantom{$\m@th#2$}$\cr\hfil$\m@th#1$\hfil\cr}%
}%
}
\makeatother
\begin{document}
$2\infty2$
$2\cenover{7}{\infty}2$
\end{document}