![如何重新定义(通过“environ”包)“pmatrix”环境?](https://linux22.com/image/234341/%E5%A6%82%E4%BD%95%E9%87%8D%E6%96%B0%E5%AE%9A%E4%B9%89%EF%BC%88%E9%80%9A%E8%BF%87%E2%80%9Cenviron%E2%80%9D%E5%8C%85%EF%BC%89%E2%80%9Cpmatrix%E2%80%9D%E7%8E%AF%E5%A2%83%EF%BC%9F.png)
我想重新定义包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*}}}