Navigating with the cursor
Most of the time, cursor movement in MathFlow Editor works as you would expect, and you don't need to think too hard about it. However, as the cursor moves through your equation, its shape changes to give you extra information about the equation structure. Spending a few minutes learning about the subtleties of cursor movement will have a big payoff in the long run.
MathFlow Editor tries to make cursor movement as natural and intuitive as possible. In general, the left, right, up and down arrows move the cursor to the next valid insertion point in the corresponding direction. Similarly, clicking the mouse anywhere in an equation moves the cursor to the closest valid location to the click.
Behind the scenes, the MathFlow Editor is negotiating a potentially complicated nested structure of MathML templates. Moving the cursor to the right on the screen can involve jumping in and out of MathML structures behind the scenes.
The cursor may occasionally not move exactly as you would expect on account of the nesting of the MathML structure. In these cases, the cursor movement is giving you additional information about the structure of your equation.
To help you follow where the cursor is in the MathML structure of the equation, the MathFlow Editor gives two visual cues. The cursor position is represented by a blinking red vertical bar. However, note that there is a faint gray rectangle as well. This gray rectangle is outlining the equation template containing the cursor location and is the first cue about the MathML structure near the cursor.
To illustrate, consider stepping through the following equation with the right arrow.
As the cursor moves to the right, note that when it moves into the fraction, the gray rectangle shifts to the fraction, instead of the entire equation.
The second visual cue about the location of the cursor in the nested MathML template structure is the MathML Ancestry panel. As you move the cursor, you can see the nesting of MathML templates, with the innermost template or symbol that the cursor is on at the far right of the Ancestry panel, and the outermost ‹math›
template on the left.
In more complicated situations, one might have several nested rows, where the right edges all align. When this happens, hitting the right arrow will move the cursor from an inner template to an outer template in the nesting. Although you will see the gray rectangle outlining the parent template and MathML Ancestry panel change, the actual cursor position stays the same.
By spending a few minutes playing with cursor movement and nested templates, you will rapidly get the hang of navigating around in a structured MathML equation.
When you start a new equation, the cursor automatically starts as a blinking vertical red line. When the Editor window loses focus, the cursor changes to gray and stops blinking. The vertical line is the normal cursor in MathFlow editor.
As you type, the editor will begin inserting the characters into the equation, and the cursor will move to show the insertion point. Also, a faint gray box will appear, outlining the template in which the cursor is currently located. As you move around in an equation, the gray outline shifts, giving you a visual cue about the nesting structure of the underlying MathML, as illustrated here:
In the first two illustrations, the cursor is located in the numerator and denominator of a fraction, and the outlined parent is the row template containing the entire numerator and denominator respectively. In the third illustration, the cursor is on the left edge of the fraction itself, and the outlined parent is a "wrapper" row containing the fraction itself.
The Editor will automatically put characters into special MathML templates called tokens. There are tokens for variables (called an <mi>
template in MathML, for math identifier), numbers (<mn>
), operators (<mo>
), and so on.
The right and left arrow keys generally move the cursor between the tokens in the row. However, when you move the cursor over a token that contains several characters together, the cursor will take an upside-down T-shape to show the extent of the grouped items by underlining them, as shown here.
Within a token, the arrow keys will move the cursor between the individual characters in the token. You can also position the cursor within a multi-character token with the mouse.
In MathML, identifier tokens with more than one character, e.g. "sin", are rendered in an upright font by default, while single character tokens are rendered in italics. If you move two alphabetic tokens together, say by deleting an intervening space, the editor will automatically merge the characters together into a single token. Similar behavior applies to numbers. By noticing the cursor shape, you can easily keep track of what characters are being grouped into tokens.
The MathFlow editor also supports the MathML text template. Within a text template, characters appear in an upright font by default, and the spacebar always inserts a space. Outside a text template, the spacebar may not insert a space. See Keyboard input for details.
When the cursor is inside a text template, it changes to an "I-beam" shape.
You can insert a text template either from the layout templates palette on the toolbar (it looks like a T inside a dashed box) or from the Insert menu or by using the keyboard shortcut Ctrl+T .
Cursor embellishment for non-MathML elements
As the cursor moves through the equation, a small triangle may appear below the cursor, as seen in this image:
This triangle is used to indicate the presence of non-MathML markup somewhere within a given element. The example image above was created with the following MathML:
<math> <mrow> <mfrac> <mrow> <mi>a</mi> </mrow> <?foo?> <!-- comment --!> <atag/> <mrow> <mi>b</mi> </mrow> </mfrac> </mrow> </math>
Notice the non-MathML elements between the numerator and denominator elements of the mfrac
. Technically, these non-MathML elements should be displayed in Design view in the same location as the fraction bar, which would be very confusing. Since there are many situations where this kind of problem can occur, all such situations will be displayed with the upward facing triangle below the text cursor, whenever the text cursor is "on" an element with non-MathML elements inside. If you place your mouse cursor over the triangle, the status bar will show you the name of the element that contains the non-MathML markup.
When you insert a new template into an equation, small squares indicate the empty slots, or template blanks, where data should be inserted. The cursor will automatically jump to the first template blank. If you want to fill in the template blank later, it must be before you click OK to insert the equation into the document but if you do, you can move the cursor out of the template without entering characters. Just reposition the cursor into the template and fill it in before you close the Editor.
Caution
Warning: If you have empty template(s) in the equation and subsequently close the MathFlow Editor to add the expression to oXygen without filling in the template, you will get an error and you will not be able to recover the equation without going to oXygen's Text edit mode and editing the MathML manually.
You can verify the cursor is on the template blank by looking at the MathML Ancestry.
MathML Ancestry <math> : <mrow> : <msup> : <mrow> : <template>
This is an important aid in avoiding a common confusion: when a template blank appears at the end of an <mrow>
or other template, it can be difficult to tell whether the cursor is actually on the template, or on the <mrow>
, operator, or other template:
Right: Wrong:
Thus it is a good habit to check the Ancestry to make sure the cursor is really on the template. The gray rectangle will confirm what you see in the Ancestry.