# vuepress-plugin-mathjax

Support TeX syntax in markdown files of your VuePress site.

# Installation

npm install -D vuepress-plugin-mathjax

# Usage

// .vuepress/config.js
module.exports = {
  plugins: [
    [
      'vuepress-plugin-mathjax',
      {
        target: 'svg',
        macros: {
          '*': '\\times',
        },
      },
    ],
  ],
}

# Configs

Configurations marked with frontmatter will be allowed to be written in the mathjax option of the frontmatter of the page in VuePress 1.0.0-alpha.39 and higher. E.g:

---
mathjax:
  presets: '\def\lr#1#2#3{\left#1#2\right#3}'
---

# target

  • type: 'svg' | 'chtml'
  • default: 'chtml'

The output of MathJax.

# packages

  • type: string | string[]
  • default: all the MathJax packages available

The MathJax packages to use.

# macros

  • type: { [key: string]: string | null }
  • default: {}

Macros will be automatically mixed with built-in macros. To disable a built-in macro, simply set the value to null accordingly. Here is a list of all built-in macros:

# presets frontmatter

  • type: string | string[]
  • default: []

The preset content to be added. The preset content will automatically be inserted before the TeX code.

# showError vuepress 1.0.0-alpha.40+

  • type: boolean
  • default: process.env.NODE_ENV === 'development'

Whether to output an error message in the console when a compilation error is encountered.

# cache

  • type: false | object
  • default: {}

LRU Cache Options. If set to false, no cache will be used.

# Syntax

# Inline

Surround your LaTeX with a single $ on each side for inline rendering.

Input:

Euler's identity $e^{i\pi}+1=0$ is a beautiful formula in $\mathbb{R}^2$.

Output:

Euler's identity is a beautiful formula in .

# Block

Use two ($$) for block rendering. This mode uses bigger symbols and centers the result.

Input:

$$\frac {\partial^r} {\partial \omega^r} \left(\frac {y^{\omega}} {\omega}\right) 
= \left(\frac {y^{\omega}} {\omega}\right) \left\{(\log y)^r + \sum_{i=1}^r \frac {(-1)^i r \cdots (r-i+1) (\log y)^{r-i}} {\omega^i} \right\}$$

Output:

# Conventions

Math parsing in markdown is designed to agree with the conventions set by pandoc:

Anything between two $ characters will be treated as TeX math. The opening $ must have a non-space character immediately to its right, while the closing $ must have a non-space character immediately to its left, and must not be followed immediately by a digit. Thus, $20,000 and $30,000 won’t parse as math. If for some reason you need to enclose text in literal $ characters, backslash-escape them and they won’t be treated as math delimiters.

# Features

# Using Macros

This is part of config.js of this project:

module.exports = {
  plugins: [
    [
      'vuepress-plugin-mathjax',
      {
        macros: {
          '\\Z': '\\mathbb{Z}',
        },
      },
    ],
  ],
}

Input:

We have $a>n <=> a>=n+1$, if $a, n\in\Z$.

Output:

We have , if .

# Using Presets vuepress 1.0.0-alpha.39+

This is the frontmatter of this page:

---
sidebarDepth: 3
mathjax:
  presets: '\def\lr#1#2#3{\left#1#2\right#3}'
---

Input:

$$

Output:

# Miscellaneous

# Dependencies

This plugin uses mathjax-v3 (Early beta) which is not ready for production.

This plugin is inspired by some other libraries, thank you!

# Demo

Input:

Supposing that $y >= 0$ and that $[\log x]$ represents the integer part of $\log x$, let:
$$\Phi (y) = \frac {1} {2 \pi i} \int_{2 - i \infty}^{2 + i \infty} \frac {y^{\omega} \mathrm{d} \omega} {\omega \left(1 + \frac {\omega} {(\log x)^{1.1}}\right)^{[ \log x ] + 1}}, x > 1$$
Obviously, when $0 <= y <= 1$, there is $\Phi(y) = 0$. For all $y >= 0$, $\Phi(y)$ is a non-decreasing function.
When $\log x>=10^4$ and $y>= e^{2{(\log x)}^{-0.1}}$, thus:
$$1 - x^{- 0.1} <= \Phi (y) <= 1$$

Output:

Supposing that and that represents the integer part of , let:

Obviously, when , there is . For all , is a non-decreasing function.

When and , thus: