*Carl Milsted, Jr on Sep 11 17:37:26*

Here's a quick tutorial to get you started writing equations in QTML. Let's dive in with a simple example, Albert Einstein's famous equation relating mass and energy:

1

$e=m{c}^{2}$
To typeset the equation above, I typed in the following code:

.eqn 1 e = m c sup 2 ..eqn

The
`eqn`

QTML tag begins a display equation. For an inline equation, such as$e=m{c}^{2}$
, use the
`eqni`

tag. The
`eqn`

tag takes an optional argument which is the equation number or label. Notice
the 1 that shows up to the right of the equation above.
In between the QTML tags, you describe your equation in the venerable
eqn language developed by Brian Kernighan and Lorinda Cherry back in the
1970s for the UNIX operating system.

Behind the scenes, the Conntects QTML converter sends your equations to the GNU version of eqn, with flags to generate MathML, the HTML standard for displaying equations. For some email clients, such as Thunderbird, you can copy the MathML generated here on Conntects and send equations to your friends. Alas, some email clients such as gmail and yahoo mail do not render MathML correctlyâ€”yet.

The eqn language is well documented in Typesetting Mathematicsâ€”User's Guide (Second Edition) by Kernighan and Cherry. There are some differences between GNU eqn and what is described in this document, including a couple of bugs, alas.

So, let's begin the quick tour to get you hooked, and then you can look at the linked document if you want to get fancy.

Looking back at equation 1, the equation was typed in just as you would do
intuitively, save that I used the
`sup`

keyword to create a superscript. Baby stuff! And if you need subscripts, just
use the
`sub`

keyword.

For our next keyword, let's drop back to Newton's formula for kinetic energy:

2

$e=\frac{1}{2}m{v}^{2}$
Which was made with:

.eqn 2 e = 1 over 2 m v sup 2 ..eqn

To make upright fractions, just use the
`over`

keyword.

Let's make a fancier fraction:

3

${v}_{x}=\frac{\Delta x}{\Delta t}$
.eqn 3 v sub x = { DELTA x } over { DELTA t } ..eqn

Not only did we get to use a subscript to denote the $x$ component of the velocity, we have multiple symbols on the top and bottom of the fraction. To group symbols together for any operator, use curly braces. Finally, we get our first taste of Greek letters. To make a capital Greek delta, spell out DELTA in all capitals. For a small delta, just use the word delta. Likewise for any other Greek letter.

**Caution: if there is a Roman letter which is identical in
appearance to a Greek
letter, use the Roman letter. For example
**

.eqn ALPHA RHO ..eqn

Gives:

4

$AR$
which is probably not what you want. (Actually, this worked better than expected. In old UNIX I would have gotten ALPHA RHO instead of A R. But the GNU eqn is wrong above! The capital Greek rho should look like a Roman P!)

Let's get a wee bit fancier and do the Quadratic Formula:

5

$x=\frac{-b\pm \sqrt{{b}^{2}-4ac}}{2a}$
.eqn 5 x = {- b +- sqrt {b sup 2 - 4 a c}} over {2 a} ..eqn

To get a square root sign, use the keyword
`sqrt`

.For other roots, use fractional powers. To my knowledge, there is
no way to use the radical symbol to do cube roots and whatnot.

Let's move on to power series:

6

$\underset{i=1}{\overset{\infty}{\Sigma}}{\left(\frac{1}{2}\right)}^{i}=1$
.eqn 6 sum from {i=1} to inf left ( 1 over 2 right ) sup i = 1 ..eqn

We have the new
`sum`

keyword for summation,
`inf`

for infinity,
and the all important
`left`

and
`right`

keywords. The latter two make parentheses grow big enough to
enclose the expression they contain. These keywords can also
be used for square brackets, curly braces, vertical lines and
more. In fact, to make curly braces visible, you have to use left
or right.

The
`from`

and
`to`

keywords work for products, integrals, and more. For example:

7

$\underset{0}{\overset{1}{\int}}{x}^{2}dx={\left[\frac{{x}^{3}}{3}\right]}_{0}^{1}$
.eqn 7 int from 0 to 1 x sup 2 dx = left [ x sup 3 over 3 right ] sub 0 sup 1 ..eqn

Decorating Your Variables

Mere letters are not sufficient to denote vector quantities. There are two conventions. The first is to put an arrow over vector quantities.

8

$\overrightarrow{F}=m\overrightarrow{a}$
.eqn 8 F vec = m a vec ..eqn

The second is to make vector quantities bold:

9

$F=ma$
.eqn 9 bold F = m bold a ..eqn

I prefer the latter, as it leaves room for other decorations:

10

${\Pi}_{e}={\stackrel{\text{~}}{\Pi}}_{e}{e}^{ikz}$
.eqn 10 bold PI sub e = bold PI tilde sub e e sup {i k z} ..eqn

If you go wild with decorated variables in a long post, it's nice to
take some shortcuts. For this purpose there is the
`define`

statement. For example, I could have rewritten the previous equation
thusly.

11

${\Pi}_{e}={\stackrel{\text{~}}{\Pi}}_{e}{e}^{ikz}$
.eqn 11 define Pve bold PI sub e define Pvet bold PI tilde sub e Pve = Pvet e sup {i k z} ..eqn

So far, this has bought me nothing. But here's the deal:
*defines carry over to subsequent equations in the same post or comment!*
For example:

12

$\phi =-\nabla \xb7\epsilon {\Pi}_{e}$
.eqn 12 phi = - del cdot epsilon Pve ..eqn

A long time ago in a state far far away, I made extensive use of such defines in order to typeset my doctoral dissertation.

It's time to get really fancy:

13

$Let\text{\hspace{0.5em}}y\text{\hspace{0.5em}}=\{\begin{array}{l}1\\ 0\end{array}\text{\hspace{0.5em}}\text{\hspace{0.5em}}\text{\hspace{0.5em}}\begin{array}{l}\text{if}\text{\hspace{0.5em}}x>2\\ \text{if}\text{\hspace{0.5em}}x\le 2\end{array}$
.eqn 13 roman {Let}~ y~ = left { lpile{ 1 above 0 } ~~~lpile { if~x > 2 above if ~ x <=2} right " " ..eqn

We have several new things to deal with. First the
`roman`

keyword renders to next block of characters in a Roman font.
Tildes [things thingies: ~~~] act as spacers. (If you want
a half space use a circumflex [^].)

The
`pile`

stacks things over each other with the
`above`

keyword as a separator. This is a family of keywords with
`lpile`

for left justified piles,
`pile`

for centered piles
and
`rpile`

for right justified piles.

Finally, note how I used a left brace without a matching right brace.
According to the original eqn specification, a
`left`

does not need a corresponding
`right`

. But with the GNU version of eqn, I get a big ugly NULL on the
right if I don't have a corresponding
`right`

something. I eventually got the above to work by using multiple blanks
inside quotes for the closing
`right`

. This is one place where the freeware hasn't caught up with the original
product. (Another place is a bug where the
`approx`

keyword does not render the approximately equal symbol like it should.)

I could go on to describe how to use piles and braces to build column vectors and matrices, but I'm getting tired, and I've either got your interest going or I haven't. If I have gotten your interest going, look at the old official manual for eqn. It's only eleven pages. Print it out if you are serious about writing equations.

The eqn language does not have nearly as many symbols at LaTeX. And there are probably some other important limitations. I haven't used LaTeX in three decades, so I am more than rusty on the subject.

If Conntects becomes profitable and the more critical parts of the system become sufficiently stable, I'd like to extend the GNU version of eqn to include the symbols available in TeX. Given how MathML works, this shouldn't be too terribly hard.

Or better yet, I could hire someone else to do this job.

TeX is powerful, but having to type backslashes before every keyword drove me batty back in the day. (And since I was running TeX on an Atari 1040 ST, I ended up writing my own terminate and stay resident text editor that fit in 100K of RAM. Said text editor used control-K for the backslash to cut down on pinky gymnastics, and I had multiple copy and past buffers so I could avoid retyping the more common TeX keywords.)

So enjoy eqn. It fits nicely into the Easy to Type philosophy of QTML. (Or to be more precise, QTML was inspired by the Easy to Type philosophy of troff, and UNIX in general.)

0 COMMENTS

You need to be logged in to comment