Calligra/KFormula/Comparison of Formula Editors

From KDE Community Wiki

Still needs some polishing and there are more programs to be reviewed.

Microsoft Equation Editor

Version: 3.0 (Microsoft Office 2003)
Vendor: Microsoft
Web: http://www.dessci.com/en/products/mathtype/
License: Proprietary
  • integrated Formula Editor of Microsoft Office
  • simplified version of MathType (Design Science)

Insertion

Inserting elements it done by a toolbar, offering groups of templates to be inserted.

  • relations (11)
  • spaces (11)
  • decorations (20)
  • operators (12)
  • arrows (14)
  • logical symbols (8)
  • set theoretic symbols (12)
  • miscellaneous (18)
  • Greek letters (small) (28)
  • Greek letters (big) (24)
  • Bracket templates (fenced elements) (30)
  • fraction and root templates (9)
  • super / sub script templates (15)
  • sums (5)
  • integrals (21)
  • under / over lines (10
  • named arrow templates (6)
  • product and set theory templates (20)
  • matrix templates (12)

Remarks

  • pressing space does nothing, you have to explicitly insert spaces through the toolbar

Mathematica

Version: 5.0
Vendor: Wolfram Research, Inc.
License: Proprietary

Remarks

  • the cursor is as big as the current element, e.g. as big as the largest element in an <mrow> (or better the Mathematica equivalent) of it

FireMath

Version: 0.1
Web: http://www.firemath.info/
License: GPL-3

FireFox extension that allows the typesetting of MathML formulas

  • doesn't allow the editing of elements, only inserting and deleting.
  • when inserting text (that you enter in a seperate toolbox), you have

to choose between inserting it as Function, Identifier, Operator or Text.

  • shows special points, where you can insert elements

Insertion

  • side panel with numbers and most used symbols
  • tab widget with panels for:
    • brackets and operators (77)
    • relations (110)
    • Greek letters (55)
    • arrows (90)
    • set symbols (54)
    • set operators (42)
  • toolbar for sub-/super scripts (15)

Kile

Web: http://kile.sourceforge.net/
License: GPL-2+
Version: svn 954996
Platform: Linux/Unix, Windows, Mac OS X
  • Latex editor

Inserting:

Insertion is of templates is done by a toolbar and symbols can be inserted from tool box in the sidebar.

Templates:

  • subscript
  • superscript
  • normal fraction
  • display style fraction
  • square root
  • left delimiter
  • right delimiter
  • new line

Symbols:

  • Most frequendly used
  • Relation (138)
  • Operators (113)
  • Arrows (69)
  • Miscellaneous Math (97)
  • Miscellaneous Text (135)
  • Delimiters (37)
  • Greek (65)
  • Special Characters (178)
  • Cyrillic Characters (157)
  • User defined

The most frequently used and user defined are very handy, although it is quite complicated to create entries for the later one. So many symbols in one tool box make it very hard to find the right one, although it maybe makes it a little bit easier to find a symbol if you don't know, which categorie it is in, compared to a more finegrained approach. Additionally the tool box wastes a lot of space, because in the typical use case, on doesn't have to enter many symbols form the same category one after another (unless you miss use it as a onscreen greek typewriter). Therefore you dont have to show the symbols from the current category after the user selected a symbol from it.

Lyx

Web: http://www.lyx.org
License: GPL-2+
Platform: Linux/Unix, Windows, Mac OS X
  • Latex WYSIWYM editor
  • allows to edit formulas inplace
  • while hovering over an item, the corresponding latex code is shown in the statusbar
  • the latex code of the whole formula is shown in an additional windows

Navigation

Since Lyx is a Latex and not a MathML editor, we have to simulate

<mn></mn>, <mi></mi>, ... 

by using

 {\displaystyle } 

or

something similar, nevertheless there are a few differences because inserting "3" when the cursor is positioned like this:

\sqrt{|}

gives

\sqrt{3}

which is valid Latex, whereas

<sqrt>3</sqrt>

is not valid MathML. Additionally there isn't really a concept of mrows in latex (except maybe by braces), therefore the nested mrow doesn't actually exist for lyx.

<math><mrow>|<mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow>|<mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>|3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3|</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn>|</mroot></mrow></math>
<math><mrow><mroot><mrow>|<mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>|12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>1|2</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12|</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn>|<mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>|34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>3|4</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34|</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn>|</mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext>| </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> |</mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext>|<mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>|ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>a|b</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab|</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi>|<mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>|1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1|</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow>|<mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot>|</mrow></math>

Inserting:

Inserting elements is possible with two toolbars. The first one offers groups of templates and symbols:

  • spaces (9)
  • styles (4)
  • fractions (12)
  • fonts (10)
  • functions (33)
  • decorations (24)
  • big operators (32)
  • miscellaneous (44)
  • Greek letters (40)
  • arrows (31)
  • AMS arrows (
  • operators (31)
  • realtions (35)
  • AMS relations (66 !)
  • AMS negative relations (50)
  • dots (4)
  • AMS operators (24)
  • AMS miscellaneous (35)

The second toolbar offers the following templates directly:

  • subscript
  • superscript
  • square root
  • root
  • standart fraction
  • sum
  • integral
  • product
  • round brackets
  • square brackets
  • curly brackets
  • delimiters (opens a dialog, where you can choose which delimiter you want to have on the left and on the right side)
  • matrix (opens a dialog, where you can choose dimensions and alignement)
  • case environment (e.g. for piecewise functions)
  • add row
  • add column
  • delete row
  • delete column

Formulator

Platform: Windows
Vendor: Hermitech Laboratory
Web: http://www.mmlsoft.com/index.php?option=com_content&task=view&id=6&Itemid=7
License: Proprietary
  • freeware MathML editor, that allows to edit Presentation and Content Markup
  • It is possible to edit the formula inplace

or by manipulating the MathML Tree or Text, but only one mode can be active at a time.

Navigation

I tried to find out where the actual cursor position is (in case it was unclear) by inserting an element and looking where it ends up in the element tree. The current element shown in the status bar seems to be not always the element, in which the cursor atucally is.

<math><mrow>|<mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot>|<mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>|12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>1|2</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12|</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>|34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>3|4</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34|</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext>| </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> |</mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>a|b</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab|</mi><mtext>1</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1|</mtext></mrow><mn>3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>|3</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3|</mn></mroot></mrow></math>
<math><mrow><mroot><mrow><mn>12</mn><mrow><mn>34</mn></mrow><mtext> </mtext><mi>ab</mi><mtext>1</mtext></mrow><mn>3</mn></mroot>|</mrow></math>

(The behaviour in the second line is stange, the cursor is not moved into the <mrow> and if the user inserts an element, an new <mrow> is created as a child of <mroot> and the old <mrow> is added to is as a child)

Text entry

(This is the normal behaviour, it can be changed by selecting a certain style from the menu, which among other things chooses the type of newly inserted elements)

  • Space -> <text> </text>
  • Number -> <mn> (except if in <mi>, then just appending to it)
  • Letter -> <mi>
  • Special Character -> <mo>

Insertion

Inserting elements is possible by a toolbar offering the following items (number of corresponding symbols):

  • Relational and logical symbols (24)
  • Spaces (4)
  • Operator symbols (12)
  • Arrow symbols (20)
  • Set theory symbols (10)
  • Special constants (10)
  • Miscellaneous symbols (25)
  • Greek characters (lowercase) (26)
  • Greek characters (uppercase) (24)
  • Differentiation (5)
  • Brackets (20)
  • Fraction and radicals (6)
  • Superscript and Subscripts (18 !)
  • Summation templates (5)
  • Integral templates (26 !)
  • Underbar and Overbar templates (23)
  • Labelled arrow templates (27)
  • Products and set theory templates (20)
  • Table templates (13)
  • Box templates (12)

(Seems fairly complete, but a little bit too much, e.g. there are templates for inserting a simple integral without limits, a simple integral with sub/superscript limits, a simple integral with under/overscript limits, ...) Clicking on the toolbar items opens a tooltip with the correspondending symbol table.

Remarks

  • use always explizit mrows, adds them, if the user creates or loads inferred ones.
  • simplifies the formula for example when switching modes, e.g. by removing nested, redundant mrows, but only sometimes. (have to investigate when, but seems hard to predict)
  • If a part of the formula is selected while inserting a template which accepts child elements, the selection is used as one of these.
  • nested mrows are aligned a little bit under there parents base line

Shows the parent node and the actual node in the statusbar, draws bounding boxes of the parent mrow, not the token element.

Other Programs waiting for review

  • KFormula 1.6
  • MathType 6.5
  • Kile

...