替换环境中的前导减号

替换环境中的前导减号

这个问题关于负号和矩阵环境中条目的对齐,Heiko Oberdiek 给出了一个很好的答案,其中他使用了一个名为的用户定义命令,\matminus而不是通常的-

我如何定义一个矩阵环境来自动为我执行前导负号的替换?

谢谢您的帮助!

编辑:

我改编了 Heiko Oberdiek 和 egreg 提供的代码,并创建了一个包,定义了一组替代矩阵环境(spmatrix、sbmatrix、sBmatrix、svmatrix 和 sVmatrix)。这些环境的功能与没有“s”的对应环境类似,但减少了其中减号的长度,以实现每列中条目的更好对齐。该项目由这里

下图显示了常规和简化减矩阵环境之间的差异:

在此处输入图片描述

答案1

我们可以利用所有矩阵环境都使用的事实,通过向其中注入代码,-使其成为矩阵。\matminusamsmath\env@matrix

\documentclass[11pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{etoolbox}

\usepackage{graphicx}

%%% Save a copy of the original minus in math mode
\mathchardef\realminus\mathcode`-
%%% Define the shortened version of minus (H. Oberdiek)
\newcommand{\reducedminus}{%
  \leavevmode\hphantom{0}%
  \llap{%
    \settowidth{\dimen0 }{$0$}%
    \resizebox{1.1\dimen0 }{\height}{$\realminus$}%
  }%
}
%%% Define \matminus so that it doesn't reduce the minus in sub/superscripts
\newcommand{\matminus}{%
  \mathchoice{\reducedminus}{\reducedminus}%
             {\realminus}{\realminus}%
}

\makeatletter
%%% Make - become \matminus in matrices
\preto\env@matrix{\mathcode`-=\string"8000
  \begingroup\lccode`~=`-
  \lowercase{\endgroup\let~}\matminus
}
\makeatother

\begin{document}

\[
A =
\begin{pmatrix}
  -123 & -10 & 1 \\
  100 & 5 & 16 \\
  13 & 7 & 7^{-2}
\end{pmatrix}.
\]

\end{document}

在此处输入图片描述

然而,我看不出比正常外观有任何改善

在此处输入图片描述


如果希望指数中的减号也更短,请按如下方式更改代码:

%%% Save a copy of the original minus in math mode
\mathchardef\realminus\mathcode`-
%%% Define the shortened version of minus (H. Oberdiek)
\newcommand{\reducedminus}[2]{%
  \leavevmode\hphantom{0}%
  \llap{%
    \settowidth{\dimen0 }{$#10$}%
    \resizebox{1.1\dimen0 }{\height}{$#1\realminus$}%
  }%
}
%%% Define \matminus so that it doesn't reduce the minus in sub/superscripts
\newcommand{\matminus}{\mathpalette\reducedminus\relax}
\makeatletter
%%% Make - become \matminus in matrices
\preto\env@matrix{\mathcode`-=\string"8000
  \begingroup\lccode`~=`-
  \lowercase{\endgroup\let~}\matminus
}
\makeatother

相关内容