前言
vitepress默认的md解析器markdown-it
不支持LaTeX数学公式的解析展示,需要安装扩展插件,此处笔者介绍markdown-it-katex
及markdown-it-mathjax3
两种插件的配置方法
注:笔者当前使用最新vitepress及插件版本如下,随版本更新配置方法可能有改动,仅供参考
vitepress | markdown-it-katex | markdown-it-mathjax3 |
---|---|---|
1.0.0-alpha.19 | 2.0.3 | 4.3.2 |
一、markdown-it-katex
一个支持 KaTeX 语法的数学公式渲染器
1.安装库
npm install markdown-it-katex -D
2.配置插件
修改.vitepress/config.js
配置文件
由于vitepress编译生成静态html文件时,无法识别插件生成的特殊标签,故需在编译时进行处理,将特殊标签标记为自定义标签,防止编译报错
import { defineConfig } from 'vitepress'
import markdownItKatex from 'markdown-it-katex'
const customElements = [
'math',
'maction',
'maligngroup',
'malignmark',
'menclose',
'merror',
'mfenced',
'mfrac',
'mi',
'mlongdiv',
'mmultiscripts',
'mn',
'mo',
'mover',
'mpadded',
'mphantom',
'mroot',
'mrow',
'ms',
'mscarries',
'mscarry',
'mscarries',
'msgroup',
'mstack',
'mlongdiv',
'msline',
'mstack',
'mspace',
'msqrt',
'msrow',
'mstack',
'mstack',
'mstyle',
'msub',
'msup',
'msubsup',
'mtable',
'mtd',
'mtext',
'mtr',
'munder',
'munderover',
'semantics',
'math',
'mi',
'mn',
'mo',
'ms',
'mspace',
'mtext',
'menclose',
'merror',
'mfenced',
'mfrac',
'mpadded',
'mphantom',
'mroot',
'mrow',
'msqrt',
'mstyle',
'mmultiscripts',
'mover',
'mprescripts',
'msub',
'msubsup',
'msup',
'munder',
'munderover',
'none',
'maligngroup',
'malignmark',
'mtable',
'mtd',
'mtr',
'mlongdiv',
'mscarries',
'mscarry',
'msgroup',
'msline',
'msrow',
'mstack',
'maction',
'semantics',
'annotation',
'annotation-xml'
]
export default defineConfig({
markdown: {
config: (md) => {
md.use(markdownItKatex)
}
},
// 由于vitepress编译生成静态html文件时,无法识别插件生成的特殊标签,故需在编译时进行处理,将特殊标签定位自定义标签,防止编译报错
vue: {
template: {
compilerOptions: {
isCustomElement: (tag) => customElements.includes(tag)
}
}
}
})
3.引入样式
前两步已经可以将数学公式转译成HTML标签,但此时样式是错乱的,需要引入插件附带的样式,可修改.vitepress/config.js
配置文件,在head
中添加需要的外置css文件,也可以下载css文件后放入项目内。
head: [
['link', { rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css', crossorigin: '' }]
]
此时,md文件中的数学公式就可以正常编译和显示了。
二、markdown-it-mathjax3
一个从 markdown-it-katex 改造而来、额外增加了 MathJax v3 和 SVG 渲染支持的插件
1.安装库
npm install markdown-it-mathjax3 -D
2.配置插件
修改.vitepress/config.js
配置文件
markdown-it-mathjax3的配置与markdown-it-katex基本相同,但由于markdown-it-mathjax3使用svg渲染,增加了一些自定义标签,配置时同样需要将这些标签标记为自定义标签,防止编译出错
import mathjax3 from 'markdown-it-mathjax3';
const customElements = [
'math',
'maction',
'maligngroup',
'malignmark',
'menclose',
'merror',
'mfenced',
'mfrac',
'mi',
'mlongdiv',
'mmultiscripts',
'mn',
'mo',
'mover',
'mpadded',
'mphantom',
'mroot',
'mrow',
'ms',
'mscarries',
'mscarry',
'mscarries',
'msgroup',
'mstack',
'mlongdiv',
'msline',
'mstack',
'mspace',
'msqrt',
'msrow',
'mstack',
'mstack',
'mstyle',
'msub',
'msup',
'msubsup',
'mtable',
'mtd',
'mtext',
'mtr',
'munder',
'munderover',
'semantics',
'math',
'mi',
'mn',
'mo',
'ms',
'mspace',
'mtext',
'menclose',
'merror',
'mfenced',
'mfrac',
'mpadded',
'mphantom',
'mroot',
'mrow',
'msqrt',
'mstyle',
'mmultiscripts',
'mover',
'mprescripts',
'msub',
'msubsup',
'msup',
'munder',
'munderover',
'none',
'maligngroup',
'malignmark',
'mtable',
'mtd',
'mtr',
'mlongdiv',
'mscarries',
'mscarry',
'msgroup',
'msline',
'msrow',
'mstack',
'maction',
'semantics',
'annotation',
'annotation-xml',
'mjx-container',
'mjx-assistive-mml',
];
export default {
markdown: {
config: (md) => {
md.use(mathjax3);
},
},
vue: {
template: {
compilerOptions: {
isCustomElement: (tag) => customElements.includes(tag),
},
},
},
};
由于markdown-it-mathjax3
使用svg
渲染,不需要引入额外css
文件。
总结
本文章主要为记录一下为vitepress
配置数学公式解析插件的过程,其中主要踩坑是由于插件生成的特殊标签不支持导致的编译报错,可通过修改vitepress
配置对自定义标签进行单独配置进行解决。
此处附上github及vitepress博客地址