我有很多矩阵,所以我想定义一个mat
环境。有时我需要矩阵有右对齐的列,所以我正在使用mathtools
,并且我想有一个可选参数,通常是c
但我可以r
在需要时制作。
下面是一个小的可行示例。该定义在很多情况下都很好用,包括在内,equation*
但在内则align*
失败。具体来说,我得到了! Extra }, or forgotten $. <recently read> } l.22 \end{align*}
。
如果我将[c]
或[r]
作为可选参数添加到mat
内部,则编译将成功。在 的第一行, 之前align*
添加(斜杠,空格)也是可行的。 \
mat
&\vdots
对我来说,这看起来像是 LaTeX 尝试读取我不希望的可选参数时出现的问题。我尝试%
在行中的不同位置放置 's \begin{pmatrix*}[#1]
,但无济于事。有什么建议吗?
\documentclass{article}
\RequirePackage{mathtools}
\newenvironment{mat}[1][c]{\begin{pmatrix*}[#1]
}{\end{pmatrix*}}
\begin{document}
\begin{equation*}
\begin{mat}
&\vdots \\
\cdots &ra_{j,i}+sb_{j,i} &\cdots \\
&\vdots
\end{mat}
\end{equation*}
\begin{align*}
\begin{mat}
&\vdots \\
\cdots &ra_{j,i}+sb_{j,i} &\cdots \\
&\vdots
\end{mat}
&= 0
\end{align*}
\end{document}
答案1
这是扩展时间问题。解决方法如下xparse
:
\usepackage{mathtools,xparse}
\NewDocumentEnvironment{mat}{O{c}}
{\begin{pmatrix*}[#1]}
{\end{pmatrix*}}
无解决方案xparse
重新定义\env@matrix
,但不使用\renewcommand
:
\makeatletter
\def\env@matrix{\new@ifnextchar[\env@m@trix{\env@m@trix[c]}}
\def\env@m@trix[#1]{%
\hskip-\arraycolsep\let\@ifnextchar\new@ifnextchar\array{*\c@MaxMatrixCols#1}}
\makeatother
这将允许您使用Xmatrix
环境的可选参数;但是您不能用 定义缩写\newenvironment
。这将起作用(无论是否使用可选参数)
\begin{align*}
\begin{pmatrix}[r]
&\vdots \\
\cdots &ra_{j,i}+sb_{j,i} &\cdots \\
&\vdots
\end{pmatrix}
&= 0
\end{align*}
如果你想要一个缩写,那么神奇的公式
\expandafter\let\expandafter\mat\csname pmatrix*\endcsname
\expandafter\let\expandafter\endmat\csname endpmatrix*\endcsname
可以让你写
\begin{align*}
\begin{mat}
&\vdots \\
\cdots &ra_{j,i}+sb_{j,i} &\cdots \\
&\vdots
\end{mat}
\end{align}
带有或不带有可选参数。
影响最小的解决方案
(感谢 Bruno Le Floch)
写
\begin{mat}
\relax & \vdots \\
\cdots & ra_{j,i}+sb_{j,i} &\cdots \\
& \vdots
\end{mat}
答案2
将mat
环境放入括号中:
\begin{align*}
{ \begin{mat}
&\vdots \\
\cdots &ra_{j,i}+sb_{j,i} &\cdots \\
&\vdots
\end{mat} }
&= 0
\end{align*}
答案3
我定义了一个新命令,方便矩阵输入:
\documentclass{article}
\RequirePackage{mathtools}
\newcommand{\pma}[2][r]{\begin{pmatrix*}[#1] #2 \end{pmatrix*} } %pmatrix shortcut
\begin{document}
\begin{align*}
\pma{
&\vdots \\
\cdots &ra_{j,i}+sb_{j,i} &\cdots \\
&\vdots
}
&= 0
\end{align*}
\end{document}
我对对齐没有任何问题