我正在尝试写几个方程组,并且希望方程项的间距如下所示
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
\thickmuskip
4mu plus 2mu minus 4mu
5mu plus 5mu
mu
1/18em
\setlength
\addtolength
举例来说,假设我们发出命令\renewcommand\arraystretch{1.2}
、\addtolength\medmuskip{2mu}
和\addtolength\thickmuskip{3mu}
。方程组将被排版为:
最后评论:由于\medmuskip
和\thickmuskip
参数在 TeX 数学命令中出现了很多次,因此您可能应该对这两个方程组局部变量进行重新定义。如果不这样做,您可能会在文档的其他地方遇到一些相当奇怪的公式!