【工具】数学公式及化学方程式Math

参考教程

安装并配置hexo-filter-mathjax

卸载hexo-math

博客目录下查看是否安装了hexo-math插件

npm list hexo-math

如果已经安装,将其卸载

npm uninstall hexo-math --save

安装hexo-filter-mathjax

npm install hexo-filter-mathjax --save

安装成功后,我们可以进行一些全局配置,打开hexo目录下的_config.yml文件, 在最后面添加如下的代码:

mathjax:
  tags: none # or 'ams' or 'all'
  single_dollars: true # enable single dollar signs as in-line math delimiters
  cjk_width: 0.9 # relative CJK char width
  normal_width: 0.6 # relative normal (monospace) width
  append_css: true # add CSS to pages rendered by MathJax
  every_page: false # if true, every page will be rendered by MathJax regardless the `mathjax` setting in Front-matter

安装公式渲染器

hexo-math默认的公式渲染器是hexo-renderer-marked,它和markdown的语法有冲突,我们将其卸载,查看是否安装了hexo-renderer-marked公式渲染器:

npm list hexo-renderer-marked

如果安装了将其卸载:

npm uninstall hexo-renderer-marked  --save

再安装一个新的公式渲染器,叫做hexo-renderer-kramed,它对hexo-renderer-marked进行了改进,在hexo目录下输入下面的命令安装:

npm install hexo-renderer-kramed --save

卸载了hexo-renderer-marked后,如果不安装hexo-renderer-kramed整个网站渲染不出来,导致server lost。

全局和主题配置

安装成功后,修改以下文件的内容防止语法冲突。
打开hexo主目录下的这个文件:[BlogRoot]\node_modules\kramed\lib\rules\inline.js,然后修改下面的规则(大家最好不要删除原代码,只是将其注释掉):

//escape: /^\\([\\`*{}\[\]()#$+\-.!_>])/
//修改为:
escape: /^\\([`*\[\]()#$+\-.!_>])/
//em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/
//修改为
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/

最后在主题目录下_config.butterfly.yml,开启对mathjax的支持,如下所示:

# MathJax
mathjax:
  enable: true
  # See: http://mhchem.github.io/MathJax-mhchem/
  mhchem: true  # 化学方程式
  per_page: false

公式及化学式输入测试

行间公式测试

$
f\left(
   \left[
     \frac{
       1+\left\{x,y\right\}
     }{
       \left(
          \frac{x}{y}+\frac{y}{x}
       \right)
       \left(u+1\right)
     }+a
   \right]^{3/2}
\right)
$

\begin{eqnarray\*}
\nabla\cdot\vec{E}&=&\frac{\rho}{\epsilon_0}\\\\
\nabla\cdot\vec{B}&=&0\\\\
\nabla\times\vec{E}&=&-\frac{\partial B}{\partial t}\\\\
\nabla\times\vec{B}&=&\mu_0\left(\vec{J}+\epsilon_0\frac{\partial E}{\partial t}\right)\\\\
\end{eqnarray\*}

$
i\hbar\frac{\partial}{\partial t}\psi=-\frac{\hbar^2}{2m}\nabla^2\psi+V\psi
$


$\sum_{i=1}^n \frac{1}{i^2} \quad and \quad \prod_{i=1}^n \frac{1}{i^2} \quad and \quad \bigcup_{i=1}^{2} R$


$f(x_1,x_2,\underbrace{\ldots}_{\rm ldots} ,x_n) = x_1^2 + x_2^2 + \underbrace{\cdots}_{\rm cdots} + x_n^2$

行内公式测试

行内公式$O(f(n))=log_2^{n}$测试

行内公式测试

行内公式$\ce{H2O}$和$\ce{CrO4^2-}$测试

行内公式测试

化学式测试

$\ce{CO2 + C -> 2 CO}$

$\ce{Hg^2+ ->[I-] HgI2 ->[I-] [Hg^{II}I4]^2-}$

$C_p[\ce{H2O(l)}] = \pu{75.3 J // mol K}$

$\ce{x Na(NH4)HPO4 ->[\Delta] (NaPO3)_x + x NH3 ^ + x H2O}$

$\ce{Zn^2+  <=>[+ 2OH-][+ 2H+]  $\underset{\text{amphoteres Hydroxid}}{\ce{Zn(OH)2 v}}$  <=>[+ 2OH-][+ 2H+]  $\underset{\text{Hydroxozikat}}{\ce{[Zn(OH)4]^2-}}$}$

补丁

由于修改了[BlogRoot]\node_modules\kramed\lib\rules\inline.js的部分内容,但是node_modules依赖文件太大没有上传到github仓库无法实现修改的内容,需要增加一个补丁:

  • 安装 patch-packagepostinstall 脚本:
npm install patch-package
  • package.json 中添加一个 postinstall 脚本:
"scripts": {
  "postinstall": "patch-package"
}
  • 修改 node_modules/kramed/lib/rules/inline.js 文件后,运行:
npx patch-package kramed

这会在项目根目录下创建一个 patches/ 文件夹,包含对 kramed 包的补丁。在部署时,Vercel 会自动运行 postinstall,并应用这些补丁。

后记

本博客中使用mathjax时出现一个bug,正常LaTex公式需要两个$,但是博客中只要一个,两个渲染不出来,比如:

$$
i\hbar\frac{\partial}{\partial t}\psi=-\frac{\hbar^2}{2m}\nabla^2\psi+V\psi
$$

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 3415226167@qq.com
资源 相册