Last Update: 2010-04-13 09:01:14 -0400
Author:William Morgan (mailto:
Copyright:Copyright 2005—2010 William Morgan
License:GNU GPL version 2


Ritex converts expressions from WebTeX into MathML. WebTeX is an adaptation of TeX math syntax for web display. Ritex supports most TeX math syntax, and supports macros.

For example, Ritex turns



  <math xmlns="">

How to get Ritex

To install, use RubyGems: gem install ritex. For examples and git instructions, see the home page:

News about Ritex

See the blog:


  require 'rubygems'
  require 'ritex'
  p =
  ARGF.each { |l| puts p.parse(l) }

  ## or ...

  ARGF.each do |l|
      puts p.parse(l)
    rescue Racc::ParseError
      $stderr.puts "invalid input"

See the documentation for Ritex::Parser for gory details.

Ritex’s MathML output

To be pedantic, Ritex is a WebTeX to MathML converter. WebTeX is an adapation of the TeX math syntax which is designed for web page display. WebTeX documentation can be found at:

If you’re familiar with TeX math syntax, it’s mostly the same, but there are several important differences in WebTeX. Notably:

  • arrays: Use array syntax; there’s no no eqnarray or align
  • macro definitions: define; no newcommand or def
  • left and right no longer need “invisible” delimiters like “.“

These differences are explained in the WebTeX documentation.

Ritex also supports many of itex2MML’s various extensions to WebTeX, mainly consisting of additional aliases (e.g. infinity for infty) and markup (e.g. underoverset).

Comparison with itex2MML

itex2MML is another option for converting LaTeX-like math into MathML. It has Ruby bindings. Compared against itex2MML version 1.3.7 (3/7/2009), Ritex has several differences:

  • It supports macros.
  • It’s written in Ruby.
  • It fixes several output bugs:
    • Operators like < and > produce (math operator) tags instead of (math identifier) tags.
    • A sequence of letters like “abc” is treated as three separate variables and not as one variable. That’s The TeX Way (tm).
    • \ (backslash space) is a medium space, not an undefined character.
    • binom output does not add extra parentheses
    • Empty delimiters are accepted (e.g. “left” is sufficient; no need for “left.”) as per WebTeX spec.
    • cellopts{} can be elided in arrays as per WebTeX examples.
  • It’s slower.