22

I want to figure out how I can align a system of linear equations very nicely.

At the moment I am using the following command:

\systeme{x_1=2r + s -t,x_2= r, x_3=-2s +2t, x_4=s, x_5=t}

But this gives me something ugly in staircase form, like:

enter image description here

Any way I could fix it so the x_i's are all at the left side, nicely underneath each other, and possibly with the equation signs also aligned?

Here is a MWE:

\documentclass[11pt,a4paper,openany]{report}
\usepackage{amssymb,amsmath,amsthm}
\usepackage[dutch]{babel}
\usepackage{mdframed}
\usepackage{systeme,mathtools}
\makeatletter
\renewcommand*\env@matrix[1][*\c@MaxMatrixCols c]{%
  \hskip -\arraycolsep
  \let\@ifnextchar\new@ifnextchar
  \array{#1}}
\makeatother
\usepackage{lipsum}
\usepackage{relsize}
\newcommand\md{\ }

\begin{document}

\systeme{x_1=2r + s -t,x_2= r, x_3=-2s +2t, x_4=s, x_5=t}

\end{document}
14
  • normally one uses align or one of its variants from amsmath but it is impossible to comment on your code as \systeme is not a standard plain or latex command and you give no indication of its definition. – David Carlisle Jan 4 '15 at 23:31
  • I'm using TexnicCenter, and I just use the package: \usepackage{systeme,mathtools}. There's no special definition, it's just standard. – Kamil Jan 4 '15 at 23:32
  • I need to have \systeme because I want that there appears an array on the left to make it clear to the reader that it is a system of equations. – Kamil Jan 4 '15 at 23:37
  • Please edit your post to show a complete, compilable document starting with \documentclass... and ending with \end{document}. That way, people will not have to spend time gradually extracting every essential detail from you, only to find they overlooked something after spending time posting an answer. – cfr Jan 4 '15 at 23:39
  • 1
    You have given no indication of what \systeme is, I had never heard of the command searching around suggests you are using a package of the same name and using latex, but you really should provide a complete example from \documentclass to \end{document} by editing the above question – David Carlisle Jan 4 '15 at 23:41
21

The command to use for this is \systeme*:

\documentclass[11pt,a4paper,openany]{report}
\usepackage{amsmath}
\usepackage{systeme}

\begin{document}

I want to figure out how I can align a system of linear equations very nicely.
At the moment I am using the following command:
\[
\systeme*{x_1=2r + s -t,x_2= r, x_3=-2s +2t, x_4=s, x_5=t}
\]

\end{document}

enter image description here

By setting the value of \syslineskipcoeff you can modify the spacing; the default value is 1.25:

\[
\syslineskipcoeff{1}
\systeme*{x_1=2r + s -t,x_2= r, x_3=-2s +2t, x_4=s, x_5=t}
\]

enter image description here

5
  • 1
    Wonderful! Appreciate it. – Kamil Jan 5 '15 at 0:08
  • The letters $r, s, t$ aren't aligned. – Bernard Jan 5 '15 at 0:11
  • @Bernard That's not required by the OP – egreg Jan 5 '15 at 0:13
  • 1
    @egreg: it's one of the main intrests in systeme. Else a simple align* environment would do the job. Or did I miss something? – Bernard Jan 5 '15 at 0:16
  • @Bernard If one replace systeme* by systeme the letters $r, s, t$ will be aligned. Do you agree with me? – Student Jan 13 at 10:20
20

Here's a solution that uses only the array package and an array environment. In case you're curious about what's going on in the preamble of the array environment:

  • The four columns that contain variables are of type r

  • To get the correct spacing around the = symbols and the + and - signs, the amount of intercolumn whitespace (governed by the length parameter \arraycolsep) is first set to 0pt.

    • The = symbols are inserted automatically; the directive @{{}={}} tells LaTeX to treat = as an object of type mathrel.

    • The directives >{{}}c<{{}} tell LaTeX to center-set the column contents (which will be either +, -, or blank) and to treat them as objects of type mathbin.

enter image description here

\documentclass[11pt,a4paper,openany]{report}
\usepackage{array}
\begin{document}
\[
\left\{
\setlength\arraycolsep{0pt}
\begin{array}{ r @{{}={}} r  >{{}}c<{{}} r  >{{}}c<{{}}  r }
x_1 & 2r &+&  s &-&  t \\
x_2 &  r               \\
x_3 &    &-& 2s &+& 2t \\ 
x_4 &    & &  s        \\
x_5 &    & &    & &  t \\
\end{array}
\right.
\]
\end{document}
12

The systeme command is designed for the "matrix-like" (if you can't tell, I'm an engineer, not a mathematician) portion of the system to be on the left-hand side, not the right-hand side.

If you can accept a simple LHS->RHS swap of your input, systeme works out of the box:

\documentclass{article}
\usepackage{systeme}

\begin{document}
\systeme{2r + s -t=x_1, r=x_2, -2s +2t=x_3, s=x_4, t=x_5}
\end{document}

enter image description here

It is likely possible to create a new command in the spirit of \systeme{} with the aligned and unaligned sides reversed, but the code is above my head. ;-)

9

A simple hack with the aligned environment:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{systeme}
\usepackage{amsmath}

\begin{document}

\[ \left\{\begin{aligned}x_1 & = \\x_2 & =\\x_3 & =\\x_4 & =\\x_5 & =\\ \end{aligned}\sysdelim. . \systeme[rst]{2r + s -t , r , -2s +2t, s, t}\right.
 \]%

\end{document} 

enter image description here

3

Using a TABstack. In this case the "Center" of \tabbedCenterstack refers to vertical centering, the [r] refers to horizontal right alignment of each column, \stackMath processes the data in math mode, and \TABbinary inserts a {} prior to and following each cell, so as to give the + and - the proper horizontal spacing.

\documentclass[11pt,a4paper,openany]{report}
\usepackage{tabstackengine}
\stackMath
\begin{document}
\[
\left\{
\TABbinary\tabbedCenterstack[r]{
x_1 =& 2r &+&  s &-&  t \\
x_2 =&  r               \\
x_3 =&    &-& 2s &+& 2t \\ 
x_4 =&    & &  s        \\
x_5 =&    & &    & &  t
}\right.
\]
\end{document}

enter image description here

2
  • +1. What would you say are the main differences between using \TABbinary\tabbedCenterstack[r] and using an array environment? – Mico Jan 5 '15 at 15:12
  • @Mico 0pt intercolumn gap is default in tabbed... stacks; Center-stacks are long stacks, thus all lines are forced to be equal baselineskips apart (though short stacks are more akin to arrays in this regard); interrow vertical baselineskip is easily set with \setstackgap{L}{length}; more options for how to automatically treat math operators with \TABbinary, \TABbinaryRight, and \TABbinaryLeft; \fixTABwidth{T} is available to force all columns to equal width; while centerstacks are vertically centered, stacks and understacks are not, which is often very useful. – Steven B. Segletes Jan 5 '15 at 15:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.