# texmath

Conversion between formats used to represent mathematics.

http://github.com/jgm/texmath

 Version on this page: 0.11.2.1 LTS Haskell 18.10: 0.12.3.1 Stackage Nightly 2021-09-18: 0.12.3.1 Latest on Hackage: 0.12.3.1

See all snapshots `texmath` appears in

Maintained by
This version can be pinned in stack with:`texmath-0.11.2.1@sha256:0213f3199b9fa066cc6e65d12431352e396f1ba7cf2911bab24736ce532e21c6,6585`

#### Module documentation for 0.11.2.1

Depends on 8 packages(full list with versions):
Used by 1 package in lts-13.11(full list with versions):

# texmath

texmath is a Haskell library for converting between formats used to represent mathematics. Currently it provides functions to read and write TeX math, presentation MathML, and OMML (Office Math Markup Language, used in Microsoft Office), and to write Gnu eqn and pandoc’s native format (allowing conversion, using pandoc, to a variety of different markup formats). The TeX reader and writer supports basic LaTeX and AMS extensions, and it can parse and apply LaTeX macros. The package also includes several utility modules which may be useful for anyone looking to manipulate either TeX math or MathML. For example, a copy of the MathML operator dictionary is included.

You can try it out online here. (Note that the math it produces will be rendered correctly only if your browser supports MathML. Firefox does; Safari and Chrome do not.)

By default, only the Haskell library is installed. To install a test program, `texmath`, use the `executable` Cabal flag:

``````cabal install -fexecutable
``````

To run the test suite, compile with `--enable-tests` and do `cabal test`.

Alternatively, texmath can be installed using stack. Install the stack binary somewhere in your path. Then, in the texmath repository,

``````stack setup
stack install --flag texmath:executable
``````

The `texmath` binary will be put in `~/.local/bin`.

Macro definitions may be included before a LaTeX formula.

`texmath` will behave as a CGI script when called under the name `texmath-cgi` (e.g. through a symbolic link).

The file `cgi/texmath.html` contains an example of how it can be used.

# Generating lookup tables

There are three main lookup tables which are built form externally compiled lists. This section contains information about how to modify and regenerate these tables.

In the `lib` direction there are two sub-directories which contain the necessary files.

## MMLDict.hs

The utility program `xsltproc` is required. You can find these files in `lib/mmldict/`

1. If desired replace `unicode.xml` with and updated version (you can download a copy from here
2. `xsltproc -o dictionary.xml operatorDictionary.xsl unicode.xml`
3. `runghc generateMMLDict.hs`
4. Replace the operator table at the bottom of `src/Text/TeXMath/Readers/MathML/MMLDict.hs` with the contents of `mmldict.hs`

## ToTeXMath.hs

You can find these files in `lib/totexmath/`

1. If desired, replace `unimathsymbols.txt` with an updated verson from here
2. `runghc unicodetotex.hs`
3. Replace the record table at the bottom of `src/Text/TeXMath/Unicode/ToTeXMath.hs` with the contents of `UnicodeToLaTeX.hs`

## ToUnicode.hs

You can find these files in `lib/tounicode/`.

1. If desired, replace `UnicodeData.txt` with an updated verson from here.
2. `runghc mkUnicodeTable.hs`
3. Replace the table at the bottom of `src/Text/TeXMath/Unicode/ToUnicode.hs` with the output.

# Editing the tables

It is not necessary to edit the source files to add records to the tables. To add to or modify a table it is easier to add modify either `unicodetotex.hs` or `generateMMLDict.hs`. This is easily achieved by adding an item to the corresponding `updates` lists. After making the changes, follow the above steps to regenerate the table.

# Authors

John MacFarlane wrote the original TeX reader, MathML writer, and OMML writer. Matthew Pickering contributed the MathML reader, the TeX writer, and many of the auxiliary modules. Jesse Rosenthal contributed the OMML reader. Thanks also to John Lenz for many contributions.