在这个问题关于负号和矩阵环境中条目的对齐,Heiko Oberdiek 给出了一个很好的答案,其中他使用了一个名为的用户定义命令,\matminus
而不是通常的-
。
我如何定义一个矩阵环境来自动为我执行前导负号的替换?
谢谢您的帮助!
编辑:
我改编了 Heiko Oberdiek 和 egreg 提供的代码,并创建了一个包,定义了一组替代矩阵环境(spmatrix、sbmatrix、sBmatrix、svmatrix 和 sVmatrix)。这些环境的功能与没有“s”的对应环境类似,但减少了其中减号的长度,以实现每列中条目的更好对齐。该项目由这里。
下图显示了常规和简化减矩阵环境之间的差异:
答案1
我们可以利用所有矩阵环境都使用的事实,通过向其中注入代码,-
使其成为矩阵。\matminus
amsmath
\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