Skip to content

tmke8/math-core

Folders and files

NameName
Last commit message
Last commit date
Feb 28, 2025
Mar 2, 2025
Mar 3, 2025
Mar 3, 2025
Mar 2, 2025
Mar 7, 2025
Mar 5, 2025
Mar 2, 2025
Dec 12, 2023
Jan 3, 2024
Mar 3, 2025
Mar 2, 2025
Nov 23, 2023
Mar 2, 2025
Jan 19, 2025

Repository files navigation

math-core – LaTeX to MathML Core

Forked from https://github.com/osanshouo/latex2mathml .

math-core provides a functionality to convert LaTeX math equations to MathML Core. 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, \mathcal (same as \mathscr because Unicode doesn’t distinguish the two)
  • White spaces, e.g., \!, \,, \:, \;, \ , \quad, \qquad.
  • Matrix, e.g. \begin{matrix}, \begin{pmatrix}, \begin{bmatrix}, \begin{vmatrix}.
  • Multi-line equation \begin{align}, \begin{align*}, \begin{aligned}.
  • 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>).

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, Display};

let latex = r#"\erf ( x ) = \frac{ 2 }{ \sqrt{ \pi } } \int_0^x e^{- t^2} \, dt"#;
let mathml = latex_to_mathml(latex, Display::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.