我的问题
我经常编写线性方程组,并具有以下对齐要求:
- 所有未知数的倍数都应右对齐
- 所有的
+
、-
和=
运算符号都应该居中,并为那些“功能齐全”的方程式留出适当的左右间距
我原来的 MWE:
\documentclass[12pt,border=10pt]{standalone}
\usepackage{mathtools}
\begin{document}
My matrix is :
$M =
\begin{bmatrix*}[r]
-1 & 2 & -3 \\
4 & 0 & -1 \\
7 & 8 & 9 \\
\end{bmatrix*}
$
thus the equation $M X = X$
reads :
$
\def\arraycolsep{0pt}
\left \{
\begin{array}{*3{rc}r}
- x & {}+{} & 2 y & {}-{} & 3 z & {}={} & x \\
4 x & & & {}-{} & z & {}={} & y \\
7 x & {}+{} & 8 y & {}+{} & 9 z & {}={} & z \\
\end{array}
\right.
$
\end{document}
我的希望
我不知道如何使用amsmath
或mathtools
包中定义的环境来做到这一点
我想要一个可以linearEquations
让我简单地写下的环境:
\begin{linearEquations}{3}
- x & + & 2 y & - & 3 z & = & x \\
4 x & & & - & z & = & y \\
7 x & + & 8 y & + & 9 z & = & z \\
\end{linearEquations}
以产生相同的结果。
我的尝试
到目前为止我已经尝试过类似的事情:
\newenvironment{linearEquations}[1]
{
%before
\def\arraycolsep{0pt}
\left \{
\begin{array}{*#1{r@{{}}c@{{}}}r}
}
{
%after
\end{array}
\right.
}
但它没有{}
在操作符号之前/之后产生适当的间距
你能帮忙吗?谢谢,
可能的解决方案
按照沃纳的回答,该线路\begin{array}{*#1{r@{\:}c@{\:}}r}
在这种情况下似乎有效,但也许仅在某些情况下才有效?
答案1
我建议对环境设置做两处更改linearEquations
:
使用
\setlength\arraycolsep{0pt}
,而不是\def\arraycolsep{0pt}
;和定义一个新的列类型,例如,
C
为二元和关系运算符的列:\newcolumntype{C}{>{{}}c<{{}}}
通过这些修改,您的自定义环境应该没问题:
\documentclass{article}
\usepackage{array} % for '\newcolumntype' macro
\newcolumntype{C}{>{{}}c<{{}}}
\newenvironment{linearEquations}[1]{%
%before
\setlength\arraycolsep{0pt}
\left\{\,
\begin{array}{*{#1}{rC}r}}{%
%after
\end{array}
\right.
}
\begin{document}
\[
\begin{linearEquations}{3}
- x & + & 2 y & - & 3 z & = & x \\
4 x & & & - & z & = & y \\
7 x & + & 8 y & + & 9 z & = & z \\
\end{linearEquations}
\]
\end{document}
答案2
像这样吗?
\documentclass[12pt,border=10pt]{standalone}
\usepackage{mathtools}
\usepackage{systeme}
\begin{document}
My matrix is:
$M =
\begin{bmatrix*}[r]
-1 & 2 & -3 \\
4 & 0 & -1 \\
7 & 8 & 9 \\
\end{bmatrix*}
$
thus the equation $M X = X$
reads:
\systeme{
-x+2y-3z=x,
4x-z=y,
7x+8y+9z=z
}
\end{document}