The HaTeX library

HaTeX is a Haskell library that implements the LaTeX syntax, plus some abstractions on top.

Check a list of usage examples in the Examples directory of the repository in GitHub. A good starting point is simple.hs. Run any example script executing the main function.

Installation notes

To install HaTeX, use cabal-install or stack.

To install with cabal, run:

$ cabal update
$ cabal install HaTeX

This will download and install the latest official release (recommended). If you want to try a newer version, use git to clone the code contained in this repository.

$ git clone
$ cd HaTeX
$ cabal install

However, this is not recommended as it may include some bugs or oddities due to in-development features. Note that this package follows the Package Versioning Policy, so it is unlikely to suffer from API breakages if you follow it too when importing the library (assuming you are using the version in Hackage).

Current HaTeX versions

HaTeX on Hackage

HaTeX on Stackage

HaTeX on Stackage Nightly

HaTeX User’s Guide

The HaTeX User’s Guide lives here… and is also done in Haskell! It is free source and anybody can contribute to it. Doing so, you will help current and future users!

A downloadable version (not necessarily the latest version, but most likely) can be found here. To be sure that you are reading the last version, go to the github repository of the guide and follow instructions to build it. It is fairly easy.

Please note that the user’s guide needs to be updated (contributions are more than welcome!).

Community and Contributions

There are many ways to get involved in the HaTeX project. Use the most comfortable way for you.

TODO list

  • Add more examples.
  • Add more documentation.
  • BibTeX support.

Related projects

  • haskintex: Tool to use Haskell (and, additionaly, the HaTeX library) within a LaTeX file.
  • TeX-my-math: Experimental library to ease the production of mathematical expressions using HaTeX.

Travis automatic build

For every code push to the GitHub repository, an automatic build checks that the library compiles with several versions of GHC (check .travis.yml for the complete list of versions) and that all tests pass. This label indicates the result of the last automatic build.

Build Status

Currently, automatic builds are only running under Linux.


HaTeX Changelog

This is the logchange of HaTeX. It is not exhaustive. For a full list of changes, see the commit history of the git repository:

Changelog by versions

From to

  • Fix build with GHC 8.4.1 (#113) (leftaroundabout).
  • Added Multirow, Bigstrut, and Lscape modules (#107, #111) (romildo).
  • More spacing and line breaking commands (#108, #110) (romildo).

From to

  • Warning: Using is not recommended, since it fails to build with GHC 8.4.1. Please, upgrade to

  • New bibtex module (leftaroundabout).

  • New function ‘squareBraces’ (NorfairKing).

  • New function ‘table’ (leftaroundabout).

From to

  • Semigroup instance for LaTeX.
  • Data, Generic, and Typeable instances for LaTeX
  • and related types.

From to

  • New math space commands (romildo).
  • New function: mapLaTeXT (ddssff).
  • Some fixes for qrcode package (L3n41c).

From to

  • New ‘array’ command (NorfairKing).
  • Added package options for the hyperref package related to PDF metadata (dmcclean).
  • QRCode module (dmcclean).
  • New math symbols (leftaroundabout).
  • Added ‘cases’ environment (NorfairKing).
  • Changed the way subscripts and superscripts work. See #67. Also #78.
  • LaTeX parser is now configurable. Currently, only configurable option is verbatim environments.

From to

  • New differentiation symbols (AMSMath).
  • Fix for integralFromTo.
  • Extend definitions for the Num class instance of LaTeXT.
  • Show and Eq instances of LaTeXT dissappear if base version is greater or equal to

From to

  • Full compatibility without warnings with GHC-7.10.

From to

  • Pretty-printer: Use softline instead of line after commands.
  • Compatibility with GHC-7.10.
  • Added accent commands to AMSMath (dmcclean).
  • Missing Num and Floating class methods now have a default implementation, using the new operatorname function (dmcclean).
  • Added imath and jmath to AMSMath (dmcclean).
  • Support for parsec-3.1.9 (snoyberg).

Thanks to Douglas McClean (dmcclean@GitHub) for the AMSMath additions.

From to

  • New package implemented: relsize. Thanks José Romildo Malaquias.
  • Fixed bug in autoBrackets (#42).

From to

  • New package implemented: AMSSymb.
  • Package beamer further developed.
  • Bug fix: #35.
  • Added common numeric sets to AMSSymb.
  • Breaking change: AMSMath functions ‘pm’ and ‘mp’ changed their type from LaTeXC l => l -> l -> l to LaTeXC l => l.
  • Additions to the AMSMath module.

From to

  • Fixed link in cabal file.
  • Added support for arguments delimited by parenthesis (experimental).
  • More tests on parsing.
  • Parser now backtracks when failing in argument parsing.

From to

  • New function matrixTabular to create tables from matrices.
  • Modified LaTeX Monoid instance to make monoid laws hold.
  • Some documentation improvements.
  • Added this CHANGELOG!