\matrix 命令在哪里?

\matrix 命令在哪里?

据我所见,\matrix这是一个 TeX 命令,但我似乎找不到有关它的文档。

它在 MathJax 中有效,所以我想知道它是否可以在 LaTeX 中使用。

即这是有效的 MathJax:

$$
\left[
\matrix
{
newx.x&newy.x&newz.x \\
newx.y&newy.y&newz.y \\
newx.z&newy.z&newz.z    
}
\right]
$$

正如所见数学.stackexchange

在我的 LaTeX 编辑器(底层使用 MiKTeX)中,我必须使用\begin{matrix} .. \end{matrix},所以我想知道该\matrix命令发生了什么。

答案1

除了已经提供的一些方法外,这里还有许多在 LaTeX 中创建矩阵的方法。使用

  • array将物品放置在固定的行/列环境中的结构;
  • \begin{matrix}...\end{matrix}来自amsmath包裹,它允许您自己指定矩阵分隔符(使用\left\right);
  • pmatrixbmatrixBmatrix以及上述的变体(也来自) vmatrix,分别将分隔符固定为、、、和;Vmatrixamsmath( )[ ]{ }| ||| ||
  • \bordermatrix{...}这是一个 TeX 命令,将指定行和列索引;
  • \kbordermatrix{...}与上面的类似,但提供了更大的灵活性;
  • blkarray包裹以及相关blockarray环境block来构建你的矩阵。

以下是展示一些不同样式的示例文件:

\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\usepackage{kbordermatrix}% http://www.hss.caltech.edu/~kcb/TeX/kbordermatrix.sty
\usepackage{blkarray}% http://ctan.org/pkg/blkarray
\begin{document}

\[
\begin{array}{lc}
  \verb|array| & \left(\begin{array}{@{}ccc@{}}
                    a & b & c \\
                    d & e & f \\
                    g & h & i
                  \end{array}\right) \\[15pt]
  \verb|matrix| & \left(\begin{matrix}
                    a & b & c \\
                    d & e & f \\
                    g & h & i
                  \end{matrix}\right) \\[15pt]
  \verb|pmatrix| & \begin{pmatrix}
                    a & b & c \\
                    d & e & f \\
                    g & h & i
                  \end{pmatrix} \\[15pt]
  \verb|bmatrix| & \begin{bmatrix}
                    a & b & c \\
                    d & e & f \\
                    g & h & i
                  \end{bmatrix} \\[15pt]
  \verb|Bmatrix| & \begin{Bmatrix}
                    a & b & c \\
                    d & e & f \\
                    g & h & i
                  \end{Bmatrix} \\[15pt]
  \verb|vmatrix| & \begin{vmatrix}
                    a & b & c \\
                    d & e & f \\
                    g & h & i
                  \end{vmatrix} \\[15pt]
  \verb|Vmatrix| & \begin{Vmatrix}
                    a & b & c \\
                    d & e & f \\
                    g & h & i
                  \end{Vmatrix} \\[15pt]
  \verb|bordermatrix| & \bordermatrix{\text{corner}&c_1&c_2&\ldots &c_n\cr
                r_1&a_{11} &  0  & \ldots & a_{1n}\cr
                r_2& 0  &  a_{22} & \ldots & a_{2n}\cr
                r_3& \vdots & \vdots & \ddots & \vdots\cr
                r_4& 0  &   0       &\ldots & a_{nn}} \\[15pt]
  \verb|kbordermatrix| & \kbordermatrix{\text{corner}&c_1&c_2&\ldots &c_n\cr
                r_1&a_{11} &  0  & \ldots & a_{1n}\cr
                r_2& 0  &  a_{22} & \ldots & a_{2n}\cr
                r_3& \vdots & \vdots & \ddots & \vdots\cr
                r_4& 0  &   0       &\ldots & a_{nn}} \\[25pt]
  \verb|blkarray| & \begin{blockarray}{[cc]c\}}
                11 & 22 & 33 \\
                1 & 2 & 3 \\
                \begin{block}{(ll)l\}}
                  11 & 22 & 33 \\
                  1 & 2 & 3 \\
                \end{block}
                1 & 2 & 3
                \end{blockarray}
\end{array}
\]
\end{document}

矩阵

答案2

您不应该使用\matrix{,但\begin{matrix}\end{matrix}由包提供amsmath

答案3

强烈建议使用 amsmath 的矩阵功能。但是,回答你的问题:你可以\matrix在 中找到 的定义plain.tex

\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
    \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
      \mathstrut\crcr\noalign{\kern-\baselineskip}
      #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}

有关的:

\def\pmatrix#1{\left(\matrix{#1}\right)}

您可以plain.tex在命令提示符下输入

kpsewhich plain.tex

例如,在当前标准的 Windows TeX Live 安装中

c:/texlive/2011/texmf-dist/tex/plain/base/plain.tex

\matrix在 TeX 手册和其他各种 TeX 文档中有记录。LaTeX 文档主要涉及matrixamsmath 的更现代环境。

答案4

该命令\matrix在 LaTeX 内核中定义

% latex.ltx, line 4509:
\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
    \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
      \mathstrut\crcr\noalign{\kern-\baselineskip}
      #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
\def\pmatrix#1{\left(\matrix{#1}\right)}

(使用的 LaTeX 版本是LaTeX2e <2018-12-01>)。

plain.tex

% plain.tex, line 1093:
\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
    \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
      \mathstrut\crcr\noalign{\kern-\baselineskip}
      #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}
\def\pmatrix#1{\left(\matrix{#1}\right)}

我们看不出有任何区别。

原因是历史原因:LaTeX 首次发布时,它整合了 的大部分内容plain.tex,以便于从一种切换到另一种。此外,原始 LaTeX 内核对数学的支持非常基本:除了普通的 TeX 结构外,它仅提供displaymathequation和。该环境eqnarray及其带星号的配套产品旨在替代和(但不是最好的替代品)。eqnarray*eqnarrayeqalignnoeqalign

amsmath它被发现时(最初名为),出现了一个问题:用于 plain.tex 的amslatex原始插件应该获得 LaTeX 语法。当然存在冲突:如果加载了,则使用LaTeX 内核支持的 的文档将受到影响。对于和 也类似。amstex.tex\matrix ... \endmatrix\begin{matrix}...\end{matrix}\matrix{...}amsmath\pmatrix{...}\begin{pmatrix}...\end{pmatrix}

确实amsmath

\renewenvironment{matrix}{%
  \matrix@check\matrix\env@matrix
}{%
  \endarray \hskip -\arraycolsep
}
\def\env@matrix{\hskip -\arraycolsep
  \let\@ifnextchar\new@ifnextchar
  \array{*\c@MaxMatrixCols c}}
\newcount\c@MaxMatrixCols \c@MaxMatrixCols=10
\def\matrix@check#1{%
  \@xp\ifx\csname\@currenvir\endcsname#1%
  \else\matrix@error#1%
    \@xp\@gobble
  \fi
}
\def\matrix@error#1{%
  \@amsmath@err{%
Old form `\string#1' should be \string\begin{\@xp\@gobble\string#1}%
  }{%
`\string#1{...}' is old Plain-TeX syntax whose use is
ill-advised in LaTeX.%
  }%
}
\renewenvironment{pmatrix}{%
  \left(%
  \matrix@check\pmatrix\env@matrix
}{
  \endmatrix\right)%
}

这是什么意思?我们知道\begin{foo}首先进行一些记录,包括定义\@currenvir为mean foo,然后执行\foo,因此用定义时“开始部分”中给出的标记替换它。在\matrix和的情况下\pmatrix\matrix@check执行;此命令检查当前环境名称是否与matrix或匹配pmatrix;如果文档使用了\begin{matrix}或,则为真\begin{pmatrix},但如果使用了纯 TeX 语法\matrix{...}或,则为假\pmatrix{...}。在后一种情况下,会引发错误,并且\matrix或的参数\pmatrix会被吞噬,以允许完成 LaTeX 运行。

这种冲突实际上并不是那么严重:每个大量使用数学的文档都应加载amsmath并使用\begin{matrix}\begin{pmatrix}语法。

顺便说一句,这有一个后果;如果想要matrix使用“大男子主义编程风格”进行构建,环境不应该像这样定义

\newenvironment{foomatrix}
 {<something at the beginning>\matrix}
 {\endmatrix<something at the end>}

因为这会触发\matrix@error。相反

\makeatletter
\newenvironment{foomatrix}
 {<something at the beginning>\env@matrix}
 {\endmatrix<something at the end>}
\makeatother

amsmath应该使用;例如,

\newenvironment{bmatrix}{\left[\env@matrix}{\endmatrix\right]}

使用 MathJax,两个都

\matrix{ 1 & 0 \cr 0 & 1 }

\begin{matrix} 1 & 0 \\ 0 & 1 \end{matrix}

是允许的。该实现实际上并不\begin像在 LaTeX 中那样“扩展”,因此可以自由地使用其他技巧。

相关内容