MathML 3 elementary math examples

Elementary math elements

MathML 3 adds several elements to handle elementary math problems.  The elementary math elements below should be inside of either an `mstack` or an `mlongdiv` element.  Both `mstack` and `mlongdiv` make the digits of numbers contained in them be in their own columns and their children appear in their own row; `mlongdiv`'s first three children are the divisor, dividend, and result and are treated specially.

• `msgroup` groups rows with similar alignment; options control the position and shifting of children (see multiplication and division examples below)

• `msrow` groups digits and operators into a row; options control the position of the children

• `msline` draws lines between rows of the stack; options control the position, length, thickness, and overhang of the line

• `mscarries` annotates the following row with optional borrows/carries and/or crossouts; options control the default location, style, and size of the borrows, carries, and crossouts

• `mscarry` a borrow/carry and/or crossout for a single digit; options control the location, style, and size of the borrow, carry, and/or crossout

If a blank entry in a column is needed, the element `none` can be used. This is shown in some of the examples below.

Here's a simple addition problem that spaces the "+" away from the operand by using the element `none`:

 `   496   + 28   `

Here's a more complicated subtraction problem that shows carries and borrows and crossouts:

 `                 2         1         2,327   - 1,156     1,171 `

Notice that the carry/borrow default of "n" (north/above) is changed to the "nw" (northwest) position by `mscarries`, but that is overridden for the borrow and changed back to "n". The carry/borrow can be in any compass position. Several different styles for crossouts are possible.

Here's a multiplication problem that shows multiple rows of carries:

 `   1   1 3   435   × 25     1   2185   874     10925 `

• We specified loose spacing between the characters on the `mstack` tag; absolute values such as "10px" can also be given.

• The carries are shifted over; we could also have used an `msrow` and `none`, but specifying a position is simpler.

• The '874' uses `msrow` to shift the number over one column, but a "0" could have been added and this would not have been needed; alternatively, msgroup with shift="1" could have been used, similar to what is done in the long division problem in our next example.

Long division

There are many different styles of long division used around the world. MathML has ten named styles, but the list is open-ended. All styles share how the intermediate steps are displayed, but differ in the placement of the divisor, result, and where lines are drawn. The default style is the style used in the U.S., Great Britain, and elsewhere.

Below are two examples that differ only in the style and what character is used for the decimal separator. Because the separator is typically set on the `math` element, it is included in these examples.

 `   12   16.5   198             12                     78       72             6.0       6.0                     0       [/itex]` `   12   16,5   198             12                     78       72             6,0       6,0                     0       [/itex]`

Repeating decimal

There are two common styles for indicating a repeating decimal in a decimal expansion of fractions like ⅓. The most common style puts a line above the part that repeats and the other style puts dots on the first and last digits of the part that repeats. Both are easy to write as shown below:

 `     0.4047619 ` `   . .   0.4047619 `

MathML makes elementary math accessible

The video below shows a prototype of MathPlayer speaking and highlighting the speech for two elementary math examples: