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

187

Version

1.7

License

FreeBSD

Issues

Pull Requests

Stars

Forks

Maintainer

Matthias Gondan

Last Published

January 18th, 2026

Functions in mathml (1.7)

%<=%

Right double arrow, displayed as x => y
frac

Division displayed as fraction
%up%

Up arrow, presented as x up y
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
%~~%

Approximate equality, shown as x ~~ y
%<-%

Left arrow, presented as x <- y
%<->%

Double sided arrow, presented 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
hook

Hook for custom symbols
instead

instead
%+-%

Plus Minus, it shows x and calculates x +- y
math

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

Mathjax output
mathml

MathML output
mathml_preproc

Map R operators to their respective Prolog counterparts
%prop%

Proportional, shown as x o< y
sum_over

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

Canonicalize an R call: Reorder the function arguments
add_right

add_right
cal

Calligraphic font
dot

Multiplication
fname

Return function body
decorations

Identity functions for different decorations
%=~%

Congruence, shown as x =~ y
%->%

Right arrow, presented as x -> y
denote

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

Division displayed as large fraction
%.%

Product x * y, shown as x dot y
%dbldown%

Down double arrow, displayed as x dArr y
fontstyles

Identity functions for different font styles
%==%

Equivalence, shown as x == y
%=>%

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

Down arrow, presented as x downarrow y
add_left

add_left
add

add
%dblup%

Up double arrow, displayed as x uArr y