是否可以在最后定义一个带有参数函数的新矩阵环境?
这是我正在尝试使用的环境
\newenvironment{amatrix}[2]{%
$\left[\begin{array}{@{}*{#1}{c}|c@{}}
}{%
\end{array}\right]}
\stackrel{#2}{\rightarrow}$}
这样我就可以输入这个简单的矩阵。
\begin{amatrix}{3}{r_1\leftrightarrow r_3}
-R_1 & R_2 & 0 & E_2-E_1 \\
0 & R_2 & R_3 & E_2 \\
1 & 1 & -1 & 0 \\
\end{amatrix}
并得到这个结果。
我知道我可以分别定义环境和命令为
\newenvironment{amatrix}[2]{%
$\left[\begin{array}{@{}*{#1}{c}|c@{}}
}{%
\end{array}\right]}
\newcommand{\arr}{$\stackrel{#2}{\rightarrow}$}
然后我只需要输入
\begin{amatrix}{3}
-R_1 & R_2 & 0 & E_2-E_1 \\
0 & R_2 & R_3 & E_2 \\
1 & 1 & -1 & 0 \\
\end{amatrix}
\arr{r_1\leftrightarrow r_3}
但是是否可以将其合并到一个环境中?我该怎么做?
答案1
\end{<env>}
你在这里遇到的根本问题是\newenvironment{<env>}
默认情况下无法访问这些参数(请参阅为什么环境的结束代码不能包含参数?)但是还是有办法解决的……
这是建议使用的界面xparse
。它允许您指定选修的构造的第二个参数amatrix
(因为您可能不需要在每次迭代中使用它):
\documentclass{article}
\usepackage{mathtools,xparse}
\NewDocumentEnvironment{amatrix}{ m o }
{
\left[\begin{array}{ @{} *{#1}{c} | c @{} }
}{
\end{array}\right]
\IfValueT{#2}
{\xrightarrow{#2}}
}
\begin{document}
\[
\begin{amatrix}{3}[r_1 \leftrightarrow r_3]
-R_1 & R_2 & 0 & E_2-E_1 \\
0 & R_2 & R_3 & E_2 \\
1 & 1 & -1 & 0
\end{amatrix}
\begin{amatrix}{3}
-R_1 & R_2 & 0 & E_2-E_1 \\
0 & R_2 & R_3 & E_2 \\
1 & 1 & -1 & 0
\end{amatrix}
\]
\end{document}
答案2
我使用了 Werner 的很好的例子并添加了一些(可能是可取的)选项。
\documentclass{article}
\usepackage{mathtools,xparse}
\NewDocumentEnvironment{amatrix}{ m d() o d() o D(){r} }
{
\left[\begin{array}{ @{} *{#1}{c} | c @{} }
}{
\end{array}\right]
\IfValueT{#3}
{\xrightarrow{\IfValueT{#2}{#2 \cdot} #6_{#3}
\IfValueT{#5}
{ \IfValueTF{#4}{#4 \cdot}{\leftrightarrow} #6_{#5} } } }
}
\begin{document}
\[
\begin{amatrix}{3}[1][3]
-R_1 & R_2 & 0 & E_2-E_1 \\
0 & R_2 & R_3 & E_2 \\
1 & 1 & -1 & 0
\end{amatrix}
\begin{amatrix}{3}
1 & 1 & -1 & 0 \\
0 & R_2 & R_3 & E_2 \\
-R_1 & R_2 & 0 & E_2-E_1
\end{amatrix}
\]
\[
\begin{amatrix}{3}(2)[1](+3)[3]
1 & 1 & -1 & 0 \\
0 & R_2 & R_3 & E_2 \\
-R_1 & R_2 & 0 & E_2-E_1
\end{amatrix}
\begin{amatrix}{3}
1 & 1 & -1 & 0 \\
0 & R_2 & R_3 & E_2 \\
2-3R_1 & 2+3R_2 & -2 & 3E_2-3E_1
\end{amatrix}
\]
\[
\begin{amatrix}{3}(4)[1]
-R_1 & R_2 & 0 & E_2-E_1 \\
0 & R_2 & R_3 & E_2 \\
1 & 1 & -1 & 0
\end{amatrix}
\begin{amatrix}{3}
-4R_1 & 4R_2 & 0 & 4E_2-4E_1 \\
0 & R_2 & R_3 & E_2 \\
1 & 1 & -1 & 0
\end{amatrix}
\]
\end{document}