答案1
我建议你改成|@{}
,|
即去掉@{}
后面的助词|
。如果|
你觉得保留 有点太简洁,你也可以写成|@{\hspace{\arraycolsep}}
,以明确哪个操作应该在 之后立即进行|
。
如果你猜测这@{}
意味着“不要插入空格或其他任何东西”,那么省略 @{}
意味着“执行默认操作”(恰好是插入空格,数量为\arraycolsep
),那么你是完全正确的。:-)
\documentclass{article}
\usepackage{array} % optional, but recommended
\newenvironment{gjmatrix}[1]{%
\left[ \begin{array}{ @{} *{#1}{c} | *{#1}{c} @{} }}{%
\end{array} \right]}
\begin{document}
\[
\begin{gjmatrix}{3}
-1 & 2 & -2 & 1 & 0 & 0 \\
0 & 1 & -1 & 0 & 1 & 0 \\
-3 & -1 & 0 & 0 & 0 & 1
\end{gjmatrix}
\]
\end{document}
答案2
您有@{}
after |
,因此您抑制了垂直线后列之前的标准列间距。
我建议采用略有不同的方法,因为您也可以对行后的列数比行前的列数少(或更多)的增广矩阵使用高斯-乔丹算法。
\documentclass{article}
\NewDocumentEnvironment{gjmatrix}{mO{#1}}
{\left[\begin{array}{ @{} *{#1}{c} | *{#2}{c} @{} }}
{\end{array}\right]}
\begin{document}
\[
\begin{gjmatrix}{3}
-1 & 2 & -2 & 1 & 0 & 0 \\
0 & 1 & -1 & 0 & 1 & 0 \\
-3 & -1 & 0 & 0 & 0 & 1
\end{gjmatrix}
\qquad
\begin{gjmatrix}{3}[2]
-1 & 2 & -2 & 1 & 0 \\
0 & 1 & -1 & 0 & 1 \\
-3 & -1 & 0 & 0 & 0
\end{gjmatrix}
\]
\[
\begin{gjmatrix}{4}
-1 & 2 & -2 & 1 & 1 & 0 & 0 & 0\\
0 & 1 & -1 & 0 & 0 & 1 & 0 & 0\\
-1 & 2 & -2 & 0 & 0 & 0 & 1 & 0\\
-3 & -1 & 0 & 0 & 0 & 0 & 0 & 1
\end{gjmatrix}
\qquad
\begin{gjmatrix}{4}[1]
-1 & 2 & -2 & 1 & 0 \\
0 & 1 & -1 & 0 & 1 \\
-1 & 2 & -2 & 0 & 0 \\
-3 & -1 & 0 & 0 & 0
\end{gjmatrix}
\]
\end{document}
尾随可选参数是行后的列数,默认与强制参数中的列数相同。