This page discusses mimeTeX, a program that displays math on the web.
See Writing Math on the Web
for a more general discussion.

Announcement:
If latex is installed on your server then see
mathTeX ,
the successor to mimeTeX. It's based on real LaTeX and renders
higher quality images than mimeTeX.
If latex is not available on your server, continue using mimeTeX.

To see the image
just write the tag <img src="/cgi-bin/mimetex.cgi?
x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}">

This page contains more information
than you'll probably need to read. If you followed the
QuickStart
above, try installing mimeTeX immediately. Or continue reading until you feel comfortable
trying to install mimeTeX.
Prerequisites are: some knowledge of your OS's shell,
of installing cgi's, of LaTeX. &quotComputers are like Old Testament gods:
lots of rules and no mercy.&quot Joseph Campbell, The Power of Myth
(Doubleday 1988, page 18)

(1) Introduction

"Where are we going?
And why are we in this handbasket?"

[¶1]MimeTeX, licensed under the
gpl,
lets you easily embed LaTeX math in your html pages.
It parses a LaTeX math expression and immediately emits the
corresponding gif image, rather than the usual TeX dvi.
And mimeTeX is an entirely separate little program that doesn't use
TeX or its fonts in any way. It's just one cgi that you put in your
site's cgi-bin/ directory, with no other dependencies.
So mimeTeX is very easy to install.
Just download
mimetex.zip and then type
unzip mimetex.zip
cc DAA mimetex.c gifsave.c
lm o mimetex.cgi
Now just mv mimetex.cgi to your cgi-bin/
directory,
set permissions as necessary, and you're all done.

[¶2]
And mimeTeX is equally easy to use:
just place an html <img> tag in your document
wherever you want to see the corresponding LaTeX expression.
For example, the <img&gt tag
<img
src="../cgi-bin/mimetex.cgi?f(x)=\int_{-\infty}^xe^{-t^2}dt" >
immediately generates the corresponding gif image on-the-fly,
displaying \normalsize~f(x)=\int\limits_{-\infty}^xe^{-t^2}dt
wherever you put that tag.

1.1 Alternative solutions...

"You should keep an open mind,
but not so open that your brains fall out."

[¶1]
MimeTeX's benefit over similar math-on-the-web solutions is, as
mentioned above, its very easy installation. But if that's not a
problem for you, and if your site's server already has a LaTeX
distribution installed, and suitable image conversion utilities like
ImageMagick,
then you may prefer to look at a math rendering script like
latexrender
which uses LaTeX to create higher quality images than mimeTeX
currently produces. For comparison,
\small~f(x)=\int\limits_{-\infty}^xe^{-t^2}dt
,
with arbitrary mean \large\mu
and standard deviation \large\sigma
,
and at mimeTeX's next larger font size, looks like

[¶3]
For example, mathtran
is a public LaTeX web service that's
particularly easy to use by following these simple
instructions. In the <head> of your
html page, place the tag
<script type="text/javascript"
src="http://www.mathtran.org/js/mathtran_img.js"></script>
and in the <body>, wherever you want to see latex images,
place tags like
<img alt="tex:any latex math expression">
For comparison,
<img alt="tex: f(x) = \frac1{\sigma\sqrt{2\pi}}
\int_{-\infty}^x e^{-\frac{(t-\mu)^2}{2\sigma^2}}dt">
looks like

mathtran

mimeTeX

unavailable

(2) QuickStart

"It's almost impossible to write contemporary mathematics.
Instead of, 'Petya washed his hands,'
mathematicians write:
There is a t1 < 0 such that the image of t1 under
the natural mapping
t1 > Petya(t1) belongs to
the set of dirty hands, and
a t2, t1 < t2 <= 0,
such that the image of t2 belongs to
the complement of that set."

[¶1]
MimeTeX is as TeX-like as possible (though
not 100% compliant), and you must already be familiar with LaTeX
math markup to use it. If you're not, many online LaTeX
tutorials
are readily available. You may also want to browse Andrew Roberts'
Latex Math I and
Latex Math II, or my own
LaTeX math tutorial.
Then, instead of continuing to read this page, you can just Submit any LaTeX
math expression you like in the Query Box below. I've started
you out with a little example already in the box, or
you can Click any of the Examples below
to place that corresponding expression in the Query Box.

[¶2]
Meanwhile, here are just a few quickstart tips for Submitting
your own mimeTeX expressions in the Query Box below
(a detailed syntax overview and reference is provided by the complete
mimeTeX manual):

MimeTeX currently has eight font sizes selected by
one of the usual directives \tiny
or \small or \normalsize ,
or \large (default) or \Large
or \LARGE , or \huge or \Huge .
Unlike standard LaTeX, font size directives may
appear within math mode expressions. They affect everything
to their right, except that their scope will be limited to any
{ }-enclosed subexpression in which they occur.
For example, "a+\small b+c"
renders
\large~a+\small~b+c
,
whereas
"\small a+{\Large b+}c" renders
\small~a+{\Large~b+}c
.

[¶3]
Now enter your own expression, use the sample provided,
or Click any of the Examples.
Then press the Submit button, and mimeTeX's rendering should be
displayed in the little window immediately below it.

First enter your own LaTeX expression,
or Click any example...

Now click Submit to see it rendered below...
<p>iframe's not supported if you see this.</p>

One particular "gotcha" is that mimeTeX bindings
are pretty much left-to-right. Thus, for example, although
mimeTeX correctly interprets \frac12 as well as
\frac1{x^2}, etc, the legal LaTeX expression
x^\frac12 must be written x^{\frac12}.
Otherwise, mimeTeX interprets it as {x^\frac}12, i.e.,
the same way x^\alpha12 would be interpreted, which is
nonsense for \frac. The same "gotcha" also applies to
other combinations of commands, e.g., you must write
\sqrt{\frac\alpha\beta}, or
\frac\alpha{\sqrt\beta}, etc. The
Syntax Reference section
of the mimeTeX manual contains much additional information.

And there are various additional syntactic and cosmetic
differences between LaTeX and mimeTeX. For example,
bounding boxes for mimeTeX's character bitmaps don't
accommodate italic corrections. Therefore, an expression
like \int\nolimits_a^b renders
rather than
.
To render the latter image you have to write the somewhat
cumbersome expression {\smashmargin2{\int\nolimits_a}^b}
instead (see
smash).

Besides such exceptions, mimeTeX
also provides various LaTeX extensions. For example, as already mentioned
above, font size directives like \Large are permitted
within mimeTeX math mode expressions, but flagged as
errors by LaTeX.

2.1 Error messages...

"Safety is not the absence of danger,
it is the absence of ignorance." Vol Libre: The Journal of the
Soaring Association of Canada, June/July 1998

[¶1]
Any (La)TeX error is typically also a mimeTeX error.
However, mimeTeX has no command line interface or
.log file for reporting errors. Its only
communication with you is through the mimeTeX image
rendered by your browser. So error messages are embedded
in that image whenever feasible. For example,
suppose you want to see
\normalsize\alpha\beta\gamma\delta
,
but you mistakenly type \alpha\bethe\gamma\delta
instead. Then the image rendered is
\normalsize\alpha\bethe\gamma\delta
,
indicating the unrecognized [\bethe?] where you wanted to type
\beta and had hoped to see
\normalsize\bf\beta
.
If your expression contains some unprintable character
(meaning any character mimeTeX has no bitmap for),
then just
\small\bf[?]
is displayed in the corresponding position.

[¶2]
The preceding example illustrates a pretty trivial error.
Any non-trivial errors in your expression are likely to
go unrecognized and unreported by mimeTeX, and to render
unexpected images. While checking your input expression
for syntax errors, keep in mind the following points
about mimeTeX's behavior:

An unmatched left brace { is matched
by mimeTeX with a "phantom" right brace }
that's imagined to be at the end of your expression.

Likewise, an unmatched \left(,
or \left\{ or \left\anything,
is matched by mimeTeX with a "phantom" \right.
at the end of your expression.

On the other hand, an unmatched right brace }
is displayed in place, as if you had typed \rbrace.

[¶2]
To check that your own release of mimeTeX is current,
type a url into your browser's locator window something like http://www.yourdomain.com/cgi-bin/mimetex.cgi?\version
which will display the version and revision date of
mimeTeX installed on your server.

(3) Examples

"You can observe a lot just by watching."
 Yogi Berra

[¶1]
Here are various additional random examples further illustrating
mimeTeX's features and usage.
To see how any displayed example is done,
you can Click its image to place its corresponding markup in the
Query Box above. Then press Submit
to re-render it, or you can edit the expression first to suit
your own purposes. You may also want to look at a
sample document
prepared using mimeTeX to render equations.

The little
dipole image is drawn only once, then multiput across two columns, and
then that result is further multiput down the rows. MimeTeX \picture's
can be used as picture elements in other pictures, nested to any level.
The image at left is picture-in-picture-in-picture.

(4) Scripts & Plugins

"Foxes have holes and birds have nests,
but the Son of man hath not where to lay his head." Jesus Christ,
Sermon on the Mount (Matthew 8:20)

[¶1]
Some useful scripts that automatically construct
mimeTeX <img> tags for you are illustrated below.
And you can also write your own scripts to simplify
the HTML notation required to incorporate mimeTeX
math images in your pages.

4.1 mimeTeX plugins...

[¶1]
The following javascript snippet (based on
mathtran's
mathtran_img.js) lets you just write
<img alt="mimetex:c=\sqrt{a^2+b^2}">
wherever you want to
see

[¶2]
Bulletin boards, wikis, etc, also incorporate
mimeTeX images with short scripts. For example, if you're using
phpBB2, then
Jameson
contributed the following typical one-line mod that lets you write
[tex] c=\sqrt{a^2+b^2} [/tex] to obtain the
same
image illustrated above

If you're using
phpBB3,
then no mod is even needed.
Just click Postings from the Administrator Control Panel,
and add the custom BBCode [tex]{TEXT}[/tex]
with the HTML replacement
<img src="/cgi-bin/mimetex.cgi?{TEXT}" align=middle>

[¶3]
Similarly, PmWiki
also has a
mimeTeX plugin that lets you just write
{$ c=\sqrt{a^2+b^2} $}
to obtain that same image. Several other packages
also have similar mimeTeX plugins, including

[¶4]Please note: If you're writing your own plugin for mimeTeX,
please don't write php code using system( ), or any other
shell escape mechanism, just to cache images. Use mimeTeX's
-DCACHEPATH=\"path/\"compile option instead.
system( ) raises security
issues, either real ones if used carelessly, or just in the minds of
system administrators. Either way, I've received many emails from
people unable to use mimeTeX because of unnecessary system( )
calls prohibited by security-conscious sysadmins. MimeTeX itself poses
minimal risk when used as illustrated above, but you're responsible
for any plugin/wrapper script you write around it.

4.2 Vertical alignment...

"If you think it's lonely at the top,
try it at the bottom."

[¶1]
An image like
does not look as good as the same image
\normalsize~f(x)=\int\limits_{-\infty}^xe^{-t^2}dt
that's vertically aligned with your surrounding text.
Along with several standard
HTTP header fields, mimeTeX also emits a special
Vertical-Align: nn
header, where nn is the number of pixels
(usually negative as illustrated) needed for a
style="Vertical-Align: nn px"
attribute in the <img> tag used to
render your expression. This Vertical-Align: header
is obtained by placing the directive \depth
anywhere in your expression.

[¶2]
But mimeTeX's special Vertical-Align: header
is unrecognized and ignored by your browser. You have to get the
header, interpret it, and write the corresponding <img> tag.
The only feasible way to do all this is using a scripting language.
This page uses the following, rather naive, php code

[¶3]
Now you can write
<?php mimetextag('\frac12\left(a^2+b^2\right)'); ?>
wherever you want to see
\normalsize\frac12\left(a^2+b^2\right)
correctly aligned. Note that the php code automatically
prepends \depth to your expression for you.
(Also note that this code calls mimeTeX twice to render each
expression, once to get the Vertical-Align: header and build
an <img> tag, and then again to render that tag.
If you're a good php programmer and write better code,
please email me a copy.)

[¶4]
If you're using mimeTeX's
-DCACHEPATH=\"path/\"compile option, you can request that
all images be cached with Vertical-Align: headers,
whether or not they contain the \depth directive.
Prefix your path/
with a leading % and write
-DCACHEPATH=\"%path/\" instead.
That leading % won't become part of your cache
directory's path/, but it will signal mimeTeX
to cache headers along with each image. (In this case,
the directive \nodepth suppresses
mimeTeX's header caching for that image.)

(5) QuickBuild

Now mv mimetex.cgi to your cgi-bin/
directory, and you're all done.
Read the rest of this section only if you want
more information.

[¶1]
mimeTeX's source code is ansi-standard C,
and should compile and execute without any change.
QuickBuild instructions below are for Unix. Modify them as necessary
for your particular situation (note the -DWINDOWS switch if applicable).
More detailed instructions comprise
Section II
of the complete manual.

[¶2]
The steps needed to compile and install
mimeTeX are:

Download and unzip
mimetex.zip in any convenient working directory.
Your working directory should now contain

If (and only if) you're compiling a Windows executable then
add -DWINDOWSgcc -DAA -DWINDOWS
mimetex.c gifsave.c -lm -o mimetex.exe
The above Unix-like syntax works with
MinGW and
djgpp
Windows compilers, but probably not with most others,
where it's only intended as a "template".

If you install mimeTeX on one server and try to use it
from another, you may instead see messages like
In this case, compile mimetex.cgi with the -DNOREFCHECK switch,
e.g.,cc -DAA -DNOREFCHECK
mimetex.c gifsave.c -lm -o mimetex.cgi
and read the -DREFLEVELS=n discussion under
compile options.

Immediately after compiling, test your new executable
by typing ./mimetex.cgi "x^2+y^2"
from the Unix command line (or mimetex "x^2+y^2"
from the Windows Command Prompt), which should emit
two ascii rasters something like the following

Install your compiled executable only after it runs successfully
from the command line. Just mv mimetex.cgi
to your server's cgi-bin/ directory and set permissions as
necessary.

Now, to quickly test your installed mimetex.cgi, try typing
a url into your browser's locator window something like http://www.yourdomain.com/cgi-bin/mimetex.cgi?x^2+y^2
which should display x^2+y^2
in the upper-left corner of your window,
just like clicking this link does, which tests my mimetex.cgi, http://www.forkosh.com/cgi-bin/mimetex.cgi?x^2+y^2

[¶3]
Any problems with anything above? Read the more detailed instructions
in Section II of the complete manual.

5.1 Precompiled Binaries...

"You have to plan for things in advance,
because afterwards it's way too late."

[¶1]
Compiling your own mimeTeX executable from source is highly recommended.
But if you don't have a compiler, or experience some other difficulty,
then the following pre-compiled binaries are available. Each binary is
the last file in a zip file named mimetex.zip, which also contains all
the source files that were current when the binary was compiled.
I can't be sure my binary will work on your machine.
Unix binaries are usually named mimetex.cgi inside the
mimetex.zip file, and others (e.g., Windows and VMS) are usually named
mimetex.exe. Unzip and rename them as necessary for your own system.

[¶2]
After downloading,
if you have "shell access", test
your downloaded binary from the command line as described in the
compile section above, to make sure it's the right binary for
your system.
If you see the two ascii rasters illustrated above, then your binary's
good, so mv it to your server's cgi-bin/ directory and
set permissions as necessary. But if your mimetex binary won't display
ascii rasters from the command line, then it's not going to emit gifs
from the server. Either find a compatible binary from the list above,
or you'll have to find a way to compile your own binary from mimetex's
source.

5.2 Public mimeTeX web service...

"Readers should not be discouraged if they find that they
do not have the prerequisites to read the prerequisites."
 Paul Halmos, in Measure Theory, 1950

[¶1]
If you have trouble installing mimeTeX on your own server, a public
mimeTeX web service is currently available.
An <img> tag of the form

will display
\normalsize~c=\sqrt{a^2+b^2}
wherever you put that <img&gt tag
in your own document.
Note that the typical ../cgi-bin/mimetex.cgi?
has been replaced by http://www.forkosh.com/mimetex.cgi?
in this <img> tag, using mimeTeX on my
server to render your expression for you.

That is, near the bottom of your document,
after the </BODY> tag, place exactly the
two <script> tags shown. Then, anywhere in
your document, any LaTeX math expressions surrounded by
$$. . .$$ will be rendered
for you by the public mimeTeX web service.

[¶3]
For production use, please do not use the public mimeTeX web service.
Install mimeTeX on your own server instead.

(6) GPL License

"My grandfather once told me there are two kinds of people:
Those who do the work and those who take the credit.
He told me to try to be in the first group; there was much
less competition."
Indira Gandhi, the late Prime Minister of India

[¶1]
MimeTeX's copyright is registered by me with the US Copyright Office,
and I hereby license it to you under the terms and conditions of the
GPL.
There is no official support of any kind whatsoever,
and you use mimeTeX entirely at your own risk, with no guarantee
of any kind, in particular with no warranty of merchantability.

[¶2]
By using mimeTeX, you warrant that you have read, understood
and agreed to these terms and conditions, and that you possess the legal right and ability to enter
into this agreement and to use mimeTeX in accordance with it.

[¶3]
Hopefully, the law and ethics regarding computer programs will
evolve to make this kind of obnoxious banter unnecessary.
In the meantime, please forgive me my paranoia.

[¶4]
To protect your own intellectual property, I recommend (both are pdf)
Copyright Basics from The Library of Congress,
in particular Circular 61, Copyright Registration for
Computer Programs.
Very briefly, download
Form TX
and follow the included instructions.
In principle, you automatically own the copyright
to anything you write the moment it's on paper. In practice,
if the matter comes under dispute, the courts look _very_ favorably
on you for demonstrating your intent by registering the copyright.

(7) Concluding Remarks

"Nostalgia isn't what it used to be."
 Peter De Vries

[¶1]
I hope you find mimeTeX useful. If so, a contribution to your
country's TeX Users Group,
or to the GNU project, is
suggested, especially if you're a company that's currently profitable.