# Automatic arguments

The arguments of math display objects are either optional or essential. Examples of essential arguments are the numerator and denominator of a fraction. For a legitimate fraction, both are nonempty. Hence if either or both are empty, they should be represented by a dotted square box, which indicates that an essential argument is missing.

Optional arguments are like limits of a summation or integral, the degree of a square root, or some elements of a matrix. It’s entirely legitimate to omit these arguments, but later on you may want to enter text into them. Word 2007 treats optional arguments by explicit user choice: if the user doesn’t want the argument to appear (and take up space), it isn’t displayed at all and the left/right arrow keys cannot navigate into the argument. The user can use a right-mouse context menu to unhide a hidden optional argument or hide an unhidden one. When empty, an unhidden optional argument displays a dotted box.

RichEdit has the simpler and more powerful approach of “automatic arguments.” We figured this style out too late in the Office 2007 cycle to get it into Word 2007. When an optional argument is automatic, it doesn’t display the dotted box, *unless* the user moves the insertion point into the argument by using left or right arrow keys. With the insertion point inside the empty argument, the dotted box appears and the user can enter text. Similarly the user can delete the contents of an automatic argument and no dotted box appears unless the insertion point is inside the argument.

For example, the linear-format entry \sqrt(a+b) creates a square root of the quantity a+b with no degree displayed. This implies a degree of 2, i.e., a square root. With automatic arguments if the insertion point immediately precedes the variable a, typing the left arrow key moves the insertion point into the radical’s empty degree argument, which then displays the dotted box. The user can then type something, for example, n for an nth root.

This also works with n-ary operator limits, empty matrix elements, etc. It’s a simple, globalized method for handling optional arguments in a general way without menus.