2 releases

0.1.1 May 28, 2023
0.1.0 May 28, 2023

#892 in Graphics APIs

40 downloads per month
Used in lateximggen-lib

Apache-2.0

5.5MB
50K SLoC

TypeScript 43K SLoC // 0.4% comments JavaScript 7K SLoC // 0.2% comments Bazel 320 SLoC Rust 225 SLoC // 0.0% comments Shell 12 SLoC

Contains (Zip file, 2MB) mathjax-data/data.zip

crates-io api-docs

Render MathJax expressions into either SVG or PNG formats.

See the docs for documentation.


lib.rs:

Render MathJax expressions into either SVG or PNG formats.

Crate Feature Flags

  • node - Enables the NodeJs backend, this will attempt to use a system installation of NodeJs at runtime as the renderer. This will be priotized over any other features if enabled.
  • browser - Enables the headless_chrome backend, this will create a headless Chrome instance to use as the renderer. If this is enabled in conjunction with the node feature flag, this will be used as a fall back when NodeJs is not available.
  • auto - This is equivelent to enabling all backends (currently just node and browser) see MathJax::new for what this specifically does.
  • image - Allows converting the rendered SVG into an image::DynamicImage via Render::into_image.

By default, the auto crate feature is enabled.

Usage

  1. Create an instance of MathJax through MathJax::new.
  2. Call MathJax::render with the expression you want to render.
  3. Call one of the conversion methods on Render to get the desired output format.

For example, if we wanted to render the expression y=\frac{1}{x} into the file test.svg:

use mathjax::MathJax;

let expression = r#"y=\frac{1}{x}"#;
let renderer = MathJax::new().unwrap();
let result = renderer.render(expression).unwrap();
let svg_string = result.into_raw(); // This is a `<svg></svg>` element.
std::fs::write("test.svg", svg_string).unwrap();

Which produces the following image:

If we had the image feature flag enabled, we could do the following to convert into an image::DynamicImage and save it into the file test.png:

use mathjax::MathJax;

let expression = r#"y=\frac{1}{x}"#;
let renderer = MathJax::new().unwrap();
let result = renderer.render(expression).unwrap();
let image = result.into_image(10.0).unwrap(); // This is an image::DynamicImage.
image.save("test.png").unwrap();

(see Render::into_image for what 10.0 means here)
Producing:

Dependencies

~14–28MB
~242K SLoC