-
Notifications
You must be signed in to change notification settings - Fork 1
XML data format
The XML format by which mathematical expressions are internally represented is specified as follows:
-
The document is
<m>[component]</m>
-
A
[component]
consists of alternating<e>
and<f>
nodes, always starting and ending with<e>
nodes. -
<e>
nodes represent expressions and contain only text, as in<e>x+1</e>
-
<f>
nodes represent symbols and have one attribute:type
, whose value comes from thetype
field insymbols.json
. They look like<f type="symbol_type">[sequence of b nodes][sequence of c or l nodes]</f>
-
<b>
nodes represent methods for rendering a symbol, specified in thep
attribute. They contain text interspersed with<r>
nodes which determine where the editable components of the symbol go. For example, a square root symbol will specify how to render itself in LaTeX by having in its b nodes:<b p="latex">\sqrt{<r ref="1" />}</b>
, indicating that it should be rendered as\sqrt{first component goes here}
. -
<r>
nodes are references to components inside<b>
nodes, and have only aref
attribute, whose value is the index of the component that should be rendered in place of that<r>
node. -
<c>
nodes are the editable components of a symbol, appearing under an<f>
node after the<b>
nodes, and in order of index (as referenced in the<r>
nodes). They can also appear as children of<l>
nodes, representing the elements of the array. They have whatever attributes are specified in theattrs
key for this symbol insymbols.json
, and they look like<c attrs...>[component]</c>
, where a[component]
is as defined above. -
<l>
nodes are arrays, and may appear as children of<f>
nodes or of other<l>
nodes (in the case of a multi-dimensional array). An<l>
node always has ans
attribute indicating how many immediate children it has (e.g., in the case of a 1D array, how many elements the array has, represented by the number of<c>
nodes).
The simple expression x+1
is represented as:
<m>
<e>x+1</e>
</m>
sin(x)
is represented as:
<m>
<e></e>
<f>
<b p="latex">\sin\left(<r ref="1"/>\right)</b>
<b p="text">sin(<r ref="1"/>)</b>
<c><e>x</e></c>
</f>
<e></e>
</m>
The square root of x+1
is:
<m>
<e></e>
<f>
<b p="latex">\sqrt{<r ref="1"/>}</b>
<b p="text">sqrt(<r ref="1"/>)</b>
<c><e>x+1</e></c>
</f>
<e></e>
</m>
1+(1-x)/sin(x)
would be represented as:
<m>
<e>1+</e>
<f>
<b p="latex">\dfrac{<r ref="1"/>}{<r ref="2"/>}</b>
<b p="small_latex">\frac{<r ref="1"/>}{<r ref="2"/>}</b>
<b p="text">(<r ref="1"/>)/(<r ref="2"/>)</b>
<c up="1" down="2" name="numerator"><e>1-x</e></c>
<c up="1" down="2" name="denominator">
<e></e>
<f>
<b p="latex">\sin\left(<r ref="1"/>\right)</b>
<b p="text">sin(<r ref="1"/>)</b>
<c><e>x</e></c>
</f>
<e></e>
</c>
</f>
<e></e>
</m>
The 2x3 matrix [1, 2, 3; x, y, z]
would be represented by:
<m>
<e></e>
<f type="matrix" group="array">
<b p="latex">\left(\begin{matrix} <r ref="1" d="2" sep0=" & " sep1="\\"/> \end{matrix}\right)</b>
<b p="text">matrix(<r ref="1" d="2" sep0="," sep1=";"/>)</b>
<l s="2">
<l s="3">
<c><e>1</e></c>
<c><e>2</e></c>
<c><e>3</e></c>
</l>
<l s="3">
<c><e>x</e></c>
<c><e>y</e></c>
<c><e>z</e></c>
</l>
</l>
</f>
<e></e>
</m>