Next: , Previous: Basic Embedded Mode, Up: Embedded Mode

17.2 More About Embedded Mode

When Embedded mode “activates” a formula, i.e., when it examines the formula for the first time since the buffer was created or loaded, Calc tries to sense the language in which the formula was written. If the formula contains any LaTeX-like ‘\’ sequences, it is parsed (i.e., read) in LaTeX mode. If the formula appears to be written in multi-line Big mode, it is parsed in Big mode. Otherwise, it is parsed according to the current language mode.

Note that Calc does not change the current language mode according the formula it reads in. Even though it can read a LaTeX formula when not in LaTeX mode, it will immediately rewrite this formula using whatever language mode is in effect.

Calc's parser is unable to read certain kinds of formulas. For example, with v ] (calc-matrix-brackets) you can specify matrix display styles which the parser is unable to recognize as matrices. The d p (calc-show-plain) command turns on a mode in which a “plain” version of a formula is placed in front of the fully-formatted version. When Calc reads a formula that has such a plain version in front, it reads the plain version and ignores the formatted version.

Plain formulas are preceded and followed by ‘%%%’ signs by default. This notation has the advantage that the ‘%’ character begins a comment in TeX and LaTeX, so if your formula is embedded in a TeX or LaTeX document its plain version will be invisible in the final printed copy. Certain major modes have different delimiters to ensure that the “plain” version will be in a comment for those modes, also. See Customizing Embedded Mode to see how to change the “plain” formula delimiters.

There are several notations which Calc's parser for “big” formatted formulas can't yet recognize. In particular, it can't read the large symbols for sum, prod, and integ, and it can't handle ‘=>’ with the righthand argument omitted. Also, Calc won't recognize special formats you have defined with the Z C command (see User-Defined Compositions). In these cases it is important to use “plain” mode to make sure Calc will be able to read your formula later.

Another example where “plain” mode is important is if you have specified a float mode with few digits of precision. Normally any digits that are computed but not displayed will simply be lost when you save and re-load your embedded buffer, but “plain” mode allows you to make sure that the complete number is present in the file as well as the rounded-down number.

Embedded buffers remember active formulas for as long as they exist in Emacs memory. Suppose you have an embedded formula which is ‘pi’ to the normal 12 decimal places, and then type C-u 5 d n to display only five decimal places. If you then type d n, all 12 places reappear because the full number is still there on the Calc stack. More surprisingly, even if you exit Embedded mode and later re-enter it for that formula, typing d n will restore all 12 places because each buffer remembers all its active formulas. However, if you save the buffer in a file and reload it in a new Emacs session, all non-displayed digits will have been lost unless you used “plain” mode.

In some applications of Embedded mode, you will want to have a sequence of copies of a formula that show its evolution as you work on it. For example, you might want to have a sequence like this in your file (elaborating here on the example from the “Getting Started” chapter):

     The derivative of
     
                                   ln(ln(x))
     
     is
     
                       (the derivative of ln(ln(x)))
     
     whose value at x = 2 is
     
                                 (the value)
     
     and at x = 3 is
     
                                 (the value)

The C-x * d (calc-embedded-duplicate) command is a handy way to make sequences like this. If you type C-x * d, the formula under the cursor (which may or may not have Embedded mode enabled for it at the time) is copied immediately below and Embedded mode is then enabled for that copy.

For this example, you would start with just

     The derivative of
     
                                   ln(ln(x))

and press C-x * d with the cursor on this formula. The result is

     The derivative of
     
                                   ln(ln(x))
     
     
                                   ln(ln(x))

with the second copy of the formula enabled in Embedded mode. You can now press a d x <RET> to take the derivative, and C-x * d C-x * d to make two more copies of the derivative. To complete the computations, type 3 s l x <RET> to evaluate the last formula, then move up to the second-to-last formula and type 2 s l x <RET>.

Finally, you would want to press C-x * e to exit Embedded mode, then go up and insert the necessary text in between the various formulas and numbers.

The C-x * f (calc-embedded-new-formula) command creates a new embedded formula at the current point. It inserts some default delimiters, which are usually just blank lines, and then does an algebraic entry to get the formula (which is then enabled for Embedded mode). This is just shorthand for typing the delimiters yourself, positioning the cursor between the new delimiters, and pressing C-x * e. The key sequence C-x * ' is equivalent to C-x * f.

The C-x * n (calc-embedded-next) and C-x * p (calc-embedded-previous) commands move the cursor to the next or previous active embedded formula in the buffer. They can take positive or negative prefix arguments to move by several formulas. Note that these commands do not actually examine the text of the buffer looking for formulas; they only see formulas which have previously been activated in Embedded mode. In fact, C-x * n and C-x * p are a useful way to tell which embedded formulas are currently active. Also, note that these commands do not enable Embedded mode on the next or previous formula, they just move the cursor.

The C-x * ` (calc-embedded-edit) command edits the embedded formula at the current point as if by ` (calc-edit). Embedded mode does not have to be enabled for this to work. Press C-c C-c to finish the edit, or C-x k to cancel.