:uri-project: https://github.com/asciidoctor/asciimath ifndef::env-site[:status:]
An http://asciimath.org[AsciiMath] parser and MathML/LaTeX generator written in pure Ruby.
ifdef::status[] [discrete]
image:{uri-project}/workflows/CI/badge.svg?branch=master["Build Status", link={uri-project}/actions?query=branch%3Amaster] image:https://img.shields.io/gem/v/asciimath.svg?label=gem%20version[Gem Version, link=https://rubygems.org/gems/asciimath] endif::status[]
Add this line to your application's Gemfile:
And then execute:
$ bundle
Or install it yourself as:
$ gem install asciimath
First require the library.
Then parse an AsciiMath string.
The parsed expression is a set of nested Array and Hash objects.
This expression can then be converted to MathML, HTML (experimental) or LaTeX.
The MathML, HTML or LaTeX code is returned as a String.
The AsciiMath parser and converters can be invoked via the command line as follows:
asciimath "an asciimath string"
or
This command will print out the generated code on stdout.
The parser can be extended by passing a custum tokenization table:
my_tokens_table = AsciiMath::SymbolTableBuilder.new AsciiMath::Parser.add_default_parser_symbols(my_tokens_table) my_tokens_table.add('mysymbol', :mysymbol, :symbol)
Furthermore, the behaviour of the tokenizer be customized by altering the value
associated with a token in AsciiMath::Tokenizer::DEFAULT_PARSE_SYMBOL_TABLE
:
my_tokens_table = AsciiMath::SymbolTableBuilder.new AsciiMath::Parser.add_default_parser_symbols(my_tokens_table) my_tokens_table.add('alpha', :beta, :symbol)
The same behaviour applies to each individual render (MathMLBuilder
,
HTMLBuilder
and LatexBuilder
). By adding entries to a rendere's rendering
table (or modifying exisisting entries), users can customize it's output:
my_rendering_table = AsciiMath::SymbolTableBuilder.new AsciiMath::MarkupBuilder.add_default_display_symbols(my_rendering_table) my_rendering_table.add('alpha', '\u03b2', :identifier)
The HTML output is still regarded somewhat experimental - for basic usage it is fine, but it is not yet complete. Known issues are as follows:
sqrt
function does not generate sane outputbb
) will result in broken output.Rendering the HTML output correctly requires the inclusion of style/math.css
in the html document.
There is currently no specific required font for this output, it simply selects a serif
font family - change the @font-family
attribute in the .math-inline
class to select something specific.
All LaTeX commands and environments used in the output are coverved by
https://ctan.org/pkg/amsmath[`amsmath] and
amssymb`, with a few exceptions:
\color
\cancel
\mathscr
\twoheadrightarrowtail
The \color
command is supported by the
https://www.ctan.org/pkg/xcolor[`xcolor] package, which is included in most LaTeX distributions. The
\cancelcommand is supported by the https://www.ctan.org/pkg/cancel[cancel] package, also included in most LaTeX distributions. The other commands are supported by the https://ctan.org/pkg/stix[
stix`] package.
. Fork it (https://github.com/pepijnve/asciimath/fork)
. Create your feature branch (git checkout -b my-new-feature
)
. Commit your changes (git commit -am 'Add some feature'
)
. Push to the branch (git push origin my-new-feature
)
. Create a new Pull Request