Fast math typesetting for the web.
Go to file
Martin von Gagern 2f7a54877a Implement environments, for arrays and matrices in particular
This commit introduces environments, and implements the parser
infrastructure to handle them, even including arguments after the
“\begin{name}” construct.  It also offers a way to turn array-like data
structures, i.e. delimited by “&” and “\\”, into nested arrays of groups.
Environments are essentially functions which call back to the parser to
parse their body.  It is their responsibility to stop at the next “\end”,
while the parser takes care of verifing that the names match between
“\begin” and “\end”.  The environment has to return a ParseResult, to
provide the position that goes with the resulting node.

One application of this is the “array” environment.  So far, it supports
column alignment, but no column separators, and no multi-column shorthands
using “*{…}”.  Building on the same infrastructure, there are “matrix”,
“pmatrix”, “bmatrix”, “vmatrix” and “Vmatrix” environments.  Internally
these are just “\left..\right” wrapped around an array with no margins at
its ends.  Spacing for arrays and matrices was derived from the LaTeX
sources, and comments indicate the appropriate references.

Now we have hard-wired breaks in parseExpression, to always break on “}”,
“\end”, “\right”, “&”, “\\” and “\cr”.  This means that these symbols are
never PART of an expression, at least not without some nesting.  They may
follow AFTER an expression, and the caller of parseExpression should be
expecting them.  The implicit groups for sizing or styling don't care what
ended the expression, which is all right for them.  We still have support
for breakOnToken, but now it is only used for “]” since that MAY be used to
terminate an optional argument, but otherwise it's an ordinary symbol.
2015-06-18 22:24:40 +02:00
build Add a setup rule to Makefile 2013-07-30 13:54:43 -07:00
contrib/auto-render [auto-render] Don't stop parsing when one expression fails 2015-04-26 17:04:11 -07:00
dockers Make our own screenshotting script instead of using huxley 2015-03-12 16:40:15 -07:00
metrics Fix up small problems with #126 2015-02-18 16:28:05 -08:00
src Implement environments, for arrays and matrices in particular 2015-06-18 22:24:40 +02:00
static Implement environments, for arrays and matrices in particular 2015-06-18 22:24:40 +02:00
test Implement environments, for arrays and matrices in particular 2015-06-18 22:24:40 +02:00
.arcconfig Add better lint checking. 2015-04-22 18:55:20 -07:00
.gitignore Ignore NPM debug logs 2014-09-17 15:47:04 +02:00
.jshintrc Add JSON as a global in .jshintrc 2015-04-26 17:22:42 -07:00
.travis.yml Enable travis-ci.org 2014-09-12 17:50:39 -07:00
cli.js Add display mode to the CLI 2015-06-10 07:15:53 -07:00
CONTRIBUTING.md Make our own screenshotting script instead of using huxley 2015-03-12 16:40:15 -07:00
katex.js Expose a new .__parse() method for generating a parse tree from a math expression. 2015-05-04 15:59:18 -04:00
LICENSE.txt Add basic auto-render extension 2015-04-01 15:57:10 -07:00
lint_blacklist.txt Fix our parsing strategy so it is the same as (or very similar to) TeX's 2014-09-09 23:18:37 -07:00
Makefile Add better lint checking. 2015-04-22 18:55:20 -07:00
package.json Don't slice in lexer 2015-04-06 10:39:39 -07:00
README.md Bump version in README 2015-06-05 02:00:15 -07:00
server.js Add better lint checking. 2015-04-22 18:55:20 -07:00

KaTeX Build Status

KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web.

  • Fast: KaTeX renders its math synchronously and doesn't need to reflow the page. See how it compares to a competitor in this speed test.
  • Print quality: KaTeXs layout is based on Donald Knuths TeX, the gold standard for math typesetting.
  • Self contained: KaTeX has no dependencies and can easily be bundled with your website resources.
  • Server side rendering: KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML.

KaTeX supports all major browsers, including Chrome, Safari, Firefox, Opera, and IE 8 - IE 11.

Usage

You can download KaTeX and host it on your server or include the katex.min.js and katex.min.css files on your page directly from a CDN:

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min.js"></script>

In-browser rendering

Call katex.render with a TeX expression and a DOM element to render into:

katex.render("c = \\pm\\sqrt{a^2 + b^2}", element);

If KaTeX can't parse the expression, it throws a katex.ParseError error.

Server side rendering or rendering to a string

To generate HTML on the server or to generate an HTML string of the rendered math, you can use katex.renderToString:

var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}");
// '<span class="katex">...</span>'

Make sure to include the CSS and font files, but there is no need to include the JavaScript. Like render, renderToString throws if it can't parse the expression.

Rendering options

You can provide an object of options as the last argument to katex.render and katex.renderToString. Available options are:

  • displayMode: boolean. If true the math will be rendered in display mode, which will put the math in display style (so \int and \sum are large, for example), and will center the math on the page on its own line. If false the math will be rendered in inline mode. (default: false)

For example:

katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, { displayMode: true });

Automatic rendering of math on a page

Math on the page can be automatically rendered using the auto-render extension. See the Auto-render README for more information.

Contributing

See CONTRIBUTING.md

License

KaTeX is licensed under the MIT License.