年初把博客更新了成用 gatsby-plugin-mdx 处理 mdx 文件来生成页面。在更新前,解析 Markdown 文件中的 公式使用的是 gatsby-remark-katex 插件,这个插件和 gatsby-transformer-remark 配合挺好用的,但是当我更新成 MDX 之后就没法正常工作了,所以本文简单记录下解决方案。
用到的插件
这里我标注了插件版本,大家在使用的时候需要下载相应版本,版本过高会导致插件不起作用,粗略探索了一下,大致是因为 gatsby-plugin-mdx
依赖的 mdx-js
版本比较低导致的。
yarn add remark-math@v3 rehype-katex@v3
配置方式
- 在 gatsby-config.js 中配置插件
//gatsby-config.js
// 插件版本过高的话,这里也会提示不让用require引用,需要使用import
const remarkMath = require('remark-math')
const rehypeKatex = require('rehype-katex')
module.exports = {
// ...
plugins: [
// ...
{
resolve: `gatsby-plugin-mdx`,
options: {
extensions: [`.mdx`, `.md`],
remarkPlugins: [remarkMath],
rehypePlugins: [rehypeKatex],
gatsbyRemarkPlugins: [
{
resolve: `gatsby-remark-images`,
options: {
maxWidth: 960,
quality: 90,
linkImagesToOriginal: false,
},
},
],
},
},
],
}
- 在 gatsby-browser.js 中引用 Katex 的 css 样式
因为上面两个插件只是单纯的帮我们将 LaTeX 公式转成了相应的 HTML 元素,我们需要使用 Katex 的样式,这样 LaTeX 公式才能正常 render。
// gatsby-browser.js
// ...
import "katex/dist/katex.min.css"
// ...
示例
进行配置之后,我们就可以在 mdx 文件中书写相应的 LaTeX 内容了,插件可以解析行内和块两种写法。
行内写法示例
这是一个行内 $\LaTeX$ 公式, $i\hbar\frac{\partial \varphi } {\partial {t}} = \frac{-\hbar^2}{2m}
\left( \frac{\partial^2}{\partial x^2} + \frac{\partial^2}{\partial y^2} +
\frac{\partial^2}{\partial z^2} \right) \varphi + V \varphi$
这是一个行内 公式,
块写法示例
下面是一个 $\LaTeX$ 公式块:
$$
\int_{x^2 + y^2 \leq R^2} f(x,y) dx dy =
\int_{\theta=0}^{2\pi} \int_{r=0}^R f(r\cos\theta,r\sin\theta) r dr d\theta
$$
下面是一个 公式块: