Learn R Programming

mathml. Translate R expressions to MathML

Version 1.6: with Prolog interface

mathml allows rendering R terms as pretty mathematical equations, bridging the gap between computational needs, presentation of results, and their reproducibility.

Researchers or teachers can already use RMarkdown to conduct analyses and show results, mathml smoothes this process and allows for integrated calculations and output. The package mathml can help in fact to improve data analyses and statistical reports from an aesthetical perspective, as well as regarding reproducibility of research, by allowing also for a better detection of possible mistakes in R programs.

The package supports both MathML and Latex/MathJax for use in RMarkdown documents, presentations and Shiny Apps.

License

This R package is distributed under a BSD-2 simplified license (see the file LICENSE).

Installation

  1. Download and install a recent R from https://www.r-project.org/

  2. Download and install a recent RStudio from https://www.rstudio.com/

  3. R> install.packages("mathml")

The package depends on R package rolog [https://cran.r-project.org/package=rolog], which itself needs the SWI-Prolog runtime on the system. The latter can be installed either from [https://swi-prolog.org] or by installing R package rswipl [https://cran.r-project.org/package=rswipl].

Example

library(mathml)
term <- quote(a^b + c * (d + 3) - a^2L * (a + d))
mathout(term)

$a^b + c \cdot (d+3.00) - a^2 \cdot (a+d)$

term <- call("^", quote(x), 2L)
mathout(term)

$x^2$

For R package developers

If you use mathml for your own package, please do not "Import" mathml in your DESCRIPTION, but "Depend" on it.

Package: onmathml
Type: Package
Title: A package that uses mathml
...
Depends: 
    R (>= 4.3),
    mathml (>= 1.3)

It's not entirely clear why this is needed.

From Prolog

Installation: pack_install(mathml).

Usage: use_module(library(mathml)).

Example: pl_mathml(sin(x), X).

Copy Link

Version

Install

install.packages('mathml')

Monthly Downloads

308

Version

1.6

License

FreeBSD

Issues

Pull Requests

Stars

Forks

Maintainer

Matthias Gondan

Last Published

August 19th, 2025

Functions in mathml (1.6)

omit

omit
omit_left

omit_left This is a function that allows the user to highlight the mistakes, in particular the omissions in the left-hand side of the expression
mathml

MathML output
mathml_preproc

Map R operators to their respective Prolog counterparts
%<=%

Right double arrow, displayed as x => y
mathout

MathML or MathJax output, depending on the knitr context
%<=>%

If and only if condition, displayed as x <=> y
name

Add a name attribute to an element (most often, an R function)
prod_over

product over a range. On the R side, this function just returns the product of the first argument, but allows for decorations.
omit_right

omit_right This is a function that allows the user to highlight the mistakes, in particular the omissions in the right-hand side of the expression
mathjax

Mathjax output
sum_over

sum over a range. On the R side, this function just returns the first argument, but allows for decorations.
math

Adds the class "math" to the object for knitr output via mathout()
canonical

Canonicalize an R call: Reorder the function arguments
fname

Return function body
decorations

Identity functions for different decorations
cal

Calligraphic font
add

add
dot

Multiplication
dfrac

Division displayed as large fraction
add_right

add_right
denote

denote This is a function that allows the user to insert abbreviations in the formula, explain them and make the needed computations
add_left

add_left
%=~%

Congruence, shown as x =~ y
frac

Division displayed as fraction
%=>%

Left double arrow, displayed as x <= y
%==%

Equivalence, shown as x == y
%.%

Product x * y, shown as x dot y
%->%

Right arrow, presented as x -> y
%dblup%

Up double arrow, displayed as x uArr y
%down%

Down arrow, presented as x downarrow y
%dbldown%

Down double arrow, displayed as x dArr y
fontstyles

Identity functions for different font styles
%~~%

Approximate equality, shown as x ~~ y
%up%

Up arrow, presented as x up y
%prop%

Proportional, shown as x o< y
%<-%

Left arrow, presented as x <- y
instead

instead
%+-%

Plus Minus, it shows x and calculates x +- y
%<->%

Double sided arrow, presented as x <-> y
hook

Hook for custom symbols