创建方程组环境的最佳方法是什么?

创建方程组环境的最佳方法是什么?

我正在尝试写几个方程组,并且希望方程项的间距如下所示

2x  +   y  +  3z  =  10   \\ 
 x  +   y  +   z  =   6   \\
 x  +  3y  +  2z  =  13 

现在,使用一些非常丑陋的代码,我能够产生上述结果。

\documentclass[10pt,a4paper]{article}
\usepackage{mathtools}
\usepackage{amsmath}

\begin{document}

\begin{align*}
\begin{bmatrix}
\begin{tabular}{r c r c r c r }
$2x$ & $+$ & $ y$ & $+$ & $3z$ & $=$ & $10$ \\
$ x$ & $+$ & $ y$ & $+$ & $ z$ & $=$ & $ 6$ \\
$ x$ & $+$ & $3y$ & $+$ & $2z$ & $=$ & $13$
\end{tabular}
\end{bmatrix}
\end{align*}

\section{Another system of equations, now without the brackets}

\begin{table}[!htpb]
\centering
\begin{tabular}{r c r c r c r }
$2x$ & $+$ & $ y$ & $+$ & $3z$ & $=$ & $10$ \\
$ x$ & $+$ & $ y$ & $+$ & $ z$ & $=$ & $ 6$ \\
$ x$ & $+$ & $3y$ & $+$ & $2z$ & $=$ & $13$
\end{tabular}
\end{table}

\end{document}    

我非常希望有一种更自动化的方式来做到这一点,以及一种控制元素间距的简单方法。我看过之前的帖子,比如

(线性)方程组的多列布局

我似乎正在寻找这个的简单版本。我不需要使用并排的方程式,也不需要在其前面加上数字。

使用上面帖子中的想法,我猜结果是通过重新定义表格内的命令(如-和)来完成的+?我试过做这样的事情,但代码看起来相当复杂=(

把它们加起来:有没有办法定义一个简单的方程组环境,并带有适当的对齐以及用于定义间距的可选命令?

答案1

您可以尝试一下系统。其文档是法语的,但有很多例子可供参考。

您的示例将输入为

\systeme{
2x  +   y  +  3z  =  10,
 x  +   y  +   z  =   6,
 x  +  3y  +  2z  =  13}

为了在右侧列中获得右对齐,必须手动修改包代码:

\makeatletter
\def\SYS@makesyspreamble@i#1{%
  \ifnum#1<\SYS@preamblenum
    \SYS@addtotok\SYS@systempreamble{\hfil$##$&\hfil$##$&}% 
    \expandafter\SYS@makesyspreamble@i\expandafter{\number\numexpr#1+\@ne\expandafter}%
  \else
    \SYS@addtotok\SYS@systempreamble{\hfil$##$&$##$&\hfil$##$\null}% 
    \ifSYS@extracol
      \SYS@addtotok\SYS@systempreamble{&\SYS@extracolstart##\SYS@extracolend\hfil\null}% 
    \fi
    \SYS@addtotok\SYS@systempreamble{\cr\SYS@strutup}% 
  \fi
}
\makeatother

该补丁只是变成$##$\hfil\hfil$##$,但由于这涉及到#无法使用电子工具箱\patchcmd

可以通过以下方式修改线之间的距离

\syslineskipcoeff{1.2}

并使用参数作用于列间距\tabskip;例如,

\[
\syslineskipcoeff{1.2}\setlength{\tabskip}{3pt}
\systeme{
2x  +   y  +  3z  =  10,
 x  +   y  +   z  =   6,
 x  +  3y  +  2z  =  13}
\]

将在垂直和水平方向上展开方程。\syslineskipcoeff也可以在文档的序言中全局发布;但不是水平间距,因为\tabskip影响全部包括TeX 表和tabular环境。

答案2

您可以使用alignat*amsmath 环境,它适用于在多个位置对齐的多行方程。要纠正运算符的间距,您可以将它们写为{}+{}。例如:

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{alignat*}{4}
2x & {}+{} &  y & {}+{} & 3z & {}={} & 10 \\
 x & {}+{} &  y & {}+{} &  z & {}={} &  6 \\
 x & {}+{} & 3y & {}+{} & 2z & {}={} & 13
\end{alignat*}
\end{document}

在此处输入图片描述

答案3

spalign提供用于设置方程组的基本界面:

在此处输入图片描述

\documentclass{article}

\usepackage{spalign}

\begin{document}

\[
  \spalignsys{
    2x +  y + 3z = 10 ;
     x +  y +  z =  6 ;
     x + 3y + 2z = 13
  }
\]

\spalignsysdelims{.}{\}}% {<left>}{<right>}
\[
  \spalignsys{
    2x \+ \. - 3z =  1 ;
    \. \+ 4y +  z = -4
  }
\]

\end{document}

答案4

以下代码以您的代码为起点,

\documentclass[letterpaper]{standalone}
\usepackage{array}  %% provides the command `\newcolumntype`
%% "o": column type for "operators", e.g., +, -, and =
\newcolumntype{o}{@{}>{{}}c<{{}}@{}}

\begin{document}
\[ 
\begin{array}{rororor}  %% or, more succinctly, \begin{array}{*{3}{ro}r}
2x & + &  y & + & 3z & = & 10 \\
 x & + &  y & + &  z & = &  6 \\
 x & + & 3y & + & 2z & = & 13
\end{array} 
\]
\end{document}

产生以下输出:

在此处输入图片描述

相对于您的代码,上述代码允许$在每个方程中省略 28 个 [!] 符号。这是通过 (i) 使用在数学模式下运行的array环境(而不是环境tabular)以及 (ii) 使用自定义设计的列类型o来处理+和周围的间距来实现的=

使用@Herbert 答案中采用的方法,可以进一步简化此代码,array使用的符号数量&只有上述代码的一半:

\documentclass{standalone}
\usepackage{array}
\newcolumntype{z}{r<{{}}}
\begin{document}
\[ \setlength\arraycolsep{0pt} % keep this reset local
   \begin{array}{*{4}{z}}         % {zzzr} works too
      2x + &  y + & 3z = & 10 \\
       x + &  y + &  z = &  6 \\
       x + & 3y + & 2z = & 13
   \end{array} 
\]
\end{document}

附录:我刚刚注意到您还在问如何更改行间距和设置每行符号之间的宽度。首先,array通过发出命令 来更改行间距\renewcommand\arraystretch{x},其中x应为正数。默认值为 1.0;设置x为 1.25,毫不奇怪,将使行间距增加 25%。其次,长度变量 和控制围绕“mathbin”类型运算符(例如+-)和“mathrel”类型运算符(例如)的水平空间。这些变量的默认值分别为和,其中是“math unit”的缩写,通常等于。这些长度参数的值可以通过和命令更改。=\medmuskip\thickmuskip4mu plus 2mu minus 4mu5mu plus 5mumu1/18em\setlength\addtolength

举例来说,假设我们发出命令\renewcommand\arraystretch{1.2}\addtolength\medmuskip{2mu}\addtolength\thickmuskip{3mu}。方程组将被排版为:

在此处输入图片描述

最后评论:由于\medmuskip\thickmuskip参数在 TeX 数学命令中出现了很多次,因此您可能应该对这两个方程组局部变量进行重新定义。如果不这样做,您可能会在文档的其他地方遇到一些相当奇怪的公式!

相关内容