6 releases

0.2.3 Apr 27, 2020
0.2.2 Apr 21, 2020
0.1.1 Apr 6, 2020

#156 in Science

Download history 171/week @ 2024-07-20 175/week @ 2024-07-27 195/week @ 2024-08-03 143/week @ 2024-08-10 156/week @ 2024-08-17 144/week @ 2024-08-24 217/week @ 2024-08-31 244/week @ 2024-09-07 173/week @ 2024-09-14 195/week @ 2024-09-21 169/week @ 2024-09-28 196/week @ 2024-10-05 190/week @ 2024-10-12 188/week @ 2024-10-19 265/week @ 2024-10-26 172/week @ 2024-11-02

842 downloads per month
Used in 11 crates (8 directly)

MIT license

80KB
1.5K SLoC

latex2mathml

Crate docs.rs

latex2mathml provides a functionality to convert LaTeX math equations to MathML. This crate is implemented in pure Rust, so it works in any environments if Rust works (including WebAssembly).

Supported LaTeX commands

  • Numbers, e.g. 0, 3.14, ...
  • ASCII and Greek (and more) letters, e.g. x, \alpha, \pi, \aleph, ...
  • Symbols, e.g., \infty, \dagger, \angle, \Box, \partial, ...
  • Binary relations, e.g. =, >, <, \ll, :=, ...
  • Binary operations, e.g. +. -, *, /, \times, \otimes, ...
  • Basic LaTeX commands, e.g. \sqrt, \frac, \sin, \binom, ...
  • Parentheses, e.g., \left\{ .. \middle| .. \right], ...
  • Integrals, e.g., \int_0^\infty, \iint, \oint, ...
  • Big operators, e.g., \sum, \prod, \bigcup_{i = 0}^\infty, ...
  • Limits and overset/underset, e.g., \lim, \overset{}{}, \overbrace{}{}, ...
  • Font styles, e.g. \mathrm, \mathbf, \bm, \mathit, \mathsf, \mathscr, \mathbb, \mathfrak, \texttt.
  • White spaces, e.g., \!, \,, \:, \;, \ , \quad, \qquad.
  • Matrix, e.g. \begin{matrix}, \begin{pmatrix}, \begin{bmatrix}, \begin{vmatrix}.
  • Multi-line equation \begin{align} (experimental, see below).
  • Feynman slash notation: \slashed{\partial}.

See examples/equations.rs for examples. Note that all supported commands are defined in src/token.rs.

Unsupported LaTeX commands

  • New line \\, except for ones in a matrix or align environment.
  • Alignment &, except for ones in a matrix or align environment.
  • Complicated sub/superscripts (<mmultiscripts>).

Align environment \begin{align} .. \end{align} is experimentally supported from version 0.2.1, as suggested in the issue #2. Because it is implemented using matrix environment, the output MathML is not recommended and rendered equation may be not well-formatted.

Dollar sign \$ is allowed for the latex_to_mathml function, but the replace function does not allow it. This is because the replace function assumes all dollar signs appear as boundaries of LaTeX equations.

If a feature you need is lacked, feel free to open an issue.

Usage

For a single LaTeX equation:

use latex2mathml::{latex_to_mathml, DisplayStyle};

let latex = r#"\erf ( x ) = \frac{ 2 }{ \sqrt{ \pi } } \int_0^x e^{- t^2} \, dt"#;
let mathml = latex_to_mathml(latex, DisplayStyle::Block).unwrap();
println!("{}", mathml);

For a document that includes LaTeX equations:

let text = r#"
Let us consider a rigid sphere (i.e., one having a spherical 
figure when tested in the stationary system) of radius $R$ 
which is at rest relative to the system ($K$), and whose centre 
coincides with the origin of $K$ then the equation of the 
surface of this sphere, which is moving with a velocity $v$ 
relative to $K$, is
$$\xi^2 + \eta^2 + \zeta^2 = R^2$$
"#;
let mathml = latex2mathml::replace(text).unwrap();
println!("{}", mathml);

To convert HTML files in a directory recursively, use latex2mathml::convert_html. This function is for converting HTMLs generated by cargo doc.

See also examples/equations.rs and examples/document.rs.

No runtime deps