关于 VuePress 的版本选择
根据 VuePress 官方网站的指示,当前 VuePress 共有三个「大版本」,它们分别是 v0.x 、 v1.x (目前为 v1.8.2 )和 v2.x (目前为 v2.0.0-beta.25)。可以看出,VuePress v2.x 基于 Vue v3.x 开发,尚处于 Beta 测试模式,其对 Markdown / HTML / CSS / JavaScript 的语法要求比 v1.x 更为严格,但内部功能尚不稳定,因此使用 VuePress v1.x 是更好的选择。
如果你没有充足的理由,那么你应该使用 vuepress@1.8.2 而不是 vuepress@next ,因为 vuepress@next 仍不稳定。
—— 来自 @tani 的原话
关于 Markdown-it 数学公式渲染插件的选择
VuePress 使用了 markdown-it 来解析 Markdown 文件,因此我们可以借助 npm 或 yarn 安装 markdown-it-XXX 系列插件,在 VuePress 中扩展 Markdown 语法,实现更多附加功能。
在 VuePress 中安装数学公式插件、实现 TeX / KaTeX / LaTeX 公式渲染可能是多数开发者都会遇到的需求。经过搜索,目前常见的 Markdown-it 数学插件有以下几种。它们各自的介绍与劣势如下:
- markdown-it-math
- 介绍:一个通用的 Markdown-it 数学插件
- 问题:本身只是设计用来解析 MathML 的,还需要借助其他渲染器(比如默认的 mathup )将指定的 Markdown 数学公式语法转换为 MathML
- markdown-it-latex2img
- 介绍:借助默认的 Math API 将 LaTeX 语法的数学公式渲染为图片,并嵌入到渲染生成的 HTML 页面中
- 问题一:API 生成的图像为透明底白字,而 VuePress v1.x 默认仅提供白底日间主题,读者无法看见渲染生成的数学公式(公式位置会留出一段空白)
- 问题二:即使使用 VuePress v2.x ,使用
$$ \frac{1}{2} $$ 形式书写的独行公式块并不能按预期居中显示 - markdown-it-katex
- 介绍:一个支持 KaTeX 语法的数学公式渲染器
- 问题:由于 KaTeX 与 MathJax 语法的细微不同,且 Typora 中使用的内置数学公式渲染器也是基于 MathJax 实现的,部分复杂的数学公式在 KaTeX 模式下无法被正确解析渲染
以上的 Markdown-it 数学插件存在各种各样的问题,它们为我带来了较多的麻烦,因此我没有选择这些插件。在多次搜寻后,我选用了 markdown-it-mathjax3 插件。
markdown-it-mathjax3 是一个从 markdown-it-katex 改造而来、额外增加了 MathJax v3 和 SVG 渲染支持的插件。在使用过程中,我也发现了一些「深坑」:
- 此插件的 v2.2.0 版本将解析渲染 MathJax v3 的 JavaScript 脚本以
<scripts /> 片段的形式直接插入了 VuePress 生成的 *.html.vue 模板文件中,VuePress 认为这种行为存在风险,因此在 VuePress v2.x 中执行 vuepress docs dev 命令时会产生满屏的报错(但点击页面右上角的 × 标志可以关闭报错,公式也能被正常渲染但公式块不居中);通过与插件原作者的交流,最新发布的 v3.0.0-0 将 JavaScript 生成至额外的文件,成功解决了内嵌 <scripts /> 标签导致报错的问题。 - 此插件将 MathJax v3 公式解析转换为 SVG 图片后,会在外层添加一个标准 HTML 标签意外的
<mjx-container /> 标签以实现公式块的居中显示。 VuePress v2.x 无法识别这个标签,因此在执行 vuepress docs build 命令时仍会无法编译生成。选择将 VuePress 回退至 v1.x 版本则能够正常完成编译生成过程。
总结
综上所述,如果有其他用户选择使用 VuePress 搭建博客并希望在其中添加插件以支持数学公式渲染,建议使用 VuePress v1.8.2 + markdown-it-mathjax3 v3.0.0-0 的组合。
经历以上的「扫雷」过程,我的首个 VuePress 项目终于成功部署上线,欢迎大家的 光临 ~
|