使用 \llap 和 \phantom 对数组中的矩阵进行水平对齐

使用 \llap 和 \phantom 对数组中的矩阵进行水平对齐

\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

最好查看\phantoms 和\*lapping 的某些组合的输出。以下是所有可能的重叠(要么\phantom先输入\*laps,然后输入 s,要么\*lap先输入 s,然后输入。第 1 列表示广泛使用,而第 2 列显示实际输出。第 3 列使用浅灰色\phantom显示文本,只是为了清晰起见。插入了一个eft (红色)\phantomlrule构造;插入一个centre (绿色)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,可以实现完美对齐,在这种情况下,不会出现\phantoms 和\llaps 的混乱。

\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不必加载:后者会为您完成此操作,此外,它还定义 和命令。amsmathmathtools\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}

在此处输入图片描述

相关内容