我想重新定义包pmatrix
提供的环境amsmath
(并由mathtools
包更改),以添加好看的分隔符。代码如下:
\documentclass{article}
\usepackage{amsmath,mathtools,environ}
\RenewEnviron{pmatrix}{\PARENS{\begin{matrix}\BODY\end{matrix}}}
\PARENS
该包提供了获取弯曲左/右括号的命令。mtpro2
但它不起作用。此外,还有一个带星号的版本pmatrix*
(带有可选参数l
/ c
/ r
):我也不知道。我可以给出的代码如下:
\documentclass{article}
\usepackage{amsmath,mathtools,environ}
\RenewEnviron{pmatrix*}[1][c]{\PARENS{\begin{matrix*}[c]\BODY\end{matrix*}}}
我给environ
这个包的作者 Will Robertson 发了邮件,但是没有回复。他可能经常来这里。所以我登录并发了帖子。
答案1
\NewEnviron
可以定义一个从未定义过的环境,并且\RenewEnviron
只能重新定义由 定义的环境\NewEnviron
。如果我们使用\RenewEnviron
重新定义预定义环境,则会收到错误:
! LaTeX Error: \env@pmatrix@save@env undefined.
这似乎是 的一个错误environ
。以下是解决方案:
\usepackage{amsmath,mathtools}
\usepackage{mtpro2}
\usepackage{environ}
\let\pmatrix\relax
\let\endpmatrix\relax
\NewEnviron{pmatrix}{\PARENS{\begin{matrix}\BODY\end{matrix}}}
\expandafter\let\csname pmatrix*\endcsname\relax
\expandafter\let\csname endpmatrix*\endcsname\relax
\NewEnviron{pmatrix*}[1][c]{\PARENS{\begin{matrix*}[#1]\BODY\end{matrix*}}}
答案2
我的解决方案基于 Leo Liu 的解决方案,但如果您想以这种方式重新定义许多环境,则速度会更快:
\newcommand{\OverwriteEnviron}[1]{%
\expandafter\let\csname #1\endcsname\relax%
\expandafter\let\csname end#1\endcsname\relax%
\expandafter\let\csname env@#1@parse\endcsname\relax%
\expandafter\let\csname env@#1@save@env\endcsname\relax%
\expandafter\let\csname env@#1@process\endcsname\relax%
\NewEnviron{#1}%
}
\OverwriteEnviron{pmatrix*}[1][c]{\PARENS{\begin{matrix*}[#1]\BODY\end{matrix*}}}