如何重新定义(通过“environ”包)“pmatrix”环境?

如何重新定义(通过“environ”包)“pmatrix”环境?

我想重新定义包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 发了邮件,但是没有回复。他可能经常来这里。所以我登录并发了帖子。

(该问题来自https://stackoverflow.com/questions/4802117/how-to-redifine-via-environ-package-the-pmatrix-environment

答案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*}}}

相关内容