影响最小的解决方案

影响最小的解决方案

我有很多矩阵,所以我想定义一个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}

我对对齐没有任何问题

相关内容