# vuepress-plugin-mathjax

让你的 VuePress 站点中的 Markdown 文件支持 TeX 语法。

# 安装

npm install -D vuepress-plugin-mathjax

# 使用

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

# 配置项

标有 frontmatter记号的配置在 VuePress 1.0.0-alpha.39 以上的版本中将允许写在页面的 frontmatter 的 mathjax 选项中。例如:

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

# target

  • 类型: 'svg' | 'chtml'
  • 默认值: 'chtml'

MathJax 的输出格式。

# packages

  • 类型: string | string[]
  • 默认值: 所有可以加载的 MathJax 包

设置使用的 MathJax 包。

# macros

  • 类型: { [key: string]: string | null }
  • 默认值: {}

输入的宏将与内置的宏进行混合。如果要取消一个内置的宏替换,可以将对应的值设为 null。下面是一张内置宏的列表:

# presets frontmatter

  • 类型: string | string[]
  • 默认值: []

要添加的预设内容。预设内容会自动插入到要编译的 TeX 代码前。

# showError vuepress 1.0.0-alpha.40+

  • 类型: boolean
  • 默认值: process.env.NODE_ENV === 'development'

当遇到编译错误时,是否要在控制台输出错误信息。

# cache

  • type: false | object
  • default: {}

LRU Cache 选项。如果设为 false,将不会使用缓存。

# 语法

# 行内语法

使用单个 $ 围绕一段 TeX 语法进行内联渲染。

输入:

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

输出:

Euler's identity is a beautiful formula in .

# 块语法

块语法使用两个符号 $$,它将会带来更大的符号和居中显示。

输入:

$$\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\}$$

输出:

# 一些约定

markdown 文件中的 TeX 语法将遵循 pandoc 制定的准则:

两个 $ 之间的任何内容都将被视为 TeX 语法。开头的 $ 必须在其右边有一个非空格字符,而结尾的 $ 必须在其左边有一个非空格字符,并且不能立即跟随一个数字。因此 $20,000 和 $30,000 将不会解析为 TeX。如果由于某种原因你需要将文本置于 $ 字符中,则使用反斜杠转义它们即可。

# 特性

# 使用宏

这是这个项目的 config.js 中的插件部分:

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

输入:

若 $a, n\in\Z$,则 $a>n <=> a>=n+1$。

输出:

,则

# 使用预设 vuepress 1.0.0-alpha.39+

这是这个页面的 frontmatter:

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

输入:

$$

输出:

# 其他

# 依赖

这个插件目前使用 mathjax-v3(早期测试版),因此可能不适合生产环境。

# 相关工具

这个插件的部分灵感来自其他一些库,谢谢你们!

# 演示

输入:

假设 $y >= 0$ , 而 $[\log x]$ 表示 $\log x$ 的整数部分, 设:
$$\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$$
显见, 当 $0 <= y <= 1$ 时, 有 $\Phi(y) = 0$. 对于所有 $y >= 0$, 则 $\Phi(y)$ 是一个非减函数.
当 $\log x>= 10^4$ 及 $y>= e^{2{(\log x)}^{-0.1}}$ 时, 则有:
$$1 - x^{- 0.1} <= \Phi (y) <= 1

输出:

假设 , 而 表示 的整数部分, 设:

显见, 当 时, 有 . 对于所有 , 则 是一个非减函数.

时, 则有: