identifier #
insert(#)
number #
insert(#)
\sqrt
replace($, $)
\root
replace($, $)
\of
when (isa($.parent, "mrow") && isa($.parent.parent, "mroot"))
let mroot = $.parent.parent
if ($.prev and !$.prev.prev and !$.next) replace($.parent, $.prev)
replace(mroot.child[0], $)
\underline
insert([$, _])
\overline
insert([$, ‾])
\cases
replace($, {$)
\matrix
replace($, $)
\over
if isa($.parent, "mrow")
replace($.parent, [$.parent, $])
_ if isa($.parent, "mrow")
if eq($.prev, null)
replace($, new(mmultiscripts, [ new mrow, $, new none ]))
elseif (isa($.prev, msub))
let base = $.prev.children[0]
let script = $.prev.children[1]
replace($.rev, new(mmultiscripts, [ base, script, new none, $, new none ]))
elseif (isa($.prev, msup))
let base = $.prev.children[0]
let script = $.prev.children[1]
replace($.prev, new(msubsup, [ base, $, script ]))
elseif (isa($.prev, msubsup))
let base = $.prev.children[0]
let subscript = $.prev.children[1]
let superscript = $.prev.children[2]
replace($.prev, new(mmultiscripts, [ base, subscript, superscript, $, new none ]))
elseif isa($.prev, mmultiscripts)
if ($.prev.children[$.prev.children.size - 2] = null)
replace($.prev.children[$.prev.children.size - 2], $)
else
$.prev.children.append([$, new none])
else
replace($.prev, new(msub, [ $.prev, $ ]))
else if isa($.parent, msub) and $.parent.children[1] = $
let base = $.parent.children[0]
replace($.parent, new(munder, [ base, $ ]))
_, \sb (subscript)
if parent.isa(mrow)
if cursor is first child then
sub = new mmultiscripts
parent.replace(cursor, sub);
sub.set_base(new mrow);
sub.set_subscript(cursor);
else
elem = element prior to cursor in parent
if elem.isa(msub) || elem.isa(msup) || elem.isa(mmultiscripts) then
append script to multiscript and/or replace single script with
multiscript
else if elem.isa(munder) || elem.isa(mover) || elem.isa(munderover) then
creates another munder
else
parent.replace(elem, sub);
sub.set_base(elem);
sub.set_subscript(cursor);
else if (parent.isa(msub) and cursor is subscript) or
change msub into a munder
cursor in same position
else
replace cursor with msub with empty base
^, \sp (superscript)
symmetric to subscript
', \prime (prime)
similar to superscript, but multiple prime superscripts should go
together in the same operator
{ (group open)
replace cursor with mrow, put cursor inside mrow
if cursor is inside a table, create a new table row and a new table cell
and put the cursor inside the cell
} (group close)
remove cursor from mrow
mrow.parent.advance(cursor, mrow)
if cursor inside a table cell then close table
\over,\atop,\above (fraction)
if cursor.parent.isa(mrow) then
frac = new mfrac
cursor.parent.parent.replace(mrow, frac)
numerator is current content of cursor.parent except for the cursor
itself.
set denominator to cursor
else
\choose
similar to fractions, but with stretchable parentheses around
\sqrt
parent.replace(cursor, new msqrt)
set new msqrt.base to cursor
\root
parent.replace(cursor, new mroot)
set empty base element
set root index to cursor
\of
check if cursor.parent is mroot (or mrow inside mroot index)
or and cursor is in index position. move the cursor to the base element
\underline
create munder element with stretchable horizontal line as underscript
substitute cursor with munder
move the cursor in the base element
\overline
symmetric
accents (\hat)
create an mover with accent=true and the operator has stretchy=false
wide accents (\widehat)
as accents, but mover has accent=false and the operator has stretchy=true
\scriptstyle, ...
create an appropriate mstyle, the cursor moves in. However, when the
subformula ends one has to skip the mstyle
\cases
create mrow with stretchable brace and emtpy table, put cursor inside
table
\matrix
create empty table, cursor inside table
&
check that cursor is inside a table cell
create a new cell next to it
\cr
check that cursor is inside a table cell inside a table row
create a new row
\phantom
create a mphantom element, cursor inside